Profilera din modell för att fastställa resursutnyttjande
GÄLLER FÖR:Azure CLI ml-tillägget v1Python SDK azureml v1
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-ml
tillägget , eller v1, för Azure Mašinsko učenje. Stödet för v1-tillägget upphör den 30 september 2025. Du kommer att kunna installera och använda v1-tillägget fram till det datumet.
Vi rekommenderar att du övergår till ml
tillägget , eller v2, före den 30 september 2025. Mer information om v2-tillägget finns i Azure ML CLI-tillägget och Python SDK v2.
Förutsättningar
Den här artikeln förutsätter att du har tränat och registrerat en modell med Azure Mašinsko učenje. I exempelguiden här finns ett exempel på hur du tränar och registrerar en scikit-learn-modell med Azure Mašinsko učenje.
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.
GÄLLER FÖR: Python SDK azureml v1
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:
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()
GÄLLER FÖR: Azure CLI ml-tillägget v1
Följande kommando visar hur du profilerar en modell med hjälp av 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>
Dricks
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
:
model.add_tags({'requestedCpu': details['requestedCpu'],
'requestedMemoryInGb': details['requestedMemoryInGb']})
az ml model profile -g <resource-group-name> -w <workspace-name> --i <model-id> --add-tag requestedCpu=1 --add-tag requestedMemoryInGb=0.5
Nästa steg
- Felsöka en misslyckad distribution
- Distribuera till Azure Kubernetes Service
- Skapa klientprogram för att använda webbtjänster
- Uppdatera webbtjänsten
- Distribuera en modell med en anpassad Docker-avbildning
- Använda TLS för att skydda en webbtjänst via Azure Machine Learning
- Övervaka dina Azure Mašinsko učenje-modeller med Application Insights
- Samla in data för modeller i produktion
- Skapa händelseaviseringar och utlösare för modelldistributioner