Profilování modelu za účelem určení využití prostředků

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

Tento článek ukazuje, jak profilovat strojové učení na model, 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 v1. Tato technika profilace není k dispozici pro verzi 2 rozhraní příkazového řádku ani 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. Rozšíření v1 budete moct nainstalovat a používat do tohoto data.

Doporučujeme přejít na mlrozšíření , nebo v2 do 30. září 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 model vytrénovali a zaregistrovali ve službě Azure Machine Learning. Příklad trénování a registrace modelu scikit-learn ve službě Azure Machine Learning najdete v ukázkovém kurzu.

Omezení

  • Profilace nebude fungovat, pokud se Azure Container Registry (ACR) pro váš pracovní prostor nachází 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é nasazená služba bude 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 odpovědí. 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 tomto okamžiku podporujeme profilaci pouze služeb, které očekávají, že data svých požadavků budou řetězec, například řetězec serializovaný json, text, serializovaný obrázek řetězce atd. Obsah každého řádku datové sady (řetězce) se vloží do textu požadavku HTTP a odešle se službě zapouzdření modelu pro vyhodnocování.

Důležité

V oblasti ChinaEast2 a USGovArizona podporujeme profilaci až 2 procesorů.

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

PLATÍ PRO:Sada 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 budete mít datovou sadu obsahující ukázková data požadavků připravenou, vytvořte konfiguraci odvozování. Konfigurace odvození 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

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