Criar o perfil de seu modelo para determinar a utilização de recursos

APLICA-SE A:Extensão de ML da CLI do Azurev1SDK do Python do Azure ML v1

Este artigo mostra como criar o perfil de um aprendizado de máquina como modelo para determinar a quantidade de CPU e memória que você precisará alocar para o modelo ao implantá-lo como um serviço Web.

Importante

Este artigo se aplica à CLI v1 e ao SDK v1. Essa técnica de criação de perfil não está disponível para v2 da CLI ou do SDK.

Importante

Alguns comandos da CLI do Azure neste artigo usam a extensão azure-cli-ml ou v1 do Azure Machine Learning. O suporte à extensão v1 terminará em 30 de setembro de 2025. Você poderá instalar e usar a extensão v1 até essa data.

Recomendamos que você faça a transição para a extensão ml ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, confira Extensão da CLI do Azure ML e SDK do Python v2.

Pré-requisitos

Este artigo pressupõe que você tenha treinado e registrado um modelo com o Azure Machine Learning. Consulte o tutorial de exemplo aqui para obter um exemplo de treinamento e registro de um modelo scikit-learn com o Azure Machine Learning.

Limitações

  • A criação de perfil não funcionará quando o Registro de Contêiner do Azure (ACR) para o espaço de trabalho estiver por trás de uma rede virtual.

Executar o criador de perfil

Depois de registrar seu modelo e preparar os outros componentes necessários para sua implantação, você pode determinar a CPU e a memória que o serviço implantado precisará. A criação de perfil testa o serviço que executa o modelo e retorna informações como uso de CPU, uso de memória e latência de resposta. Ele também fornece uma recomendação para a CPU e a memória com base no uso de recursos.

Para criar o perfil de seu modelo, será necessário:

  • Um modelo registrado.
  • Uma configuração de inferência com base em sua definição de ambiente de inferência e script de entrada.
  • Um conjunto de dados de tabela de coluna única, em que cada linha contém uma cadeia de caracteres que representa um exemplo de dado de solicitação.

Importante

Neste ponto, damos suporte apenas à criação de perfil de serviços que esperam que seus dados de solicitação sejam uma cadeia de caracteres, por exemplo: JSON serializado, texto, imagem serializada de cadeia de caracteres, etc. O conteúdo de cada linha do conjunto de linhas (cadeia de caracteres) será colocado no corpo da solicitação HTTP e enviado ao serviço que encapsula o modelo para pontuação.

Importante

Damos suporte apenas à criação de perfil de até duas CPUs na região ChinaEast2 e USGovArizona.

Abaixo está um exemplo de como você pode construir um conjunto de dados de entrada para criar o perfil de um serviço que espera que os seus serviços de solicitação de entrada contenham o JSON serializado. Nesse caso, criamos um conjunto de dados com base em instâncias 100 do mesmo conteúdo de dado de solicitação. Em cenários do mundo real, sugerimos que você use conjuntos de dados maiores contendo várias entradas, especialmente se o uso/comportamento do recurso de modelo for dependente de entrada.

APLICA-SE A: SDK azureml para Pythonv1

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)

Depois que você tiver o conjunto de dados que contém o exemplo de data de solicitação pronto, crie uma configuração de inferência. A configuração de inferência é baseada no score.py e na definição de ambiente. O exemplo a seguir demonstra como criar a configuração de inferência e executar a criação de perfil:

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

APLICA-SE A: Extensão ml da CLI do Azure v1

O comando a seguir demonstra como criar um perfil de um modelo usando a 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>

Dica

Para manter as informações retornadas pela criação de perfil, use marcas ou propriedades para o modelo. O uso de marcas ou Propriedades armazena os dados com o modelo no registro de modelo. Os exemplos a seguir demonstram como adicionar uma nova marca contendo as informações requestedCpu e 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

Próximas etapas