Implantar e pontuar um modelo de aprendizado de máquina usando um ponto de extremidade online

APLICA-SE A:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Neste artigo, você aprenderá a implantar seu modelo em um ponto de extremidade online para uso em inferência em tempo real. Você começará implantando um modelo em sua máquina local para depurar quaisquer erros. Em seguida, você implantará e testará o modelo no Azure. Você também aprenderá a exibir os logs de implantação e monitorar o contrato de nível de serviço (SLA). No final deste artigo, você terá um ponto de extremidade HTTPS/REST escalável que poderá ser usado para inferência em tempo real.

Pontos de extremidade online são pontos de extremidade que são usados para inferência em tempo real. Existem dois tipos de pontos finais online: pontos finais online geridos e pontos finais online do Kubernetes. Para obter mais informações sobre pontos de extremidade e diferenças entre pontos de extremidade online gerenciados e pontos de extremidade online do Kubernetes, consulte O que são pontos de extremidade do Azure Machine Learning?.

Os pontos finais online geridos ajudam a implementar os modelos de ML de forma chave na mão. Os pontos finais online geridos funcionam com computadores GPU e CPU avançados no Azure de forma dimensionável e totalmente gerida. Os pontos finais online geridos tratam de servir, dimensionar, proteger e monitorizar os modelos, ao libertá-lo da sobrecarga de configuração e gestão da infraestrutura subjacente.

O exemplo principal neste documento usa pontos de extremidade online gerenciados para implantação. Para usar o Kubernetes em vez disso, consulte as notas neste documento que estão alinhadas com a discussão do endpoint online gerenciado.

Pré-requisitos

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

Antes de seguir as etapas neste artigo, verifique se você tem os seguintes pré-requisitos:

  • Os controlos de acesso baseado em funções (RBAC do Azure) são utilizados para conceder acesso às operações no Azure Machine Learning. Para executar as etapas neste artigo, sua conta de usuário deve receber a função de proprietário ou colaborador para o espaço de trabalho do Azure Machine Learning ou uma função personalizada que permita Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Se você usar o studio para criar/gerenciar pontos de extremidade/implantações online, precisará de uma permissão adicional "Microsoft.Resources/deployments/write" do proprietário do grupo de recursos. Para obter mais informações, consulte Gerenciar o acesso a um espaço de trabalho do Azure Machine Learning.

  • (Opcional) Para implantar localmente, você deve instalar o Docker Engine em seu computador local. É altamente recomendável essa opção, para que seja mais fácil depurar problemas.

Alocação de cota de máquina virtual para implantação

Para pontos de extremidade online gerenciados, o Aprendizado de Máquina do Azure reserva 20% de seus recursos de computação para executar atualizações em algumas SKUs de VM. Se você solicitar um determinado número de instâncias para essas SKUs de VM em uma implantação, deverá ter uma cota disponível para ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU evitar obter um erro. Por exemplo, se você solicitar 10 instâncias de uma VM Standard_DS3_v2 (que vem com 4 núcleos) em uma implantação, deverá ter uma cota para 48 núcleos (12 instances * 4 cores) disponível. Essa cota extra é reservada para operações iniciadas pelo sistema, como atualização do sistema operacional, recuperação de VM, etc., e não incorrerá em custo, a menos que essa operação seja executada. Para ver o seu uso e solicitar aumentos de cota, consulte Exibir seu uso e cotas no portal do Azure. Para ver o custo de execução de terminais online geridos, consulte Ver custo de terminais online geridos. Existem certas VM SKUs que estão isentas de reserva de cota extra. Para exibir a lista completa, consulte Lista de SKU de pontos de extremidade online gerenciados.

O Azure Machine Learning fornece um pool de cotas compartilhadas a partir do qual todos os usuários podem acessar a cota para executar testes por um tempo limitado. Quando você usa o estúdio para implantar modelos Llama-2, Phi, Nemotron, Mistral, Dolly e Deci-DeciLM do catálogo de modelos para um ponto de extremidade online gerenciado, o Aprendizado de Máquina do Azure permite que você acesse essa cota compartilhada por um curto período de tempo.

Para obter mais informações sobre como usar a cota compartilhada para implantação de ponto de extremidade online, consulte Como implantar modelos básicos usando o estúdio.

Prepare o seu sistema

Definir variáveis de ambiente

Se você ainda não definiu os padrões para a CLI do Azure, salve suas configurações padrão. Para evitar passar os valores da sua assinatura, espaço de trabalho e grupo de recursos várias vezes, execute este código:

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

Clone o repositório de exemplos

Para acompanhar este artigo, primeiro clone o repositório de exemplos (azureml-examples). Em seguida, execute o seguinte código para ir para o diretório do cli/ repositório:

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli

Gorjeta

Use --depth 1 para clonar apenas a confirmação mais recente para o repositório, o que reduz o tempo para concluir a operação.

Os comandos neste tutorial estão nos arquivos deploy-local-endpoint.sh e deploy-managed-online-endpoint.sh no diretório, e os cli arquivos de configuração YAML estão no endpoints/online/managed/sample/ subdiretório.

Nota

Os arquivos de configuração YAML para pontos de extremidade online do Kubernetes estão no endpoints/online/kubernetes/ subdiretório.

Definir o ponto de extremidade

Para definir um ponto de extremidade, você precisa especificar:

  • Nome do ponto de extremidade: O nome do ponto de extremidade. Ele deve ser exclusivo na região do Azure. Para obter mais informações sobre as regras de nomenclatura, consulte Limites de pontos finais.
  • Modo de autenticação: O método de autenticação para o ponto de extremidade. Escolha entre a autenticação baseada em chave e a autenticação baseada em token do Azure Machine Learning. Uma chave não expira, mas um token expira. Para obter mais informações sobre autenticação, consulte Autenticar em um ponto de extremidade online.
  • Opcionalmente, você pode adicionar uma descrição e tags ao seu ponto de extremidade.

Definir um nome de ponto de extremidade

Para definir o nome do ponto de extremidade, execute o seguinte comando (substitua YOUR_ENDPOINT_NAME por um nome exclusivo).

Para Linux, execute este comando:

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

Configurar o ponto de extremidade

O trecho a seguir mostra o arquivo endpoints /online/managed/sample/endpoint.yml :

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key

A referência para o formato YAML do ponto de extremidade é descrita na tabela a seguir. Para saber como especificar esses atributos, consulte a referência YAML do ponto de extremidade online. Para obter informações sobre limites relacionados a pontos de extremidade gerenciados, consulte limites para pontos de extremidade online.

Chave Description
$schema (Opcional) O esquema YAML. Para ver todas as opções disponíveis no arquivo YAML, você pode exibir o esquema no trecho de código anterior em um navegador.
name O nome do ponto de extremidade.
auth_mode Use key para autenticação baseada em chave. Use aml_token para autenticação baseada em token do Azure Machine Learning. Para obter o token mais recente, use o az ml online-endpoint get-credentials comando.

Definir a implantação

Uma implantação é um conjunto de recursos necessários para hospedar o modelo que faz a inferência real. Para implantar um modelo, você deve ter:

  • Arquivos de modelo (ou o nome e a versão de um modelo que já está registrado em seu espaço de trabalho). No exemplo, temos um modelo scikit-learn que faz regressão.
  • Um script de pontuação, ou seja, código que executa o modelo em uma determinada solicitação de entrada. O script de pontuação recebe dados enviados a um serviço Web implantado e os passa para o modelo. Em seguida, o script executa o modelo e retorna sua resposta ao cliente. O script de pontuação é específico para o seu modelo e deve entender os dados que o modelo espera como entrada e retorna como saída. Neste exemplo, temos um arquivo score.py .
  • Um ambiente no qual seu modelo é executado. O ambiente pode ser uma imagem do Docker com dependências do Conda ou um Dockerfile.
  • Configurações para especificar o tipo de instância e a capacidade de dimensionamento.

A tabela a seguir descreve os principais atributos de uma implantação:

Atributo Description
Name O nome da implantação.
Nome do ponto final O nome do ponto de extremidade sob o qual criar a implantação.
Modelo O modelo a ser usado para a implantação. Esse valor pode ser uma referência a um modelo versionado existente no espaço de trabalho ou uma especificação de modelo embutido.
Caminho do código O caminho para o diretório no ambiente de desenvolvimento local que contém todo o código-fonte Python para pontuar o modelo. Você pode usar diretórios e pacotes aninhados.
Roteiro de pontuação O caminho relativo para o arquivo de pontuação no diretório do código-fonte. Este código Python deve ter uma init() função e uma run() função. A init() função será chamada depois que o modelo for criado ou atualizado (você pode usá-la para armazenar o modelo em cache na memória, por exemplo). A run() função é chamada a cada invocação do ponto final para fazer a pontuação e previsão reais.
Environment O ambiente para hospedar o modelo e o código. Esse valor pode ser uma referência a um ambiente versionado existente no espaço de trabalho ou uma especificação de ambiente embutido.
Tipo de instância O tamanho da VM a ser usado para a implantação. Para obter a lista de tamanhos suportados, consulte Lista de SKU de pontos de extremidade online gerenciados.
Contagem de instâncias O número de instâncias a serem usadas para a implantação. Baseie o valor na carga de trabalho esperada. Para alta disponibilidade, recomendamos que você defina o valor como pelo menos 3. Reservamos um extra de 20% para a realização de upgrades. Para obter mais informações, consulte Alocação de cota de máquina virtual para implantações.

Aviso

  • O modelo e a imagem do contêiner (conforme definido em Ambiente) podem ser referenciados novamente a qualquer momento pela implantação quando as instâncias por trás da implantação passam por patches de segurança e/ou outras operações de recuperação. Se você usou um modelo registrado ou uma imagem de contêiner no Registro de Contêiner do Azure para implantação e removeu o modelo ou a imagem de contêiner, as implantações que dependem desses ativos podem falhar quando a recriação de imagens acontecer. Se você removeu o modelo ou a imagem de contêiner, certifique-se de que as implantações dependentes sejam recriadas ou atualizadas com modelo alternativo ou imagem de contêiner.
  • O registro de contêiner ao qual o ambiente se refere pode ser privado somente se a identidade do ponto de extremidade tiver a permissão para acessá-lo por meio da autenticação do Microsoft Entra e do RBAC do Azure. Pelo mesmo motivo, não há suporte para registros privados do Docker diferentes do Registro de Contêiner do Azure.

Configurar uma implantação

O trecho a seguir mostra o arquivo endpoints/online/managed/sample/blue-deployment.yml , com todas as entradas necessárias para configurar uma implantação:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
  path: ../../model-1/model/
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score.py
environment: 
  conda_file: ../../model-1/environment/conda.yaml
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1

Nota

No arquivo blue-deployment.yml, especificamos os seguintes atributos de implantação:

  • model - Neste exemplo, especificamos as propriedades do modelo em linha usando o path. Os ficheiros de modelo são automaticamente carregados e registados com um nome gerado automaticamente.
  • environment - Neste exemplo, temos definições embutidas que incluem o path. Usaremos environment.docker.image para a imagem. As conda_file dependências serão instaladas na parte superior da imagem.

Durante a implantação, os arquivos locais, como a fonte Python para o modelo de pontuação, são carregados do ambiente de desenvolvimento.

Para obter mais informações sobre o esquema YAML, consulte a referência YAML do ponto de extremidade online.

Nota

Para usar o Kubernetes em vez de pontos de extremidade gerenciados como um destino de computação:

  1. Crie e anexe seu cluster Kubernetes como um destino de computação ao seu espaço de trabalho do Azure Machine Learning usando o estúdio do Azure Machine Learning.
  2. Use o endpoint YAML para direcionar o Kubernetes em vez do endpoint gerenciado YAML. Você precisará editar o YAML para alterar o valor de target para o nome do seu destino de computação registrado. Você pode usar este deployment.yaml que tem propriedades adicionais aplicáveis à implantação do Kubernetes.

Todos os comandos usados neste artigo (exceto o monitoramento de SLA opcional e a integração do Azure Log Analytics) podem ser usados com pontos de extremidade gerenciados ou com pontos de extremidade do Kubernetes.

Registar o modelo e o ambiente separadamente

Neste exemplo, especificamos o path (de onde carregar arquivos) embutido. A CLI carrega automaticamente os arquivos e registra o modelo e o ambiente. Como prática recomendada para produção, você deve registrar o modelo e o ambiente e especificar o nome registrado e a versão separadamente no YAML. Use o formulário model: azureml:my-model:1 ou environment: azureml:my-env:1.

Para o registro, você pode extrair as definições de YAML de model e environment em arquivos YAML separados e usar os comandos az ml model create e az ml environment create. Para saber mais sobre esses comandos, execute az ml model create -h e az ml environment create -h.

Para obter mais informações sobre como registrar seu modelo como um ativo, consulte Registrar seu modelo como um ativo no Machine Learning usando a CLI. Para obter mais informações sobre como criar um ambiente, consulte Manage Azure Machine Learning environments with the CLI & SDK (v2).

Usar diferentes tipos de instância de CPU e GPU e imagens

A definição anterior no arquivo blue-deployment.yml usa uma instância de tipo Standard_DS3_v2 de uso geral e uma imagem mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestdo Docker que não seja GPU. Para computação GPU, escolha um tipo de computação GPU SKU e uma imagem GPU Docker.

Para tipos de instância de uso geral e GPU suportados, consulte Pontos de extremidade online gerenciados suportados SKUs de VM. Para obter uma lista de imagens base de CPU e GPU do Azure Machine Learning, consulte Imagens base do Azure Machine Learning.

Nota

Para usar o Kubernetes em vez de pontos de extremidade gerenciados como um destino de computação, consulte Introdução ao destino de computação do Kubernetes.

Identificar o caminho do modelo em relação a AZUREML_MODEL_DIR

Ao implantar seu modelo no Azure Machine Learning, você precisa especificar o local do modelo que deseja implantar como parte de sua configuração de implantação. No Azure Machine Learning, o caminho para o seu modelo é rastreado com a AZUREML_MODEL_DIR variável de ambiente. Ao identificar o caminho do modelo em relação ao AZUREML_MODEL_DIR, você pode implantar um ou mais modelos armazenados localmente em sua máquina ou implantar um modelo registrado em seu espaço de trabalho do Azure Machine Learning.

Para ilustração, fazemos referência à seguinte estrutura de pastas locais para os dois primeiros casos em que você implanta um único modelo ou implanta vários modelos armazenados localmente:

Uma captura de tela mostrando uma estrutura de pastas contendo vários modelos.

Usar um único modelo local em uma implantação

Para usar um único modelo que você tem em sua máquina local em uma implantação, especifique o path para o model em sua implantação YAML. Aqui está um exemplo do YAML de implantação com o caminho /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: 
  path: /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

Depois de criar sua implantação, a variável AZUREML_MODEL_DIR de ambiente apontará para o local de armazenamento no Azure onde seu modelo está armazenado. Por exemplo, /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 conterá o modelo sample_m1.pkl.

Dentro do seu script de pontuação (score.py), você pode carregar seu modelo (neste exemplo, sample_m1.pkl) na init() função:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl") 
    model = joblib.load(model_path) 

Usar vários modelos locais em uma implantação

Embora a CLI do Azure, o SDK do Python e outras ferramentas de cliente permitam especificar apenas um modelo por implantação na definição de implantação, você ainda pode usar vários modelos em uma implantação registrando uma pasta de modelo que contém todos os modelos como arquivos ou subdiretórios.

No exemplo anterior de estrutura de pastas, você percebe que há vários modelos na models pasta. Em sua implantação YAML, você pode especificar o caminho para a models pasta da seguinte maneira:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: 
  path: /Downloads/multi-models-sample/models/ 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

Depois de criar sua implantação, a variável AZUREML_MODEL_DIR de ambiente apontará para o local de armazenamento no Azure onde seus modelos estão armazenados. Por exemplo, /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 conterá os modelos e a estrutura do arquivo.

Neste exemplo, o AZUREML_MODEL_DIR conteúdo da pasta terá esta aparência:

Uma captura de tela da estrutura de pastas do local de armazenamento para vários modelos.

Dentro do init() seu script de pontuação (score.py), você pode carregar seus modelos na função. O código a seguir carrega o sample_m1.pkl modelo:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "models","model_1","v1", "sample_m1.pkl ") 
    model = joblib.load(model_path) 

Para obter um exemplo de como implantar vários modelos em uma implantação, consulte Implantar vários modelos em uma implantação (exemplo de CLI) e Implantar vários modelos em uma implantação (exemplo de SDK).

Gorjeta

Se você tiver mais de 1500 arquivos para registrar, considere compactar os arquivos ou subdiretórios como .tar.gz ao registrar os modelos. Para consumir os modelos, você pode descompactar os arquivos ou subdiretórios na função a init() partir do script de pontuação. Como alternativa, ao registrar os modelos, defina a azureml.unpack propriedade como True, para descompactar automaticamente os arquivos ou subdiretórios. Em ambos os casos, a descompactação acontece uma vez no estágio de inicialização.

Usar modelos registrados em seu espaço de trabalho do Azure Machine Learning em uma implantação

Para usar um ou mais modelos, que estão registrados em seu espaço de trabalho do Azure Machine Learning, em sua implantação, especifique o nome do(s) modelo(s) registrado(s) em sua implantação YAML. Por exemplo, a seguinte configuração de implantação do YAML especifica o nome registrado model como azureml:local-multimodel:3:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: azureml:local-multimodel:3 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

Para este exemplo, considere que local-multimodel:3 contém os seguintes artefatos de modelo, que podem ser exibidos na guia Modelos no estúdio do Azure Machine Learning:

Uma captura de tela da estrutura de pastas mostrando os artefatos de modelo do modelo registrado.

Depois de criar sua implantação, a variável AZUREML_MODEL_DIR de ambiente apontará para o local de armazenamento no Azure onde seus modelos estão armazenados. Por exemplo, /var/azureml-app/azureml-models/local-multimodel/3 conterá os modelos e a estrutura do arquivo. AZUREML_MODEL_DIR apontará para a pasta que contém a raiz dos artefatos do modelo. Com base neste exemplo, o AZUREML_MODEL_DIR conteúdo da pasta terá esta aparência:

Uma captura de tela da estrutura de pastas mostrando vários modelos.

Dentro do init() seu script de pontuação (score.py), você pode carregar seus modelos na função. Por exemplo, carregue o diabetes.sav modelo:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav") 
    model = joblib.load(model_path) 

Entenda o roteiro de pontuação

Gorjeta

O formato do script de pontuação para pontos de extremidade online é o mesmo formato usado na versão anterior da CLI e no Python SDK.

Como observado anteriormente, o script de pontuação especificado em code_configuration.scoring_script deve ter uma init() função e uma run() função.

Este exemplo usa o arquivo score.py: score.py

import os
import logging
import json
import numpy
import joblib


def init():
    """
    This function is called when the container is initialized/started, typically after create/update of the deployment.
    You can write the logic here to perform init operations like caching the model in memory
    """
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # Please provide your model's folder name if there is one
    model_path = os.path.join(
        os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
    )
    # deserialize the model file back into a sklearn model
    model = joblib.load(model_path)
    logging.info("Init complete")


def run(raw_data):
    """
    This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
    In the example we extract the data from the json input and call the scikit-learn model's predict()
    method and return the result back
    """
    logging.info("model 1: request received")
    data = json.loads(raw_data)["data"]
    data = numpy.array(data)
    result = model.predict(data)
    logging.info("Request processed")
    return result.tolist()

A init() função é chamada quando o contêiner é inicializado ou iniciado. A inicialização normalmente ocorre logo após a implantação ser criada ou atualizada. A init função é o local para escrever lógica para operações de inicialização global, como armazenar em cache o modelo na memória (como fazemos neste exemplo).

A run() função é chamada para cada invocação do ponto de extremidade, e faz a pontuação e previsão reais. Neste exemplo, extrairemos dados de uma entrada JSON, chamaremos o método do modelo predict() scikit-learn e retornaremos o resultado.

Implantar e depurar localmente usando pontos de extremidade locais

É altamente recomendável que você teste seu ponto de extremidade localmente validando e depurando seu código e configuração antes de implantar no Azure. A CLI do Azure e o SDK do Python dão suporte a pontos de extremidade e implantações locais, enquanto o estúdio do Azure Machine Learning e o modelo ARM não.

Para implantar localmente, o Docker Engine deve estar instalado e em execução. O mecanismo do Docker normalmente é iniciado quando o computador é iniciado. Se isso não acontecer, você poderá solucionar problemas do Docker Engine.

Gorjeta

Você pode usar o pacote Python do servidor HTTP de inferência do Azure Machine Learning para depurar seu script de pontuação localmente sem o Docker Engine. A depuração com o servidor de inferência ajuda você a depurar o script de pontuação antes de implantar em pontos de extremidade locais para que você possa depurar sem ser afetado pelas configurações do contêiner de implantação.

Nota

Os pontos de extremidade locais têm as seguintes limitações:

  • Eles não suportam regras de tráfego, autenticação ou configurações de teste.
  • Eles suportam apenas uma implantação por ponto de extremidade.
  • Eles suportam arquivos de modelo local e ambiente apenas com arquivo conda local. Se você quiser testar modelos registrados, primeiro baixe-os usando CLI ou SDK e, em seguida, use path na definição de implantação para fazer referência à pasta pai. Se você quiser testar ambientes registrados, verifique o contexto do ambiente no estúdio do Azure Machine Learning e prepare o arquivo conda local para usar. Exemplo neste artigo demonstra o uso de modelo local e ambiente com arquivo conda local, que suporta implantação local.

Para obter mais informações sobre como depurar pontos de extremidade online localmente antes de implantar no Azure, consulte Depurar pontos de extremidade online localmente no Visual Studio Code.

Implantar o modelo localmente

Primeiro, crie um ponto de extremidade. Opcionalmente, para um ponto de extremidade local, você pode ignorar esta etapa e criar diretamente a implantação (próxima etapa), que, por sua vez, criará os metadados necessários. A implantação de modelos localmente é útil para fins de desenvolvimento e teste.

az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

Agora, crie uma implantação nomeada blue sob o ponto de extremidade.

az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml

O --local sinalizador direciona a CLI para implantar o ponto de extremidade no ambiente do Docker.

Gorjeta

Utilize o Visual Studio Code para testar e depurar os pontos finais localmente. Para obter mais informações, consulte Depurar pontos de extremidade online localmente no Visual Studio Code.

Verificar se a implantação local foi bem-sucedida

Verifique o status para ver se o modelo foi implantado sem erros:

az ml online-endpoint show -n $ENDPOINT_NAME --local

A saída deve ser semelhante ao seguinte JSON. O provisioning_state é Succeeded.

{
  "auth_mode": "key",
  "location": "local",
  "name": "docs-endpoint",
  "properties": {},
  "provisioning_state": "Succeeded",
  "scoring_uri": "http://localhost:49158/score",
  "tags": {},
  "traffic": {}
}

A tabela a seguir contém os valores possíveis para provisioning_state:

Condição Description
Criação O recurso está sendo criado.
Atualização O recurso está sendo atualizado.
Exclusão O recurso está sendo excluído.
Bem sucedido A operação de criação/atualização foi bem-sucedida.
Falhado A operação create/update/delete falhou.

Invoque o ponto de extremidade local para pontuar dados usando seu modelo

Invoque o ponto de extremidade para pontuar o modelo usando o comando invoke convenience e passando parâmetros de consulta armazenados em um arquivo JSON:

az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

Se você quiser usar um cliente REST (como curl), você deve ter o URI de pontuação. Para obter o URI de pontuação, execute az ml online-endpoint show --local -n $ENDPOINT_NAME. Nos dados retornados, localize o scoring_uri atributo. Exemplos de comandos baseados em curl estão disponíveis posteriormente neste documento.

Revise os logs para obter a saída da operação de invocação

No exemplo score.py arquivo, o run() método registra alguma saída para o console.

Você pode exibir essa saída usando o get-logs comando:

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

Implantar seu ponto de extremidade online no Azure

Em seguida, implante seu ponto de extremidade online no Azure.

Implementar no Azure

Para criar o ponto de extremidade na nuvem, execute o seguinte código:

az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

Para criar a implantação nomeada blue sob o ponto de extremidade, execute o seguinte código:

az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic

Essa implantação pode levar até 15 minutos, dependendo se o ambiente subjacente ou a imagem está sendo criada pela primeira vez. As implantações subsequentes que usam o mesmo ambiente terminarão o processamento mais rapidamente.

Gorjeta

  • Se preferir não bloquear o console da CLI, adicione o sinalizador --no-wait ao comando. No entanto, isso interromperá a exibição interativa do status da implantação.

Importante

O --all-traffic sinalizador acima az ml online-deployment create aloca 100% do tráfego de ponto de extremidade para a implantação azul recém-criada. Embora isso seja útil para fins de desenvolvimento e teste, para produção, talvez você queira abrir o tráfego para a nova implantação por meio de um comando explícito. Por exemplo, az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".

Gorjeta

Verificar o estado do ponto final

O show comando contém informações sobre provisioning_state o ponto de extremidade e a implantação:

az ml online-endpoint show -n $ENDPOINT_NAME

Você pode listar todos os pontos de extremidade no espaço de trabalho em um formato de tabela usando o list comando:

az ml online-endpoint list --output table

Verificar o status da implantação on-line

Verifique os logs para ver se o modelo foi implantado sem erros.

Para ver a saída de log de um contêiner, use o seguinte comando da CLI:

az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME

Por padrão, os logs são extraídos do contêiner do servidor de inferência. Para ver os logs do contêiner do inicializador de armazenamento, adicione o --container storage-initializer sinalizador. Para obter mais informações sobre logs de implantação, consulte Obter logs de contêiner.

Invoque o ponto de extremidade para pontuar dados usando seu modelo

Você pode usar o invoke comando ou um cliente REST de sua escolha para invocar o ponto de extremidade e pontuar alguns dados:

az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

O exemplo a seguir mostra como obter a chave usada para autenticar no ponto de extremidade:

Gorjeta

Você pode controlar quais entidades de segurança do Microsoft Entra podem obter a chave de autenticação atribuindo-as a uma função personalizada que permite Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action e Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action. Para obter mais informações, consulte Gerenciar o acesso a um espaço de trabalho do Azure Machine Learning.

ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)

Em seguida, use curl para pontuar dados.

SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)

curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json

Observe que usamos show comandos e get-credentials instruções para obter as credenciais de autenticação. Observe também que estamos usando o --query sinalizador para filtrar atributos apenas para o que precisamos. Para saber mais sobre --queryo , consulte Consultar saída de comando da CLI do Azure.

Para ver os logs de invocação, execute get-logs novamente.

Para obter informações sobre como autenticar usando um token, consulte Autenticar em pontos de extremidade online.

(Opcional) Atualizar a implantação

Se desejar atualizar o código, modelo ou ambiente, atualize o arquivo YAML e execute o az ml online-endpoint update comando.

Nota

Se você atualizar a contagem de instâncias (para dimensionar sua implantação) juntamente com outras configurações de modelo (como código, modelo ou ambiente) em um único update comando, a operação de dimensionamento será executada primeiro e, em seguida, as outras atualizações serão aplicadas. É uma boa prática executar essas operações separadamente em um ambiente de produção.

Para entender como update funciona:

  1. Abra o arquivo online/model-1/onlinescoring/score.py.

  2. Altere a última linha da função: Depois logging.info("Init complete"), init() adicione logging.info("Updated successfully").

  3. Guarde o ficheiro.

  4. Execute este comando:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
    

    Nota

    A atualização usando YAML é declarativa. Ou seja, as alterações no YAML são refletidas nos recursos subjacentes do Azure Resource Manager (pontos de extremidade e implantações). Uma abordagem declarativa facilita o GitOps: todas as alterações em endpoints e implantações (até instance_countmesmo) passam pelo YAML.

    Gorjeta

    • Você pode usar parâmetros de atualização genéricos, como o --set parâmetro, com o comando CLI update para substituir atributos em seu YAML ou para definir atributos específicos sem passá-los no arquivo YAML. O uso --set para atributos únicos é especialmente valioso em cenários de desenvolvimento e teste. Por exemplo, para aumentar o instance_count valor da primeira implantação, você pode usar o --set instance_count=2 sinalizador. No entanto, como o YAML não é atualizado, essa técnica não facilita o GitOps.
    • Especificar o arquivo YAML NÃO é obrigatório. Por exemplo, se você quiser testar uma configuração de simultaneidade diferente para uma determinada implantação, poderá tentar algo como az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4. Isso manterá todas as configurações existentes, mas atualizará apenas os parâmetros especificados.
  5. Como você modificou a função, que é executada init() quando o ponto de extremidade é criado ou atualizado, a mensagem Updated successfully estará nos logs. Recupere os logs executando:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

O update comando também funciona com implantações locais. Use o mesmo az ml online-deployment update comando com o --local sinalizador.

Nota

A atualização anterior para a implantação é um exemplo de uma atualização contínua inloco.

  • Para um ponto de extremidade online gerenciado, a implantação é atualizada para a nova configuração com 20% de nós de cada vez. Ou seja, se a implantação tiver 10 nós, 2 nós de cada vez serão atualizados.
  • Para um ponto de extremidade online do Kubernetes, o sistema criará iterativamente uma nova instância de implantação com a nova configuração e excluirá a antiga.
  • Para uso em produção, você deve considerar a implantação azul-verde, que oferece uma alternativa mais segura para atualizar um serviço Web.

(Opcional) Configurar o dimensionamento automático

O dimensionamento automático executa a quantidade certa de recursos para processar a carga da aplicação. Os pontos de extremidade online gerenciados dão suporte ao dimensionamento automático por meio da integração com o recurso de dimensionamento automático do monitor do Azure. Para configurar o dimensionamento automático, consulte Como dimensionar automaticamente pontos de extremidade online.

(Opcional) Monitorar SLA usando o Azure Monitor

Para exibir métricas e definir alertas com base em seu SLA, conclua as etapas descritas em Monitorar pontos de extremidade online.

(Opcional) Integração com o Log Analytics

O get-logs comando para CLI ou o get_logs método para SDK fornece apenas as últimas centenas de linhas de logs de uma instância selecionada automaticamente. No entanto, o Log Analytics fornece uma maneira de armazenar e analisar logs de forma durável. Para obter mais informações sobre como usar o registro em log, consulte Monitorar pontos de extremidade online.

Excluir o ponto de extremidade e a implantação

Se você não for usar a implantação, deverá excluí-la executando o seguinte código (ele exclui o ponto de extremidade e todas as implantações subjacentes):

az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait