Partilhar via


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

APLICA-SE A:Azure CLI ml extension v1Python SDK azureml v1

Este artigo mostra como criar o perfil de um aprendizado de máquina para modelar 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 SDK v1. Essa técnica de criação de perfil não está disponível para a v2 da CLI ou SDK.

Importante

Alguns dos comandos da CLI do Azure neste artigo usam a extensão , ou v1, para o azure-cli-mlAzure Machine Learning. O suporte para a 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 mlextensão , ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, consulte Extensão CLI do Azure ML e Python SDK v2.

Pré-requisitos

Este artigo pressupõe que você tenha treinado e registrado um modelo com o Azure Machine Learning. Veja o tutorial de exemplo aqui para obter um exemplo de treinamento e registro de um modelo de aprendizagem scikit 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 seu espaço de trabalho estiver atrá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 de que o serviço implantado precisará. A criação de perfil testa o serviço que executa seu modelo e retorna informações como o uso da CPU, o uso da memória e a latência de resposta. Ele também fornece uma recomendação para a CPU e memória com base no uso de recursos.

Para traçar o perfil do seu modelo, você vai precisar de:

  • Um modelo registado.
  • Uma configuração de inferência baseada no script de entrada e definição de ambiente de inferência.
  • Um conjunto de dados tabular de coluna única, na qual cada linha contém uma cadeia de carateres que representa dados de pedido de amostra.

Importante

Neste ponto, oferecemos suporte apenas à criação de perfil de serviços que esperam que seus dados de solicitação sejam uma cadeia de caracteres, por exemplo: string serialized json, text, string serialized image, etc. O conteúdo de cada linha do conjunto de dados (string) será colocado no corpo da solicitação HTTP e enviado para o serviço que encapsula o modelo para pontuação.

Importante

Suportamos apenas a criação de perfis de até 2 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 seus dados de solicitação de entrada contenham json serializado. Nesse caso, criamos um conjunto de dados baseado em 100 instâncias do mesmo conteúdo de dados 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 do modelo depender da entrada.

APLICA-SE A: 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)

Depois de ter o conjunto de dados contendo dados de solicitação de exemplo pronto, crie uma configuração de inferência. A configuração de inferência é baseada na definição de score.py e 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: Azure CLI ml extension v1

O comando a seguir demonstra como criar o 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>

Gorjeta

Para manter as informações retornadas pela criação de perfil, use tags ou propriedades para o modelo. O uso de tags ou propriedades armazena os dados com o modelo no registro do modelo. Os exemplos a seguir demonstram a adição de uma nova tag contendo as requestedCpu informações 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óximos passos