Profilera din modell för att fastställa resursutnyttjande

GÄLLER FÖR:Azure CLI ml-tillägg v1Python SDK azureml v1

Den här artikeln visar hur du profilerar en maskininlärning för att modellera 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 varken CLI eller SDK.

Viktigt

Vissa 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 kommer att kunna installera och använda v1-tillägget fram till det datumet.

Vi rekommenderar att du övergår till mltillä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 Machine Learning. Se exempelsjälvstudien här för ett exempel på träning och registrering av en scikit-learn-modell med Azure Machine Learning.

Begränsningar

  • Profilering fungerar inte när Azure Container Registry (ACR) för din arbetsyta ligger 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 bestämma vilken PROCESSOR och minne 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 svarsfördröjning. Den innehåller också en rekommendation för PROCESSOR och minne 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ängserialiserad json, text, strängserialiserad bild osv. Innehållet i varje rad i datauppsättningen (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 2 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 dess inkommande begärandedata ska innehålla serialiserad json. I det här fallet skapade vi en datauppsättning baserad på 100 instanser av samma datainnehåll för begäran. 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ägg 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>

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. I följande exempel visas 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