Profilowanie modelu w celu określenia wykorzystania zasobówProfile your model to determine resource utilization

W tym artykule pokazano, jak profilować Uczenie maszynowe w modelu, aby określić, ile procesora i pamięci należy przydzielić dla modelu podczas wdrażania go jako usługi sieci Web.This article shows how to profile a machine learning to model to determine how much CPU and memory you will need to allocate for the model when deploying it as a web service.

Wymagania wstępnePrerequisites

W tym artykule założono, że masz przeszkolony i zarejestrowany model z Azure Machine Learning.This article assumes you have trained and registered a model with Azure Machine Learning. Zobacz przykładowy samouczek , aby zapoznać się z przykładem szkoleń i rejestrowania modelu scikit-uczyć przy użyciu Azure Machine Learning.See the sample tutorial here for an example of training and registering a scikit-learn model with Azure Machine Learning.

OgraniczeniaLimitations

  • Profilowanie nie będzie działało, gdy Azure Container Registry (ACR) dla Twojego obszaru roboczego znajduje się za siecią wirtualną.Profiling will not work when the Azure Container Registry (ACR) for your workspace is behind a virtual network.

Uruchamianie profileraRun the profiler

Po zarejestrowaniu modelu i przygotowaniu innych składników niezbędnych do wdrożenia można określić procesor i pamięć, która będzie potrzebna przez wdrożoną usługę.Once you have registered your model and prepared the other components necessary for its deployment, you can determine the CPU and memory the deployed service will need. Profilowanie testuje usługę, która uruchamia model i zwraca informacje takie jak użycie procesora CPU, użycie pamięci i opóźnienie odpowiedzi.Profiling tests the service that runs your model and returns information such as the CPU usage, memory usage, and response latency. Zawiera również zalecenia dotyczące procesora CPU i pamięci na podstawie użycia zasobów.It also provides a recommendation for the CPU and memory based on resource usage.

Aby profilować model, potrzebne są:In order to profile your model, you will need:

  • Zarejestrowany model.A registered model.
  • Konfiguracja wnioskowania na podstawie skryptu wejścia i definicji środowiska wnioskowania.An inference configuration based on your entry script and inference environment definition.
  • Pojedynczy kolumnowy tabelaryczny zestaw danych, gdzie każdy wiersz zawiera ciąg reprezentujący przykładowe dane żądania.A single column tabular dataset, where each row contains a string representing sample request data.

Ważne

W tym momencie obsługujemy tylko profilowanie usług, które oczekują, aby dane żądania były ciągiem, na przykład: szeregowany ciąg JSON, tekst, serializowany ciąg znaków itd. Zawartość każdego wiersza zestawu danych (String) zostanie umieszczona w treści żądania HTTP i wysłana do usługi hermetyzowania modelu na potrzeby oceniania.At this point we only support profiling of services that expect their request data to be a string, for example: string serialized json, text, string serialized image, etc. The content of each row of the dataset (string) will be put into the body of the HTTP request and sent to the service encapsulating the model for scoring.

Ważne

Obsługujemy profilowanie maksymalnie 2 procesorów CPU w regionie ChinaEast2 i USGovArizona.We only support profiling up to 2 CPUs in ChinaEast2 and USGovArizona region.

Poniżej znajduje się przykład sposobu konstruowania wejściowego zestawu danych w celu profilowania usługi, która oczekuje, że jej przychodzące dane żądania zawierają Zserializowany kod JSON.Below is an example of how you can construct an input dataset to profile a service that expects its incoming request data to contain serialized json. W takim przypadku utworzyliśmy zestaw danych oparty na 100 wystąpieniach tej samej zawartości danych żądania.In this case, we created a dataset based 100 instances of the same request data content. W realnie świecie zalecamy korzystanie z większych zestawów danych zawierających różne dane wejściowe, zwłaszcza jeśli użycie/zachowanie zasobów modelu jest zależne od danych wejściowych.In real world scenarios we suggest that you use larger datasets containing various inputs, especially if your model resource usage/behavior is input dependent.

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)

Gdy zestaw danych zawierający przykładowe dane żądania są gotowe, Utwórz konfigurację wnioskowania.Once you have the dataset containing sample request data ready, create an inference configuration. Konfiguracja wnioskowania jest oparta na score.py i definicji środowiska.Inference configuration is based on the score.py and the environment definition. W poniższym przykładzie pokazano, jak utworzyć konfigurację wnioskowania i uruchomić profilowanie:The following example demonstrates how to create the inference configuration and run profiling:

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

Następujące polecenie pokazuje, jak profilować model przy użyciu interfejsu wiersza polecenia:The following command demonstrates how to profile a model by using the 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>

Porada

Aby zachować informacje zwracane przez profilowanie, użyj tagów lub właściwości dla modelu.To persist the information returned by profiling, use tags or properties for the model. Użycie tagów lub właściwości przechowuje dane w modelu w rejestrze modelu.Using tags or properties stores the data with the model in the model registry. W poniższych przykładach pokazano, jak dodać nowy tag requestedCpu zawierający requestedMemoryInGb informacje i:The following examples demonstrate adding a new tag containing the requestedCpu and requestedMemoryInGb information:

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

Następne krokiNext steps