Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
APLICA-SE A:
Azure CLI ml extension v2 (current)
Python SDK azure-ai-ml v2 (current)
Os endpoints de lote permitem implantar modelos que processam inferência em grandes volumes de dados. Esses endpoints simplificam os modelos de hospedagem para pontuação em lote, para que você possa se concentrar no aprendizado de máquina em vez da infraestrutura.
Utilize pontos de extremidade em lote para implantar modelos quando:
- Você usa modelos caros que levam mais tempo para executar a inferência.
- Você executa inferência sobre grandes quantidades de dados distribuídos em vários arquivos.
- Você não precisa de baixa latência.
- Você beneficia-se da paralelização.
Este artigo mostra como usar um endpoint em lote para implantar um modelo de aprendizado de máquina que resolve o problema clássico de reconhecimento de dígitos MNIST (Modified National Institute of Standards and Technology). O modelo implantado executa a inferência em lote sobre grandes quantidades de dados, como arquivos de imagem. O processo começa com a criação de uma implantação em lote de um modelo construído usando Torch. Essa implantação torna-se o padrão no ponto de extremidade. Mais tarde, crie uma segunda implantação de um modelo criado com o TensorFlow (Keras), teste a segunda implantação e defina-a como a implantação padrão do ponto de extremidade.
Pré-requisitos
Antes de seguir as etapas neste artigo, verifique se você tem os seguintes pré-requisitos:
Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente a versão gratuita ou paga do Azure Machine Learning.
Uma área de trabalho do Azure Machine Learning. Se você não tiver um, use as etapas no artigo Como gerenciar espaços de trabalho para criar um.
Para executar as seguintes tarefas, verifique se você tem essas permissões no espaço de trabalho:
Para criar/gerenciar pontos de extremidade e implantações em lote: use a função de proprietário, a função de colaborador ou uma função personalizada que permita
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*.Para criar implantações ARM no grupo de recursos do espaço de trabalho: use a função de proprietário, a função de colaborador ou uma função personalizada que permita
Microsoft.Resources/deployments/writea entrada do grupo de recursos em que o espaço de trabalho está implantado.
Você precisa instalar o seguinte software para trabalhar com o Azure Machine Learning:
APLICA-SE A:
Azure CLI ml extension v2 (atual)A CLI do Azure e a
mlextensão do Azure Machine Learning.az extension add -n ml
Clone o repositório de exemplos
O exemplo neste artigo é baseado em exemplos de código contidos no repositório azureml-examples . Para executar os comandos localmente sem ter que copiar/colar YAML e outros arquivos, primeiro clone o repositório e, em seguida, altere os diretórios para a pasta:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli/endpoints/batch/deploy-models/mnist-classifier
Prepare o seu sistema
Ligar à sua área de trabalho
Primeiro, conecte-se ao espaço de trabalho do Azure Machine Learning onde você trabalha.
Se você ainda não definiu os padrões para a CLI do Azure, salve suas configurações padrão. Para evitar inserir os valores da sua assinatura, espaço de trabalho, grupo de recursos e local várias vezes, execute este código:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Criar computação
Os pontos de extremidade em lote são executados em clusters de computação e dão suporte a clusters de computação do Azure Machine Learning (AmlCompute) e clusters Kubernetes. Os clusters são um recurso compartilhado, portanto, um cluster pode hospedar uma ou várias implantações em lote (junto com outras cargas de trabalho, se desejado).
Crie um cálculo chamado batch-cluster, conforme mostrado no código a seguir. Ajuste conforme necessário e faça referência ao seu sistema usando azureml:<your-compute-name>.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Nota
Você não é cobrado pela capacidade de cálculo neste momento porque o cluster permanece em 0 nós até que um ponto de extremidade em batch seja invocado e um trabalho de pontuação em batch seja enviado. Para obter mais informações sobre custos de computação, consulte Gerenciar e otimizar custos para AmlCompute.
Criar um ponto de extremidade em lote
Um endpoint de lote é um endpoint HTTPS que os clientes usam para iniciar um trabalho de pontuação em lote. Um processo de pontuação em lote pontua várias entradas. Uma implantação em lote é um conjunto de recursos de computação que acomoda o modelo que realiza a pontuação em lote (ou inferência em lote). Um ponto de extremidade de lote pode ter várias implantações em lote. Para obter mais informações sobre pontos de extremidade em lote, consulte O que são pontos de extremidade em lote?.
Gorjeta
Uma das implantações em lote serve como a implantação padrão para o ponto de extremidade. Quando o ponto de extremidade é invocado, a implantação padrão executa a pontuação em lote. Para obter mais informações sobre pontos de extremidade em lote e implantações, consulte pontos de extremidade em lote e implantação em lote.
Nomeie o ponto de extremidade. O nome do ponto de extremidade deve ser exclusivo dentro de uma região do Azure porque o nome está incluído no URI do ponto de extremidade. Por exemplo, pode haver apenas um ponto de extremidade em lote com o nome
mybatchendpointemwestus2.Coloque o nome do ponto de extremidade em uma variável para fazer referência a ele facilmente mais tarde.
ENDPOINT_NAME="mnist-batch"Configurar o ponto de extremidade em lote
O seguinte arquivo YAML define um ponto de extremidade em lote. Use este ficheiro com o comando CLI para a criação de endpoints em lote.
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: mnist-batch description: A batch endpoint for scoring images from the MNIST dataset. tags: type: deep-learningA tabela a seguir descreve as principais propriedades do ponto de extremidade. Para obter o esquema YAML de ponto de extremidade em lote completo, consulte Esquema YAML de ponto de extremidade em lote CLI (v2).
Chave Descrição nameO nome do ponto de extremidade do lote. Precisa ser exclusivo no nível da região do Azure. descriptionA descrição do ponto de extremidade do lote. Esta propriedade é opcional. tagsAs tags a serem incluídas no ponto de extremidade. Esta propriedade é opcional. Crie o ponto de extremidade:
Execute este código para criar um endpoint de processamento em lote.
az ml batch-endpoint create --file endpoint.yml --name $ENDPOINT_NAME
Criar uma implantação em lote
Uma implantação de modelo é um conjunto de recursos necessários para hospedar o modelo que faz a inferência real. Para criar uma implantação de modelo em lote, você precisa dos seguintes itens:
- Um modelo registrado no espaço de trabalho
- O código para pontuar o modelo
- Um ambiente com as dependências do modelo instaladas
- As configurações de computação e recursos precriadas
Comece registrando o modelo a ser implantado — um modelo Torch para o popular problema de reconhecimento de dígitos (MNIST). As implantações em lote só podem implantar modelos registrados no espaço de trabalho. Você pode pular esta etapa se o modelo que deseja implantar já estiver registrado.
Gorjeta
Os modelos são associados à implantação, em vez de ao ponto de extremidade. Isso significa que um único ponto de extremidade pode servir diferentes modelos (ou versões de modelo) sob o mesmo ponto de extremidade, desde que os diferentes modelos (ou versões de modelo) sejam implantados em implantações diferentes.
MODEL_NAME='mnist-classifier-torch' az ml model create --name $MODEL_NAME --type "custom_model" --path "deployment-torch/model"Agora é hora de criar um script de pontuação. As implantações em lote exigem um script de pontuação que indica como um determinado modelo deve ser executado e como os dados de entrada devem ser processados. Os endpoints em lote suportam scripts criados em Python. Nesse caso, você implanta um modelo que lê arquivos de imagem que representam dígitos e gera o dígito correspondente. O guião de pontuação é o seguinte:
Nota
Para modelos MLflow, o Azure Machine Learning gera automaticamente o script de pontuação, portanto, você não precisa fornecer um. Se o seu modelo for um modelo MLflow, você poderá ignorar esta etapa. Para obter mais informações sobre como os pontos de extremidade em lote funcionam com modelos MLflow, consulte o artigo Usando modelos MLflow em implantações em lote.
Aviso
Se você estiver implantando um modelo de aprendizado de máquina automatizado (AutoML) em um ponto de extremidade em lote, observe que o script de pontuação que o AutoML fornece funciona apenas para pontos de extremidade online e não foi projetado para execução em lote. Para obter informações sobre como criar um script de pontuação para sua implantação em lote, consulte Criar scripts de pontuação para implantações em lote.
implantação-tocha/código/batch_driver.py
import os import pandas as pd import torch import torchvision import glob from os.path import basename from mnist_classifier import MnistClassifier from typing import List def init(): global model global device # AZUREML_MODEL_DIR is an environment variable created during deployment # It is the path to the model folder model_path = os.environ["AZUREML_MODEL_DIR"] model_file = glob.glob(f"{model_path}/*/*.pt")[-1] model = MnistClassifier() model.load_state_dict(torch.load(model_file)) model.eval() device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] with torch.no_grad(): for image_path in mini_batch: image_data = torchvision.io.read_image(image_path).float() batch_data = image_data.expand(1, -1, -1, -1) input = batch_data.to(device) # perform inference predict_logits = model(input) # Compute probabilities, classes and labels predictions = torch.nn.Softmax(dim=-1)(predict_logits) predicted_prob, predicted_class = torch.max(predictions, axis=-1) results.append( { "file": basename(image_path), "class": predicted_class.numpy()[0], "probability": predicted_prob.numpy()[0], } ) return pd.DataFrame(results)Crie um ambiente onde a implantação em lote seja executada. O ambiente deve incluir os pacotes
azureml-coreeazureml-dataset-runtime[fuse], que são exigidos por pontos de extremidade em lote, além de qualquer dependência que seu código exija para ser executado. Nesse caso, as dependências foram capturadas em umconda.yamlarquivo:implantação-tocha/ambiente/conda.yaml
name: mnist-env channels: - conda-forge dependencies: - python=3.8.5 - pip<22.0 - pip: - torch==1.13.0 - torchvision==0.14.0 - pytorch-lightning - pandas - azureml-core - azureml-dataset-runtime[fuse]Importante
Os pacotes
azureml-coreeazureml-dataset-runtime[fuse]são exigidos por implantações em lote e devem ser incluídos nas dependências do ambiente.Especifique o ambiente da seguinte forma:
A definição de ambiente é incluída na própria definição de implantação como um ambiente anônimo. Você vê nas seguintes linhas na implantação:
environment: name: batch-torch-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest conda_file: environment/conda.yamlVá para a guia Ambientes no menu lateral.
Selecione Criar ambientes>personalizados.
Digite o nome do ambiente, neste caso
torch-batch-env.Em Select environment source, selecione Use existing docker image with optional conda file.
Em Caminho da imagem do Registro de contêiner, digite
mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04.Selecione Avançar para ir para a seção "Personalizar".
Copie o conteúdo do arquivo deployment-torch/environment/conda.yaml do repositório GitHub para o portal.
Selecione Avançar até chegar à "Página de revisão".
Selecione Criar e aguarde até que o ambiente esteja pronto.
Aviso
Não há suporte para ambientes com curadoria em implantações em lote. Você precisa especificar seu próprio ambiente. Você sempre pode usar a imagem base de um ambiente com curadoria como sua para simplificar o processo.
Criar uma definição de implantação
implantação-tocha/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-torch-dpl description: A deployment using Torch to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-torch path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-torch-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csv retry_settings: max_retries: 3 timeout: 30 error_threshold: -1 logging_level: infoA tabela a seguir descreve as principais propriedades da implantação em lote. Para obter o esquema YAML de implantação em lote completo, consulte Esquema YAML de implantação em lote CLI (v2).
Chave Descrição nameO nome da implantação. endpoint_nameO nome do ponto de extremidade sob o qual criar a implantação. modelO modelo a ser usado para a pontuação de lote. O exemplo define um modelo embutido usando path. Esta definição permite que os ficheiros de modelo sejam automaticamente carregados e registados com um nome e uma versão gerados automaticamente. Consulte o esquema Modelo para obter mais opções. Como prática recomendada para cenários de produção, você deve criar o modelo separadamente e consultá-lo aqui. Para fazer referência a um modelo existente, use aazureml:<model-name>:<model-version>sintaxe.code_configuration.codeO diretório local que contém todo o código-fonte Python para pontuar o modelo. code_configuration.scoring_scriptO arquivo Python no code_configuration.codediretório. Este arquivo deve ter umainit()função e umarun()função. Use a função para qualquer preparação carainit()ou comum (por exemplo, para carregar o modelo na memória).init()é chamado apenas uma vez no início do processo. Userun(mini_batch)para pontuar cada entrada, o valor de é uma lista de caminhos demini_batcharquivo. Arun()função deve retornar um pandas DataFrame ou uma matriz. Cada elemento retornado indica uma execução bem-sucedida do elemento input nomini_batch. Para obter mais informações sobre como criar um script de pontuação, consulte Noções básicas sobre o script de pontuação.environmentO ambiente para pontuar o modelo. O exemplo define um ambiente embutido usando conda_fileeimage. Asconda_filedependências são instaladas sobre oimage. O ambiente é automaticamente registrado com um nome e uma versão gerados automaticamente. Consulte o Esquema de ambiente para obter mais opções. Como prática recomendada para cenários de produção, você deve criar o ambiente separadamente e consultá-lo aqui. Para fazer referência a um ambiente existente, use aazureml:<environment-name>:<environment-version>sintaxe.computeO cálculo para executar a pontuação em lote. O exemplo usa o batch-clustercriado no início e faz referência a ele usando aazureml:<compute-name>sintaxe.resources.instance_countO número de instâncias a serem usadas para cada trabalho de pontuação em lote. settings.max_concurrency_per_instanceO número máximo de execuções paralelas scoring_scriptpor instância.settings.mini_batch_sizeO número de arquivos que o scoring_scriptpode processar em umarun()chamada.settings.output_actionComo a saída deve ser organizada no arquivo de saída. append_rowMescla todos osrun()resultados de saída retornados em um único arquivo chamadooutput_file_name.summary_onlynão mesclará os resultados de saída e calculará apenaserror_threshold.settings.output_file_nameO nome do arquivo de saída de pontuação em lote para append_rowoutput_action.settings.retry_settings.max_retriesO número máximo de tentativas para um . scoring_scriptrun()settings.retry_settings.timeoutO tempo limite em segundos para marcar scoring_scriptrun()um mini lote.settings.error_thresholdO número de falhas de pontuação do arquivo de entrada que devem ser ignoradas. Se a contagem de erros para toda a entrada ultrapassar esse valor, o trabalho de pontuação em lote será encerrado. O exemplo usa -1, que indica que qualquer número de falhas é permitido sem encerrar o trabalho de pontuação em lote.settings.logging_levelRegistre a verborragia. Os valores em verbosidade crescente são: WARNING, INFO e DEBUG. settings.environment_variablesDicionário de pares nome-valor de variável de ambiente a serem definidos para cada trabalho de pontuação em lote. Aceda à aba Endpoints no menu lateral.
Selecione a guia Pontos de extremidade>em lote Criar.
Dê um nome ao ponto final, neste caso
mnist-batch. Você pode configurar o restante dos campos ou deixá-los em branco.Selecione Avançar para ir para a seção "Modelo".
Selecione o modelo mnist-classifier-torch.
Selecione Avançar para ir para a página "Implantação".
Dê um nome à implantação.
Para a ação Output, certifique-se de que Acrescentar linha está selecionada.
Para Nome do arquivo de saída, verifique se o arquivo de saída de pontuação em lote é o que você precisa. A predefinição é
predictions.csv.Para o tamanho do mini lote, ajuste o tamanho dos arquivos que serão incluídos em cada minilote. Esse tamanho controla a quantidade de dados que seu script de pontuação recebe por lote.
Para Tempo limite de pontuação (segundos), certifique-se de dar tempo suficiente para que sua implantação marque um determinado lote de arquivos. Se você aumentar o número de arquivos, geralmente terá que aumentar o valor de tempo limite também. Modelos mais caros (como os baseados em deep learning) podem exigir valores elevados neste campo.
Para simultaneidade máxima por instância, configure o número de executores que você deseja ter para cada instância de computação obtida na implantação. Um número maior aqui garante um maior grau de paralelização, mas também aumenta a pressão de memória na instância de computação. Ajuste esse valor completamente com o tamanho do lote Mini.
Uma vez feito, selecione Avançar para ir para a página "Código + ambiente".
Para "Select a scoring script for inferencing", navegue para localizar e selecionar o arquivo de script de pontuação deployment-torch/code/batch_driver.py.
Na seção "Selecionar ambiente", selecione o ambiente que você criou anteriormente torch-batch-env.
Selecione Avançar para ir para a página "Computação".
Selecione o cluster de computação criado em uma etapa anterior.
Aviso
Os clusters Kubernetes do Azure têm suporte em implantações em lote, mas somente quando criados usando a CLI do Azure Machine Learning ou o SDK do Python.
Em Contagem de instâncias, insira o número de instâncias de computação que você deseja para a implantação. Neste caso, use 2.
Selecione Seguinte.
Crie a implantação:
Execute o código a seguir para criar uma implantação em lote sob o ponto de extremidade em lote e defina-a como a implantação padrão.
az ml batch-deployment create --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-defaultGorjeta
O
--set-defaultparâmetro define a implantação recém-criada como a implantação padrão do ponto de extremidade. É uma maneira conveniente de criar uma nova implantação padrão do ponto de extremidade, especialmente para a primeira criação de implantação. Como prática recomendada para cenários de produção, convém criar uma nova implantação sem defini-la como padrão. Verifique se a implantação funciona como esperado e, em seguida, atualize a implantação padrão mais tarde. Para obter mais informações sobre como implementar esse processo, consulte a seção Implantar um novo modelo .Verifique os detalhes do ponto de extremidade e da implantação do lote.
Use
showpara verificar o ponto de extremidade e os detalhes da implantação. Para verificar uma implantação em lote, execute o seguinte código:DEPLOYMENT_NAME="mnist-torch-dpl" az ml batch-deployment show --name $DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAMESelecione o separador Pontos de extremidade em lote.
Selecione o ponto de extremidade em lote que você deseja visualizar.
A página Detalhes do ponto de extremidade mostra os detalhes do ponto de extremidade, juntamente com todas as implantações disponíveis no ponto de extremidade.
Executar pontos de extremidade em lote e acessar resultados
Compreender o fluxo de dados
Antes de executar o seu endpoint de lote, compreenda como os dados circulam no sistema.
Entradas: Dados a processar (pontuação). Isto inclui:
- Arquivos armazenados no Armazenamento do Azure (armazenamento de blob, data lake)
- Pastas com vários arquivos
- Conjuntos de dados registrados no Azure Machine Learning
Processamento: O modelo implantado processa os dados de entrada em lotes (minilotes) e gera previsões.
Saídas: resultados do modelo, armazenados como arquivos no Armazenamento do Azure. Por padrão, as saídas são salvas no armazenamento de blob padrão do espaço de trabalho, mas você pode especificar um local diferente.
Invocar um ponto de extremidade em lote
Invocar um ponto de extremidade em lote aciona um trabalho de pontuação em lote. O trabalho name é retornado na resposta de invocação e acompanha o progresso do processamento em lote. Especifique o caminho do ficheiro de dados de entrada para que os endpoints possam localizar os dados a serem avaliados. O exemplo a seguir mostra como iniciar um novo trabalho sobre um exemplo de dados do conjunto de dados MNIST armazenado em uma Conta de Armazenamento do Azure.
Você pode executar e invocar um ponto de extremidade em lote usando a CLI do Azure, o SDK do Azure Machine Learning ou pontos de extremidade REST. Para obter mais informações sobre essas opções, consulte Criar trabalhos e dados de entrada para pontos de extremidade em lote.
Nota
Como funciona a paralelização?
As implantações em lote distribuem o trabalho no nível do arquivo. Por exemplo, uma pasta com 100 arquivos e minilotes de 10 arquivos gera 10 lotes de 10 arquivos cada. Isso acontece independentemente do tamanho do arquivo. Se os arquivos forem muito grandes para processamento em minilotes, divida-os em arquivos menores para aumentar o paralelismo ou reduzir o número de arquivos por minilote. Atualmente, as implantações em lote não levam em conta distorções na distribuição do tamanho do arquivo.
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --input-type uri_folder --query name -o tsv)
Os pontos de extremidade em lote suportam a leitura de arquivos ou pastas localizados em locais diferentes. Para saber mais sobre os tipos suportados e como especificá-los, consulte Acessando dados de trabalhos de pontos de extremidade em lote.
Monitorar o progresso da execução do trabalho em lote
Os trabalhos de pontuação em lote levam tempo para processar todas as entradas.
O código a seguir verifica o status do trabalho e gera um link para o estúdio do Azure Machine Learning para obter mais detalhes.
az ml job show -n $JOB_NAME --web
Verifique os resultados da pontuação do lote
As saídas de trabalho são armazenadas no armazenamento em nuvem, seja no armazenamento de blob padrão do espaço de trabalho ou no armazenamento especificado. Para saber como alterar os padrões, consulte Configurar o local de saída. As etapas a seguir permitem que você exiba os resultados da pontuação no Gerenciador de Armazenamento do Azure quando o trabalho for concluído:
Execute o código a seguir para abrir o trabalho de pontuação em lote no estúdio do Azure Machine Learning. O link do estúdio de trabalho também está incluído na resposta de
invoke, como o valor deinteractionEndpoints.Studio.endpoint.az ml job show -n $JOB_NAME --webNo gráfico do trabalho, selecione a
batchscoringetapa.Selecione a guia Saídas + logs e, em seguida, selecione Mostrar saídas de dados.
Em Saídas de dados, selecione o ícone para abrir o Gerenciador de Armazenamento.
Os resultados da pontuação no Storage Explorer são semelhantes à seguinte página de exemplo:
Configurar o local de saída
Por padrão, os resultados da pontuação em lote são armazenados no armazém blob padrão do espaço de trabalho em uma pasta nomeada pelo nome do trabalho (um GUID gerado pelo sistema). Configurar o local de saída ao invocar o endpoint do lote.
Use output-path para configurar qualquer pasta em um armazenamento de dados registrado do Azure Machine Learning. A sintaxe do é a --output-path mesma de --input quando você está especificando uma pasta, ou seja, azureml://datastores/<datastore-name>/paths/<path-on-datastore>/. Use --set output_file_name=<your-file-name> para configurar um novo nome de arquivo de saída.
OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
OUTPUT_PATH="azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --output-path $OUTPUT_PATH --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)
Aviso
Você deve usar um local de saída exclusivo. Se o arquivo de saída existir, o trabalho de pontuação em lote falhará.
Importante
Ao contrário das entradas, as saídas só podem ser armazenadas em armazenamentos de dados do Azure Machine Learning que são executados em contas de armazenamento de blob.
Substituir a configuração de implantação para cada tarefa
Ao invocar um endpoint em lote, pode alterar algumas definições para maximizar o uso eficaz dos recursos de computação e melhorar o desempenho. Esse recurso é útil quando você precisa de configurações diferentes para trabalhos diferentes sem modificar permanentemente a implantação.
Quais configurações podem ser substituídas?
Você pode definir as seguintes configurações por trabalho:
| Configurações | Quando utilizar | Cenário de exemplo |
|---|---|---|
| Contagem de instâncias | Quando você tem volumes de dados variáveis | Use mais instâncias para conjuntos de dados maiores (10 instâncias para 1 milhão de arquivos contra 2 instâncias para 100.000 arquivos). |
| Tamanho do minilote | Quando você precisa equilibrar a taxa de transferência e o uso de memória | Use lotes menores (10 a 50 arquivos) para imagens grandes e lotes maiores (100 a 500 arquivos) para arquivos de texto pequenos. |
| Max tenta novamente | Quando a qualidade dos dados varia | Maiores tentativas (5-10) para dados barulhentos; Tentativas mais baixas (1-3) para dados limpos |
| Tempo limite | Quando o tempo de processamento varia de acordo com o tipo de dados | Maior tempo limite (300s) para modelos complexos; Tempo limite mais curto (30s) para modelos simples |
| Limite de erro | Quando você precisa de diferentes níveis de tolerância a falhas | Limiar rigoroso (-1) para os trabalhos críticos; limiar de redução (10%) para trabalhos experimentais |
Como substituir configurações
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --mini-batch-size 20 --instance-count 5 --query name -o tsv)
Adicionar implantações a um ponto de extremidade
Depois de ter um ponto de extremidade em lote com uma implantação, você pode continuar a refinar seu modelo e adicionar novas implantações. Os pontos de extremidade em lote continuarão atendendo à implantação padrão enquanto você desenvolve e implanta novos modelos sob o mesmo ponto de extremidade. As implantações não afetam umas às outras.
Neste exemplo, você adiciona uma segunda implantação que usa um modelo criado com Keras e TensorFlow para resolver o mesmo problema MNIST.
Adicionar uma segunda implantação
Crie um ambiente para sua implantação em lote. Inclua todas as dependências que seu código precisa executar. Adicione a biblioteca
azureml-core, pois ela é necessária para implantações em lote. A definição de ambiente a seguir inclui as bibliotecas necessárias para executar um modelo com o TensorFlow.A definição de ambiente é incluída na própria definição de implantação como um ambiente anônimo.
environment: name: batch-tensorflow-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest conda_file: environment/conda.yamlCopie o conteúdo do arquivo deployment-keras/environment/conda.yaml do repositório GitHub para o portal.
Selecione Avançar até chegar à "Página de revisão".
Selecione Criar e aguarde até que o ambiente esteja pronto para uso.
O arquivo conda usado tem a seguinte aparência:
deployment-keras/ambiente/conda.yaml
name: tensorflow-env channels: - conda-forge dependencies: - python=3.8.5 - pip - pip: - pandas - tensorflow - pillow - azureml-core - azureml-dataset-runtime[fuse]Crie um script de pontuação para o modelo:
deployment-keras/código/batch_driver.py
import os import numpy as np import pandas as pd import tensorflow as tf from typing import List from os.path import basename from PIL import Image from tensorflow.keras.models import load_model def init(): global model # AZUREML_MODEL_DIR is an environment variable created during deployment model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model") # load the model model = load_model(model_path) def run(mini_batch: List[str]) -> pd.DataFrame: print(f"Executing run method over batch of {len(mini_batch)} files.") results = [] for image_path in mini_batch: data = Image.open(image_path) data = np.array(data) data_batch = tf.expand_dims(data, axis=0) # perform inference pred = model.predict(data_batch) # Compute probabilities, classes and labels pred_prob = tf.math.reduce_max(tf.math.softmax(pred, axis=-1)).numpy() pred_class = tf.math.argmax(pred, axis=-1).numpy() results.append( { "file": basename(image_path), "class": pred_class[0], "probability": pred_prob, } ) return pd.DataFrame(results)Criar uma definição de implantação
deployment-keras/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json name: mnist-keras-dpl description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset. endpoint_name: mnist-batch type: model model: name: mnist-classifier-keras path: model code_configuration: code: code scoring_script: batch_driver.py environment: name: batch-tensorflow-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest conda_file: environment/conda.yaml compute: azureml:batch-cluster resources: instance_count: 1 settings: max_concurrency_per_instance: 2 mini_batch_size: 10 output_action: append_row output_file_name: predictions.csvSelecione Avançar para prosseguir para a página "Código + ambiente".
Para Select a scoring script for inferencing, navegue para selecionar o arquivo de script de pontuação deployment-keras/code/batch_driver.py.
Em Selecionar ambiente, selecione o ambiente criado em uma etapa anterior.
Selecione Seguinte.
Na página Computação, selecione o cluster de computação criado em uma etapa anterior.
Em Contagem de instâncias, insira o número de instâncias de computação que você deseja para a implantação. Neste caso, use 2.
Selecione Seguinte.
Crie a implantação:
Execute o código a seguir para criar uma implantação em lote no ponto de extremidade em lote e defini-la como a implantação padrão.
az ml batch-deployment create --file deployment-keras/deployment.yml --endpoint-name $ENDPOINT_NAMEGorjeta
O
--set-defaultparâmetro está ausente neste caso. Como prática recomendada para cenários de produção, crie uma nova implantação sem defini-la como padrão. Em seguida, verifique-o e atualize a implantação padrão mais tarde.
Testar uma implantação em lote não padrão
Para testar a nova implantação não padrão, você precisa saber o nome da implantação que deseja executar.
DEPLOYMENT_NAME="mnist-keras-dpl"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name $DEPLOYMENT_NAME --input $SAMPLE_INPUT_URI --input-type uri_folder --query name -o tsv)
O aviso --deployment-name é usado para especificar a implantação a ser executada. Esse parâmetro permite que você faça invoke uma implantação não padrão sem atualizar a implantação padrão do ponto de extremidade em lote.
Atualizar a implantação em lote padrão
Embora você possa invocar uma implantação específica dentro de um ponto de extremidade, normalmente desejará invocar o próprio ponto de extremidade e permitir que o ponto de extremidade decida qual implantação usar — a implantação padrão. Você pode alterar a implantação padrão (e, consequentemente, alterar o modelo que serve a implantação) sem alterar seu contrato com o usuário que invoca o ponto de extremidade. Use o código a seguir para atualizar a implantação padrão:
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
Excluir o ponto de extremidade e a implantação em lote
Se você não precisar da implantação em lote antiga, exclua-a executando o código a seguir. O --yes sinalizador confirma a exclusão.
az ml batch-deployment delete --name mnist-torch-dpl --endpoint-name $ENDPOINT_NAME --yes
Execute o seguinte código para eliminar o batch endpoint e as suas implementações subjacentes. Os trabalhos de pontuação em lote não são eliminados.
az ml batch-endpoint delete --name $ENDPOINT_NAME --yes