Dela via


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-mltillä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 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 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