Sdílet prostřednictvím


Profilování modelu a určení využití prostředků

PLATÍ PRO:Rozšíření Azure CLI ml v1Python SDK azureml v1

V tomto článku se dozvíte, jak profilovat strojové učení k modelování, abyste zjistili, kolik procesoru a paměti budete muset modelu přidělit při nasazování jako webové služby.

Důležité

Tento článek se týká rozhraní příkazového řádku v1 a sady SDK verze 1. Tato technika profilace není k dispozici pro v2 rozhraní příkazového řádku nebo sady SDK.

Důležité

Některé příkazy Azure CLI v tomto článku používají azure-cli-mlrozšíření (nebo v1) pro Azure Machine Learning. Podpora rozšíření v1 skončí 30. září 2025. Do tohoto data budete moct nainstalovat a používat rozšíření v1.

Doporučujeme přejít na mlrozšíření (nebo v2) před 30. zářím 2025. Další informace o rozšíření v2 najdete v tématu Rozšíření Azure ML CLI a Python SDK v2.

Požadavky

Tento článek předpokládá, že jste vytrénovali a zaregistrovali model ve službě Azure Machine Learning. Příklad trénování a registrace modelu scikit-learn ve službě Azure Machine Learning najdete v tomto ukázkovém kurzu.

Omezení

  • Profilace nebude fungovat, když je služba Azure Container Registry (ACR) pro váš pracovní prostor za virtuální sítí.

Spuštění profileru

Jakmile zaregistrujete model a připravíte další komponenty potřebné pro jeho nasazení, můžete určit procesor a paměť, které bude nasazená služba potřebovat. Profilace testuje službu, která spouští váš model, a vrací informace, jako je využití procesoru, využití paměti a latence odezvy. Poskytuje také doporučení pro procesor a paměť na základě využití prostředků.

K profilování modelu budete potřebovat:

  • Registrovaný model.
  • Konfigurace odvozování založená na zaváděcím skriptu a definici prostředí pro odvozování.
  • Tabulková datová sada s jedním sloupcem, kde každý řádek obsahuje řetězec představující ukázková data požadavku.

Důležité

V tuto chvíli podporujeme pouze profilaci služeb, které očekávají, že jejich data žádosti budou řetězcem, například řetězec serializovaný json, text, serializovaný obrázek řetězce atd. Obsah každého řádku datové sady (řetězec) se vloží do textu požadavku HTTP a odešle do služby zapouzdření modelu pro bodování.

Důležité

Profilaci podporujeme pouze 2 procesory v oblasti ChinaEast2 a USGovArizona.

Níže je příklad, jak můžete vytvořit vstupní datovou sadu pro profilování služby, která očekává, že data příchozích požadavků budou obsahovat serializovaný json. V tomto případě jsme vytvořili datovou sadu založenou na 100 instancích stejného obsahu dat požadavku. Ve scénářích reálného světa doporučujeme používat větší datové sady obsahující různé vstupy, zejména pokud je využití a chování prostředků modelu závislé na vstupu.

PLATÍ PRO: 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)

Jakmile máte datovou sadu obsahující ukázková data požadavku připravená, vytvořte konfiguraci odvozování. Konfigurace odvozování je založená na score.py a definici prostředí. Následující příklad ukazuje, jak vytvořit konfiguraci odvozování a spustit profilaci:

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

PLATÍ PRO: Rozšíření Azure CLI ml v1

Následující příkaz ukazuje, jak profilovat model pomocí rozhraní příkazového řádku:

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

Chcete-li zachovat informace vrácené profilací, použijte značky nebo vlastnosti modelu. Použití značek nebo vlastností ukládá data s modelem v registru modelu. Následující příklady ukazují přidání nové značky obsahující tyto requestedCpu informace 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

Další kroky