Den här artikeln visar hur du profilerar en maskininlärning som ska modelleras för att avgöra hur mycket processor och minne du behöver allokera för modellen när du distribuerar den som en webbtjänst.
Viktigt
Den här artikeln gäller för CLI v1 och SDK v1. Den här profileringstekniken är inte tillgänglig för v2 av antingen CLI eller SDK.
Viktigt
Några av Azure CLI-kommandona i den här artikeln använder azure-cli-mltillägget , eller v1, för Azure Machine Learning. Stödet för v1-tillägget upphör den 30 september 2025. Du kan installera och använda v1-tillägget fram till det datumet.
Den här artikeln förutsätter att du har tränat och registrerat en modell med Azure Machine Learning. I exempelguiden här finns ett exempel på hur du tränar och registrerar en scikit-learn-modell med Azure Machine Learning.
Begränsningar
Profilering fungerar inte när Azure Container Registry (ACR) för din arbetsyta finns bakom ett virtuellt nätverk.
Kör profileraren
När du har registrerat din modell och förberett de andra komponenterna som krävs för distributionen kan du fastställa vilken PROCESSOR och minne som den distribuerade tjänsten behöver. Profilering testar tjänsten som kör din modell och returnerar information som cpu-användning, minnesanvändning och svarstid. Det ger också en rekommendation för processorn och minnet baserat på resursanvändning.
För att profilera din modell behöver du:
En registrerad modell.
En slutsatsdragningskonfiguration som baseras på startskriptet och definitionen för slutsatsdragningsmiljön.
En tabelldatauppsättning med en kolumn, där varje rad innehåller en sträng som representerar exempelbegärandedata.
Viktigt
I det här läget stöder vi bara profilering av tjänster som förväntar sig att deras begärandedata ska vara en sträng, till exempel sträng serialiserad json, text, sträng serialiserad bild osv. Innehållet i varje rad i datamängden (strängen) placeras i brödtexten i HTTP-begäran och skickas till tjänsten som kapslar in modellen för bedömning.
Viktigt
Vi stöder endast profilering av upp till två processorer i regionen ChinaEast2 och USGovArizona.
Nedan visas ett exempel på hur du kan konstruera en indatauppsättning för att profilera en tjänst som förväntar sig att inkommande begärandedata ska innehålla serialiserad json. I det här fallet skapade vi en datauppsättning baserad på 100 instanser av samma innehåll för begärandedata. I verkliga scenarier föreslår vi att du använder större datamängder som innehåller olika indata, särskilt om din modellresursanvändning/beteende är beroende av indata.
import json
from azureml.core import Datastore
from azureml.core.dataset import Dataset
from azureml.data import dataset_type_definitions
input_json = {'data': [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]]}
# create a string that can be utf-8 encoded and# put in the body of the request
serialized_input_json = json.dumps(input_json)
dataset_content = []
for i in range(100):
dataset_content.append(serialized_input_json)
dataset_content = '\n'.join(dataset_content)
file_name = 'sample_request_data.txt'
f = open(file_name, 'w')
f.write(dataset_content)
f.close()
# upload the txt file created above to the Datastore and create a dataset from it
data_store = Datastore.get_default(ws)
data_store.upload_files(['./' + file_name], target_path='sample_request_data')
datastore_path = [(data_store, 'sample_request_data' +'/' + file_name)]
sample_request_data = Dataset.Tabular.from_delimited_files(
datastore_path, separator='\n',
infer_column_types=True,
header=dataset_type_definitions.PromoteHeadersBehavior.NO_HEADERS)
sample_request_data = sample_request_data.register(workspace=ws,
name='sample_request_data',
create_new_version=True)
När du har datauppsättningen som innehåller exempelbegärandedata redo skapar du en slutsatsdragningskonfiguration. Inferenskonfigurationen baseras på score.py och miljödefinitionen. I följande exempel visas hur du skapar inferenskonfigurationen och kör profilering:
Python
from azureml.core.model import InferenceConfig, Model
from azureml.core.dataset import Dataset
model = Model(ws, id=model_id)
inference_config = InferenceConfig(entry_script='path-to-score.py',
environment=myenv)
input_dataset = Dataset.get_by_name(workspace=ws, name='sample_request_data')
profile = Model.profile(ws,
'unique_name',
[model],
inference_config,
input_dataset=input_dataset)
profile.wait_for_completion(True)
# see the result
details = profile.get_details()
Följande kommando visar hur du profilerar en modell med hjälp av CLI:
Azure CLI
az ml model profile -g<resource-group-name>-w<workspace-name>--inference-config-file<path-to-inf-config.json>-m<model-id>--idi<input-dataset-id>-n<unique-name>
Tips
Om du vill spara den information som returneras genom profilering använder du taggar eller egenskaper för modellen. Med hjälp av taggar eller egenskaper lagras data med modellen i modellregistret. Följande exempel visar hur du lägger till en ny tagg som innehåller requestedCpu informationen och requestedMemoryInGb :
Hantera datainmatning och förberedelse, modellträning och distribution samt övervakning av maskininlärningslösningar med Python, Azure Machine Learning och MLflow.
Se hur du övervakar Azure Machine Learning-slutpunkter online. Ta reda på hur du använder tillgängliga mått, loggar och integrering med Application Insights.
Arbetsytan är resursen på den översta nivån för Azure Machine Learning. Den behåller en historik över alla träningskörningar, med loggar, mått, utdata och en ögonblicksbild av dina skript.