Delen via


Uw model profileeren om het resourcegebruik te bepalen

VAN TOEPASSING OP: Azure CLI ml-extensie v1Python SDK azureml v1

In dit artikel wordt beschreven hoe u een machine learning-model kunt profileren om te bepalen hoeveel CPU en geheugen u moet toewijzen voor het model bij het implementeren als een webservice.

Belangrijk

Dit artikel is van toepassing op CLI v1 en SDK v1. Deze profileringstechniek is niet beschikbaar voor v2 van CLI of SDK.

Belangrijk

Sommige Azure CLI-opdrachten in dit artikel gebruiken de azure-cli-mlextensie (of v1) voor Azure Machine Learning. Ondersteuning voor de v1-extensie eindigt op 30 september 2025. U kunt de v1-extensie tot die datum installeren en gebruiken.

U wordt aangeraden vóór 30 september 2025 over te stappen op de mlextensie of v2. Zie de Azure ML CLI-extensie en Python SDK v2 voor meer informatie over de v2-extensie.

Vereisten

In dit artikel wordt ervan uitgegaan dat u een model hebt getraind en geregistreerd bij Azure Machine Learning. Zie de voorbeeldzelfstudie hier voor een voorbeeld van het trainen en registreren van een scikit-learn-model met Azure Machine Learning.

Beperkingen

  • Profilering werkt niet wanneer azure Container Registry (ACR) voor uw werkruimte zich achter een virtueel netwerk bevindt.

De profiler uitvoeren

Zodra u uw model hebt geregistreerd en de andere onderdelen hebt voorbereid die nodig zijn voor de implementatie, kunt u bepalen welke CPU en het geheugen de geïmplementeerde service nodig heeft. Profilering test de service die uw model uitvoert en retourneert informatie zoals het CPU-gebruik, geheugengebruik en reactielatentie. Het biedt ook een aanbeveling voor de CPU en het geheugen op basis van resourcegebruik.

Als u uw model wilt profilen, hebt u het volgende nodig:

  • Een geregistreerd model.
  • Een deductieconfiguratie op basis van uw invoerscript en definitie van de deductieomgeving.
  • Een tabellaire gegevensset met één kolom, waarbij elke rij een tekenreeks bevat die voorbeeldaanvraaggegevens voorstelt.

Belangrijk

Op dit punt ondersteunen we alleen profilering van services die verwachten dat hun aanvraaggegevens een tekenreeks zijn, bijvoorbeeld: geserialiseerde json, tekst, geserialiseerde tekenreeksafbeelding, enzovoort. De inhoud van elke rij van de gegevensset (tekenreeks) wordt in de hoofdtekst van de HTTP-aanvraag geplaatst en verzonden naar de service waarin het model wordt ingekapseld voor scoren.

Belangrijk

We ondersteunen alleen profilering tot 2 CPU's in de regio ChinaEast2 en USGovArizona.

Hieronder ziet u een voorbeeld van hoe u een invoergegevensset kunt maken om een service te profilen die verwacht dat de binnenkomende aanvraaggegevens geserialiseerde json bevatten. In dit geval hebben we een gegevensset gemaakt op basis van 100 exemplaren van dezelfde aanvraaggegevensinhoud. In praktijkscenario's raden we u aan om grotere gegevenssets te gebruiken die verschillende invoer bevatten, met name als het resourcegebruik/gedrag van uw model afhankelijk is van invoer.

VAN TOEPASSING OP: 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)

Zodra de gegevensset met voorbeeldaanvraaggegevens gereed is, maakt u een deductieconfiguratie. De deductieconfiguratie is gebaseerd op de score.py en de omgevingsdefinitie. In het volgende voorbeeld ziet u hoe u de deductieconfiguratie maakt en profilering uitvoert:

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()

VAN TOEPASSING OP: Azure CLI ml-extensie v1

De volgende opdracht laat zien hoe u een model kunt profilen met behulp van de 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>

Tip

Als u de informatie wilt behouden die wordt geretourneerd door profilering, gebruikt u tags of eigenschappen voor het model. Met behulp van tags of eigenschappen worden de gegevens opgeslagen met het model in het modelregister. In de volgende voorbeelden ziet u hoe u een nieuwe tag toevoegt die de requestedCpu en requestedMemoryInGb informatie bevat:

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

Volgende stappen