Uw model profileer 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 voor het model moet toewijzen wanneer u het als een webservice implementeert.

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 maken gebruik van de azure-cli-mlextensie , of v1 voor Azure Machine Learning. Ondersteuning voor de v1-extensie eindigt op 30 september 2025. Tot die datum kunt u de extensie v1 installeren en gebruiken.

U wordt aangeraden vóór 30 september 2025 over te stappen op de mlextensie , of v2. Zie 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. Bekijk hier de voorbeeldzelfstudie voor een voorbeeld van het trainen en registreren van een scikit-learn-model met Azure Machine Learning.

Beperkingen

  • Profilering werkt niet wanneer de 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 welk 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 moment ondersteunen we alleen profilering van services waarvoor wordt verwacht dat hun aanvraaggegevens een tekenreeks zijn, bijvoorbeeld: geserialiseerde json voor tekenreeksen, 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 van maximaal 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 inhoud van aanvraaggegevens. In praktijkscenario's raden we u aan grotere gegevenssets met verschillende invoergegevens te gebruiken, met name als uw modelresourcegebruik/-gedrag 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 u de gegevensset met voorbeeldaanvraaggegevens bij de hand hebt, 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 profileert:

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 profileert 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 die door profilering wordt geretourneerd, wilt behouden, gebruikt u tags of eigenschappen voor het model. Met behulp van tags of eigenschappen worden de gegevens met het model opgeslagen in het modelregister. In de volgende voorbeelden ziet u hoe u een nieuwe tag toevoegt met de requestedCpu informatie en 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

Volgende stappen