Neste artigo, você aprenderá a implantar seu modelo em um ponto de extremidade online para uso em inferências em tempo real. Comece implantando um modelo em seu computador local para depurar qualquer erro. Em seguida, implante e teste o modelo no Azure, exiba os logs de implantação e monitore o SLA (contrato de nível de serviço). Ao final deste artigo, você terá um ponto de extremidade HTTPS/REST escalonável que poderá ser usado para inferência em tempo real.
Os pontos de extremidade online são pontos de extremidade usados para inferência em tempo real. Há dois tipos de pontos de extremidade online: pontos de extremidade online gerenciados e pontos de extremidade online do Kubernetes. Para obter mais informações sobre os pontos de extremidade e as diferenças entre os pontos de extremidade online gerenciados e os pontos de extremidade online do Kubernetes, confira O que são os pontos de extremidade do Azure Machine Learning?
Os pontos de extremidade online gerenciados ajudam a implantar seus modelo de machine learning de maneira pronta para uso. Os pontos de extremidade online gerenciados funcionam com computadores com CPU e GPU poderosas no Azure, de maneira escalonável e totalmente gerenciada. Os pontos de extremidade online gerenciados cuidam do serviço, do da colocação em escala, da segurança e do monitoramento de seus modelos, liberando você da sobrecarga de configurar e gerenciar a infraestrutura subjacente.
O exemplo principal neste documento usa pontos de extremidade online gerenciados para implantação. Para usar o Kubernetes, confira as observações neste documento que estão alinhadas à discussão sobre os pontos de extremidade online gerenciados.
Os exemplos de CLI neste artigo pressupõem que você esteja usando o shell Bash (ou compatível). Por exemplo, de um sistema Linux ou Subsistema do Windows para Linux.
O RBAC do Azure (controle de acesso baseado em função) do Azure é usado para permitir acesso a 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 estúdio para criar/gerenciar pontos de extremidade/implantações online, precisará de uma permissão extra "Microsoft.Resources/deployments/write" do proprietário do grupo de recursos. Para obter mais informações, consulte Gerenciar acesso a um workspace do Azure Machine Learning.
(Opcional) Para implantar localmente, você deve instalar o Mecanismo do Docker em seu computador local. Recomendamos enfaticamente esta opção, pois assim é mais fácil depurar problemas.
O RBAC do Azure (controle de acesso baseado em função) do Azure é usado para permitir acesso a 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/*. Para obter mais informações, consulte Gerenciar acesso a um workspace do Azure Machine Learning.
(Opcional) Para implantar localmente, você deve instalar o Mecanismo do Docker em seu computador local. Recomendamos enfaticamente esta opção, pois assim é mais fácil depurar problemas.
Antes de seguir as etapas neste artigo, verifique se você tem os seguintes pré-requisitos:
Um workspace do Azure Machine Learning e uma instância de computação. Se você não tiver esses recursos e quiser criá-los, use as etapas do artigo Início Rápido: Criar recursos de workspace.
O RBAC do Azure (controle de acesso baseado em função) do Azure é usado para permitir acesso a 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/*. Para obter mais informações, consulte Gerenciar acesso a um workspace do Azure Machine Learning.
Observação
Embora a CLI do Azure e a extensão da CLI para aprendizado de máquina sejam usadas nestas etapas, elas não são o foco principal. Elas são usadas mais como utilitários, passando modelos para o Azure e verificando o status das implantações de modelo.
Antes de seguir as etapas neste artigo, verifique se você tem os seguintes pré-requisitos:
Os exemplos de CLI neste artigo pressupõem que você esteja usando o shell Bash (ou compatível). Por exemplo, de um sistema Linux ou Subsistema do Windows para Linux.
O RBAC do Azure (controle de acesso baseado em função) do Azure é usado para permitir acesso a 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/*. Para obter mais informações, consulte Gerenciar acesso a um workspace do Azure Machine Learning.
Verifique se você tem cota de VM (máquina virtual) suficiente alocada para implantação. O Azure Machine Learning reserva 20% de seus recursos de computação para executar atualizações em alguns SKUs de VM. Por exemplo, se você solicitar 10 instâncias em uma implantação, deverá ter uma cota de 12 para cada número de núcleos da SKU de VM. A falha ao considerar os recursos computacionais adicionais resulta em um erro. Alguns SKUs de VM são isentos da reserva de cota adicional. Para obter mais informações sobre a alocação de cota, confira Alocação de cota de máquina virtual para implantação.
Como alternativa, você pode usar a cota do pool de cotas compartilhado do Azure Machine Learning por um tempo limitado. O Azure Machine Learning fornece um pool de cotas compartilhado do qual os usuários em várias regiões podem acessar a cota para executar testes por um tempo limitado, dependendo da disponibilidade.
Ao usar o estúdio para implantar os modelos Llama-2, Phi, Nemotron, Mistral, Dolly e Deci-DeciLM do catálogo de modelos em um ponto de extremidade online gerenciado, o Azure Machine Learning permite que você acesse seu pool de cotas compartilhadas por um curto período de tempo para que possa executar testes. Para obter mais informações sobre o pool de cotas compartilhado, confira Cota compartilhada do Azure Machine Learning.
Se você ainda não definiu os padrões da CLI do Azure, salve as configurações padrão. Para evitar passar os valores para 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 cli/ do repositório:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
Dica
Use o --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 endpoints/online/managed/sample/, e os arquivos de configuração YAML estão no subdiretório cli.
Observação
Os arquivos de configuração YAML para pontos de extremidade online do Kubernetes estão no subdiretório endpoints/online/kubernetes/.
Clone o repositório de exemplos
Para executar os exemplos de treinamento, primeiro clone o repositório de exemplos (azureml-examples) e mude para o diretório azureml-examples/sdk/python/endpoints/online/managed:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk/python/endpoints/online/managed
Dica
Use o --depth 1 para clonar apenas a confirmação mais recente para o repositório, o que reduz o tempo para concluir a operação.
As informações neste artigo são baseadas no notebook online-endpoints-simple-deployment.ipynb. Ele contém o mesmo conteúdo deste artigo, embora a ordem dos códigos seja um pouco diferente.
Conectar-se ao workspace do Azure Machine Learning
O workspace é o recurso de nível superior para o Azure Machine Learning. Ele fornece um local centralizado para trabalhar com todos os artefatos que você cria ao usar o Azure Machine Learning. Nesta seção, você se conecta ao workspace no qual executará tarefas de implantação. Para acompanhar, abra seu notebook do online-endpoints-simple-deployment.ipynb.
Importe as bibliotecas necessárias:
# import required libraries
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration,
)
from azure.identity import DefaultAzureCredential
Observação
Se você estiver usando o ponto de extremidade online do Kubernetes, importe as classes KubernetesOnlineEndpoint e KubernetesOnlineDeployment da biblioteca azure.ai.ml.entities.
Configure os detalhes do workspace e obtenha um identificador para o workspace:
Para se conectar a um workspace, você precisa de parâmetros de identificação: uma assinatura, um grupo de recursos e um nome de workspace. Use esses detalhes no MLClient de azure.ai.ml para obter um identificador do workspace do Azure Machine Learning necessário. Este exemplo usa a autenticação padrão do Azure.
# enter details of your Azure Machine Learning workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AZUREML_WORKSPACE_NAME>"
# get a handle to the workspace
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
Se você tiver o Git instalado em seu computador local, poderá seguir as instruções para clonar o repositório de exemplos. Caso contrário, siga as instruções para baixar arquivos do repositório de exemplos.
Clone o repositório de exemplos
Para acompanhar este artigo, primeiro clone os repositório de exemplos (azureml-examples) e, em seguida, altere-os para o diretório azureml-examples/cli/endpoints/online/model-1.
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli/endpoints/online/model-1
Dica
Use o --depth 1 para clonar apenas a confirmação mais recente para o repositório, o que reduz o tempo para concluir a operação.
Baixar arquivos do repositório de exemplos
Se você clonou o repositório de exemplos, seu computador local já tem cópias dos arquivos para este exemplo e você pode pular para a próxima seção. Se você não clonou o repositório, poderá baixá-lo no computador local.
Acesse o botão <>Código na página e selecione Baixar ZIP na guia Local.
Localize a pasta /cli/endpoints/online/model-1/model e o arquivo /cli/endpoints/online/model-1/onlinescoring/score.py.
Definir variáveis de ambiente
Defina as seguintes variáveis de ambiente, pois elas são usadas nos exemplos deste artigo. Substitua os valores pela ID da assinatura do Azure, pela região do Azure em que o workspace está localizado, pelo grupo de recursos que contém o workspace e pelo nome do workspace:
export SUBSCRIPTION_ID="your Azure subscription ID"
export LOCATION="Azure region where your workspace is located"
export RESOURCE_GROUP="Azure resource group that contains your workspace"
export WORKSPACE="Azure Machine Learning workspace name"
Alguns exemplos de modelo exigem que você carregue arquivos no repositório de blobs do Azure para seu workspace. As etapas a seguir consultam o workspace e armazenam essas informações em variáveis de ambiente usadas nos exemplos:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
Dica
Use o --depth 1 para clonar apenas a confirmação mais recente para o repositório, o que reduz o tempo para concluir a operação.
Definir o ponto de extremidade
Para definir um ponto de extremidade online, especifique o nome do ponto de extremidade e o modo de autenticação. Para obter mais informações sobre os pontos de extremidade online gerenciados, confira Pontos de extremidade online.
Para definir o nome do ponto de extremidade, execute o seguinte comando. Substitua YOUR_ENDPOINT_NAME por um nome exclusivo na região do Azure. Para obter mais informações sobre as regras de nomenclatura, confira limites de pontos de extremidade.
Para o Linux, execute este comando:
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Configurar o ponto de extremidade
O snippet a seguir mostra o arquivo endpoints/online/managed/sample/endpoint.yml:
(Opcional) O esquema YAML. Para ver todas as opções disponíveis no arquivo YAML, você pode visualizar o esquema no exemplo 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 chave do Azure Machine Learning. Use aad_token para autenticação baseada em token do Microsoft Entra (versão prévia). Para obter mais informações sobre autenticação, consulte Autenticar clientes para pontos de extremidade online.
Configurar um ponto de extremidade
Primeiro, defina o nome do ponto de extremidade online e configure o ponto de extremidade.
O nome do ponto de extremidade deve ser exclusivo na região do Azure. Para obter mais informações sobre as regras de nomenclatura, confira limites de pontos de extremidade.
# Define an endpoint name
endpoint_name = "my-endpoint"
# Example way to define a random name
import datetime
endpoint_name = "endpt-" + datetime.datetime.now().strftime("%m%d%H%M%f")
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name = endpoint_name,
description="this is a sample endpoint",
auth_mode="key"
)
O código anterior usa key para autenticação baseada em chave. Use aml_token para autenticação baseada em token do Azure Machine Learning. Para usar a autenticação baseada em token do Microsoft Entra (versão prévia), use aad_token. Para obter mais informações sobre autenticação, consulte Autenticar clientes para pontos de extremidade online.
Configurar um ponto de extremidade
Ao implantar no Azure por meio do estúdio, você criará um ponto de extremidade e uma implantação para adicioná-lo. Nesse momento, você será solicitado a fornecer nomes para o ponto de extremidade e a implantação.
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 na região do Azure. Para obter mais informações sobre as regras de nomenclatura, confira limites de pontos de extremidade.
Para o Linux, execute este comando:
export ENDPOINT_NAME=endpoint-`echo $RANDOM`
Configurar o ponto de extremidade
Para definir o ponto de extremidade e a implantação, este artigo usa os modelos do Azure Resource Manager online-endpoint.json e online-endpoint-deployment.json. Para usar os modelos para definir um ponto de extremidade online e uma implantação, confira a seção Implantar no Azure.
Definir a implantação
Uma implantação é um conjunto de recursos necessários para hospedar o modelo que executa a inferência real. Para esse exemplo, implante um modelo scikit-learn que faz regressão e usa um script de pontuação score.py para executar o modelo em uma determinada solicitação de entrada.
Para saber mais sobre os principais atributos de uma implantação, confira Implantações online.
Configurar uma implantação
Sua configuração de implantação usa o local do modelo que você deseja implantar.
O snippet a seguir mostra o arquivo endpoints/online/managed/sample/blue-deployment.yml, com todas as entradas necessárias para configurar uma implantação:
O arquivo blue-deployment.yml especifica os seguintes atributos de implantação:
model – especifica as propriedades do modelo embutidas, usando o path (de onde carregar arquivos). A CLI carrega automaticamente os arquivos de modelo e registra o modelo com um nome gerado automaticamente.
environment – usando definições embutidas que incluem de onde carregar arquivos, a CLI carrega automaticamente o arquivo conda.yaml e registra o ambiente. Posteriormente, para criar o ambiente, a implantação usa o image (nesse exemplo, é mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest) para a imagem de base, e as dependências conda_file são instaladas sobre a imagem de base.
code_configuration – durante a implantação, os arquivos locais, como a origem do Python para o modelo de pontuação, são carregados do ambiente de desenvolvimento.
Para usar pontos de extremidade do Kubernetes em vez de pontos de extremidade online gerenciados como um destino de computação:
Crie o cluster do Kubernetes e anexe-o como um destino de computação ao espaço de trabalho do Azure Machine Learning usando o Estúdio do Azure Machine Learning.
Use o YAML do ponto de extremidade para direcionar o Kubernetes, em vez do YAML do ponto de extremidade gerenciado. É necessário editar o YAML para alterar o valor de compute para o nome do destino de computação registrado. Você pode usar esse deployment.yaml que tem propriedades adicionais aplicáveis à implantação do Kubernetes.
Todos os comandos usados neste artigo para pontos de extremidade online gerenciados também se aplicam aos pontos de extremidade do Kubernetes, exceto pelos seguintes recursos que não se aplicam aos pontos de extremidade do Kubernetes:
Model – especifica as propriedades do modelo embutidas, usando o path (de onde carregar arquivos). O SDK carrega automaticamente os arquivos de modelo e registra o modelo com um nome gerado automaticamente.
Environment – usando definições embutidas que incluem de onde carregar arquivos, o SDK carrega automaticamente o arquivo conda.yaml e registra o ambiente. Posteriormente, para criar o ambiente, a implantação usa o image (nesse exemplo, é mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest) para a imagem de base, e as dependências conda_file são instaladas sobre a imagem de base.
CodeConfiguration – durante a implantação, os arquivos locais, como a origem do Python para o modelo de pontuação, são carregados do ambiente de desenvolvimento.
Para obter mais informações sobre a definição de implantação online, confira Classe OnlineDeployment.
Configurar uma implantação
Ao implantar no Azure, você criará um ponto de extremidade e uma implantação para adicioná-lo. Nesse momento, você será solicitado a fornecer nomes para o ponto de extremidade e a implantação.
Configurar a implantação
Para definir o ponto de extremidade e a implantação, este artigo usa os modelos do Azure Resource Manager online-endpoint.json e online-endpoint-deployment.json. Para usar os modelos para definir um ponto de extremidade online e uma implantação, confira a seção Implantar no Azure.
Como funciona o script de pontuação
Dica
O formato do script de pontuação para pontos de extremidade online é o mesmo formato usado na versão anterior da CLI e no SDK do Python.
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 função init() é chamada quando o contêiner é inicializado ou iniciado. Normalmente, essa inicialização ocorre logo depois que a implantação é criada ou atualizada. A função init é o local para escrever a lógica das operações de inicialização global, como o armazenamento em cache do modelo na memória (conforme mostrado neste arquivo score.py).
A função run() é chamada sempre que o ponto de extremidade é chamado e faz a pontuação e a previsão reais. Neste arquivo score.py, a função run() extrai dados de uma entrada JSON, chama o método predict() do modelo do scikit-learn e, em seguida, retorna o resultado da previsão.
Implantar e depurar localmente usando um ponto de extremidade local
É altamente recomendável que você execute o ponto de extremidade localmente para validar e depurar o código e a 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 estúdio do Azure Machine Learning e modelo do ARM não.
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 Mecanismo do Docker. 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.
Para obter mais informações sobre a depuração de pontos de extremidade online localmente antes da implantação no Azure, confira Depuração de pontos de extremidade online.
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.
O estúdio não dá suporte a pontos de extremidade locais. Confira as guias CLI do Azure ou Python para obter etapas para testar o ponto de extremidade localmente.
O modelo não dá suporte a pontos de extremidade locais. Confira as guias CLI do Azure ou Python para obter etapas para testar o ponto de extremidade localmente.
Agora, crie a implantação chamada blue no ponto de extremidade.
O sinalizador local=True direciona o SDK para implantar o endpoint no ambiente do Docker.
O estúdio não dá suporte a pontos de extremidade locais. Confira as guias CLI do Azure ou Python para obter etapas para testar o ponto de extremidade localmente.
O modelo não dá suporte a pontos de extremidade locais. Confira as guias CLI do Azure ou Python para obter etapas para testar o ponto de extremidade localmente.
O estúdio não dá suporte a pontos de extremidade locais. Confira as guias CLI do Azure ou Python para obter etapas para testar o ponto de extremidade localmente.
O modelo não dá suporte a pontos de extremidade locais. Confira as guias CLI do Azure ou Python para obter etapas para testar o ponto de extremidade localmente.
A tabela a seguir contém os possíveis valores para provisioning_state:
Valor
Descrição
Criando
O recurso está sendo criado.
Atualizar
O recurso está sendo atualizado.
Excluir
O recurso está sendo excluído.
Êxito
A operação de criação/atualização foi bem-sucedida.
Com falha
Falha na operação de criação/atualização/exclusão.
Invocar o ponto de extremidade local para pontuar os dados usando o modelo
Invoque o ponto de extremidade para pontuar o modelo usando o comando invoke e passando os 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 a ondulação), deverá 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, encontre o atributo scoring_uri.
Invoque o ponto de extremidade para pontuar o modelo usando o comando fácil invoke e passando os parâmetros de consulta que são armazenados em um arquivo JSON.
Se você quiser usar um cliente REST (como a ondulação), deverá ter o URI de pontuação. Para obter o URI de pontuação, execute o código a seguir. Nos dados retornados, encontre o atributo scoring_uri.
O estúdio não dá suporte a pontos de extremidade locais. Confira as guias CLI do Azure ou Python para obter etapas para testar o ponto de extremidade localmente.
O modelo não dá suporte a pontos de extremidade locais. Confira as guias CLI do Azure ou Python para obter etapas para testar o ponto de extremidade localmente.
Examinar os logs em busca da saída da operação de invocação
No exemplo o arquivo score.py, o método run() registra uma saída no console.
O estúdio não dá suporte a pontos de extremidade locais. Confira as guias CLI do Azure ou Python para obter etapas para testar o ponto de extremidade localmente.
O modelo não dá suporte a pontos de extremidade locais. Confira as guias CLI do Azure ou Python para obter etapas para testar o ponto de extremidade localmente.
Implantar o ponto de extremidade online no Azure
Depois, implante o ponto de extremidade online no Azure. Como melhor prática para produção, recomendamos que você registre o modelo e o ambiente que usará em sua implantação.
Registrar modelo e ambiente
Recomendamos que você registre seu modelo e ambiente antes da implantação no Azure, para que possa especificar seus nomes e versões registrados durante a implantação. O registro de seus ativos permite reutilizá-los sem a necessidade de carregá-los sempre que criar implantações, aumentando assim a reprodutibilidade e a rastreabilidade.
Observação
Ao contrário da implantação no Azure, a implantação local não dá suporte ao uso de modelos e ambientes registrados. Em vez disso, a implantação local usa arquivos de modelo locais e usa ambientes somente com arquivos locais.
Para implantação no Azure, você pode usar ativos locais ou registrados (modelos e ambientes). Nesta seção do artigo, a implantação no Azure usa ativos registrados, mas você tem a opção de usar ativos locais. Para obter um exemplo de uma configuração de implantação que carrega arquivos locais a serem usados para implantação local, confira Configurar uma implantação.
Para registrar o modelo e o ambiente, use o formulário model: azureml:my-model:1 ou environment: azureml:my-env:1.
Para fazer o registro, você pode extrair as definições do 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.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
file_model = Model(
path="../../model-1/model/",
type=AssetTypes.CUSTOM_MODEL,
name="my-model",
description="Model created from local file.",
)
ml_client.models.create_or_update(file_model)
Registre o ambiente:
from azure.ai.ml.entities import Environment
env_docker_conda = Environment(
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
conda_file="../../model-1/environment/conda.yaml",
name="my-env",
description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env_docker_conda)
Um registro de modelo é uma entidade lógica no workspace que pode conter um só arquivo de modelo ou um diretório de vários arquivos. Como pratica recomendada para a produção, você deve registrar o modelo e o ambiente. Antes de criar o ponto de extremidade e a implantação neste artigo, registre a pasta de modelo que contém o modelo.
Para registrar o modelo de exemplo, siga estas etapas:
Na barra de navegação à esquerda, selecione a página Modelos.
Selecione Registrar e, em seguida, De arquivos locais.
Selecione Tipo não especificado para o Tipo de modelo.
Selecione Procurar e escolha Procurar pasta.
Selecione a pasta \azureml-examples\cli\endpoints\online\model-1\model na cópia local do repositório clonado ou baixado anteriormente. Quando solicitado, selecione Carregar e aguarde a conclusão do upload.
Selecione Avançar depois que o upload da pasta for concluído.
Insira um Nome amigável para o modelo. As etapas neste artigo pressupõem que ele seja nomeado model-1.
Selecione Avançar e Registrar-se para concluir o registro.
Na barra de navegação à esquerda, selecione a página Ambientes.
Selecione Criar.
Na página “Configurações”, forneça um nome, como my-env para o ambiente.
Para “Selecionar origem do ambiente”, escolha Usar imagem do docker existente com arquivo conda opcional.
Selecione Avançar para ir para a página “Personalizar”.
Copie o conteúdo do arquivo \azureml-examples\cli\endpoints\online\model-1\environment\conda.yaml da cópia local do repositório que você clonou ou baixou anteriormente.
Cole o conteúdo na caixa de texto.
Selecione Avançar até chegar à página “Revisão”.
Selecione Criar.
Para obter mais informações sobre como criar um ambiente no estúdio, confira Criar um ambiente.
Para registrar o modelo usando um modelo, primeiro você deve carregar o arquivo de modelo em um repositório de blobs do Azure. O exemplo a seguir usa o comando az storage blob upload-batch para carregar um arquivo no armazenamento padrão para seu workspace:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s cli/endpoints/online/model-1/model --account-name $AZURE_STORAGE_ACCOUNT
Após carregar o arquivo, use o modelo para criar um registro de modelo. No exemplo a seguir, o parâmetro modelUri contém o caminho para o modelo:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/model-version.json \
--parameters \
workspaceName=$WORKSPACE \
modelAssetName="sklearn" \
modelUri="azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model/sklearn_regression_model.pkl"
Parte do ambiente é um arquivo conda que especifica as dependências de modelo necessárias para hospedar o modelo. O exemplo a seguir demonstra como ler o conteúdo do arquivo conda em variáveis de ambiente:
O exemplo a seguir demonstra como usar o modelo para registrar o ambiente. O conteúdo do arquivo conda da etapa anterior é passado para o modelo usando o parâmetro condaFile:
Use os ativos registrados (modelo e ambiente) em sua definição de implantação. O trecho a seguir mostra o arquivo endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml, com todas as entradas necessárias para configurar uma implantação:
Ao implantar a partir do estúdio, você criará um ponto de extremidade e uma implantação para adicioná-lo. Nesse momento, você será solicitado a fornecer nomes para o ponto de extremidade e a implantação.
Para definir o ponto de extremidade e a implantação, este artigo usa os modelos do Azure Resource Manager online-endpoint.json e online-endpoint-deployment.json. Para usar os modelos para definir um ponto de extremidade online e uma implantação, confira a seção Implantar no Azure.
Usar diferentes imagens e tipos de instância de GPU e CPU
Você pode especificar os tipos de instância de CPU ou GPU e as imagens em sua definição de implantação, tanto para a implantação local quanto para a implantação no Azure.
Sua definição de implantação no arquivo blue-deployment-with-registered-assets.yml usou uma instância Standard_DS3_v2 do tipo de uso geral e uma imagem do Docker sem GPU mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest. Para a computação de GPU, escolha um SKU de tipo de computação de GPU e uma imagem do Docker de GPU.
Você pode especificar os tipos de instância de CPU ou GPU e as imagens na configuração de implantação, tanto para a implantação local quanto para a implantação no Azure.
Anteriormente, você configurou uma implantação que usava uma instância Standard_DS3_v2 do tipo de uso geral e uma imagem do Docker sem GPU mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest. Para a computação de GPU, escolha um SKU de tipo de computação de GPU e uma imagem do Docker de GPU.
Ao usar o estúdio para implantar no Azure, você será solicitado a especificar as propriedades de computação (tipo de instância e contagem de instâncias) e o ambiente a ser usado para a implantação.
O registro anterior do ambiente especifica uma imagem mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 do Docker sem GPU passando o valor para o modelo environment-version.json usando o parâmetro dockerImage. Para uma computação de GPU, forneça um valor para uma imagem do Docker de GPU para o modelo (usando o parâmetro dockerImage) e forneça um SKU de tipo de computação com GPU para o modelo online-endpoint-deployment.json (usando o parâmetro skuName).
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Crie a implantação denominada blue no ponto de extremidade.
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml --all-traffic
A criação da implantação pode levar até 15 minutos, dependendo se o ambiente ou imagem subjacente está sendo criado pela primeira vez. As implantações seguintes que usam o mesmo ambiente são processadas mais rapidamente.
Dica
Se você preferir não bloquear o console da CLI, adicione o sinalizador --no-wait ao comando. No entanto, essa opção interromperá a exibição interativa do status da implantação.
Importante
O sinalizador --all-traffic no código az ml online-deployment create usado para criar a implantação aloca 100% do tráfego do 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 rotear 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".
Criar o ponto de extremidade:
Usando o endpoint que você definiu anteriormente e o MLClient que criou anteriormente, agora você pode criar o ponto de extremidade no workspace. Esse comando inicia a criação do ponto de extremidade e retorna uma resposta de confirmação enquanto a criação do ponto de extremidade continuar.
Usando o blue_deployment_with_registered_assets que você definiu anteriormente e o MLClient que criou anteriormente, agora você pode criar a implantação no workspace. Esse comando iniciará a criação da implantação e retornará uma resposta de confirmação enquanto a criação da implantação continuar.
Se preferir não bloquear o console do Python, adicione o sinalizador no_wait=True aos parâmetros. No entanto, essa opção interromperá a exibição interativa do status da implantação.
Criar um ponto de extremidade online gerenciado e uma implantação
Use o estúdio para criar um ponto de extremidade online gerenciado diretamente no navegador. Ao criar um ponto de extremidade online gerenciado no estúdio, você precisa definir uma implantação inicial. Não é possível criar um ponto de extremidade online gerenciado vazio.
Outra forma de criar um ponto de extremidade online gerenciado no estúdio é a partir da página Modelos. Essa é uma forma fácil de adicionar um modelo a uma implantação online gerenciada existente. Para implantar o modelo denominado model-1 que você registrou anteriormente na seção Registrar modelo e ambiente:
Na barra de navegação à esquerda, selecione a página Modelos.
Selecione um modelo chamado model-1 marcando o círculo ao lado do nome do modelo.
Selecione Implantar> Ponto de extremidade em tempo real.
Essa ação abre uma janela em que você pode especificar detalhes sobre seu ponto de extremidade.
Insira um Nome de ponto de extremidade que seja exclusivo na região do Azure. Para obter mais informações sobre as regras de nomenclatura, confira limites de pontos de extremidade.
Mantenha a seleção padrão: Gerenciado para o tipo de computação.
Escolha Avançar até chegar à página de "Implantação" Aqui, alterne o diagnóstico do Application Insights para Habilitado para permitir que você exiba gráficos das atividades do ponto de extremidade no estúdio posteriormente e analise métricas e logs usando o Application Insights.
Selecione Avançar para ir para a página "Código + ambiente". Nesta etapa, selecione as seguintes opções:
Selecione um script de pontuação para inferências: navegue e selecione o arquivo \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py do repositório que você clonou ou baixou anteriormente.
Seção Selecionar ambiente: selecione Ambientes personalizados e, em seguida, selecione o ambiente my-env:1 que você criou anteriormente.
Selecione Avançar, aceitando os padrões, até que seja solicitada a criação da implantação.
Examine as configurações da implantação e selecione o botão Criar.
Como alternativa, você pode criar um ponto de extremidade online gerenciado na página Ponto de extremidade do estúdio.
Na barra de navegação à esquerda, selecione a página Pontos de extremidade.
Selecione + Criar.
Essa ação abre uma janela para que você selecione o modelo e especifique detalhes sobre o ponto de extremidade e a implantação. Insira as configurações do ponto de extremidade e da implantação conforme descrito anteriormente e, em seguida, Criar a implantação.
Use o modelo para criar um ponto de extremidade online:
Liste todos os pontos de extremidade no workspace em um formato de tabela usando o método list:
for endpoint in ml_client.online_endpoints.list():
print(endpoint.name)
O método retorna a lista (iterador) de entidades ManagedOnlineEndpoint.
Você pode obter mais informações especificando mais parâmetros. Por exemplo, gere a lista de pontos de extremidade como uma tabela:
print("Kind\tLocation\tName")
print("-------\t----------\t------------------------")
for endpoint in ml_client.online_endpoints.list():
print(f"{endpoint.kind}\t{endpoint.location}\t{endpoint.name}")
Ver os pontos de extremidade online gerenciados
Veja os pontos de extremidade online gerenciados na página Pontos de Extremidade. Acesse a página Detalhes do ponto de extremidade para encontrar informações críticas, incluindo o URI do ponto de extremidade, o status, as ferramentas de teste, os monitores de atividade, os logs de implantação e o código de consumo de exemplo:
Na barra de navegação à esquerda, selecione Pontos de Extremidade. Aqui, você pode ver uma lista de todos os pontos de extremidade no workspace.
(Opcional) Crie um Filtro em Tipo de computação para mostrar apenas os tipos de computação Gerenciados.
Selecione o nome de um ponto de extremidade para exibir a página Detalhes do ponto de extremidade.
Dica
Embora os modelos sejam úteis para implantar recursos, eles não podem ser usados para listar, mostrar ou invocar recursos. Use a CLI do Azure, o SDK do Python ou o estúdio para executar essas operações. O seguinte código usa a CLI do Azure.
Use o comando show para exibir informações em provisioning_state sobre o ponto de extremidade e a implantação:
az ml online-endpoint show -n $ENDPOINT_NAME
Liste todos os pontos de extremidade no workspace em um formato de tabela usando o comando list:
az ml online-endpoint list --output table
Verifique o status da implantação online
Verifique os logs para ver se o modelo foi implantado sem erro.
Para ver a saída de log do 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 sinalizador --container storage-initializer. Para obter mais informações sobre logs de implantação, consulte Obter logs de contêiner.
Você pode exibir a saída do log usando o método get_logs:
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 a opção container_type="storage-initializer". Para obter mais informações sobre logs de implantação, consulte Obter logs de contêiner.
Para exibir a saída do log, selecione a guia Logs na página do ponto de extremidade. Se você tiver várias implantações no ponto de extremidade, use a lista suspensa para selecionar a implantação cujo log você deseja ver.
Por padrão, os logs são extraídos do servidor de inferência. Para ver os logs do contêiner do inicializador de armazenamento, use a CLI do Azure ou o SDK do Python (confira cada guia para obter detalhes). Os logs do contêiner do inicializador de armazenamento fornecem informações sobre se os dados do código e do modelo foram baixados com êxito para o contêiner. Para obter mais informações sobre logs de implantação, consulte Obter logs de contêiner.
Dica
Embora os modelos sejam úteis para implantar recursos, eles não podem ser usados para listar, mostrar ou invocar recursos. Use a CLI do Azure, o SDK do Python ou o estúdio para executar essas operações. O seguinte código usa a CLI do Azure.
Para ver a saída de log do 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 sinalizador --container storage-initializer. Para obter mais informações sobre logs de implantação, consulte Obter logs de contêiner.
Invocar o ponto de extremidade para pontuar os dados usando o modelo
Use o comando invoke ou um cliente REST de sua escolha para chamar o ponto de extremidade e obter alguns dados:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Obtenha a chave usada para autenticar no ponto de extremidade:
Dica
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 sobre como gerenciar a autorização para workspaces, confira Gerenciar o acesso a um workspace do Azure Machine Learning.
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
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 você usa os comandos show e get-credentials para obter as credenciais de autenticação. Observe também que você está usando o sinalizador --query para filtrar apenas os atributos necessários. Para saber mais sobre o sinalizador --query, confira Consultar a saída de comando da CLI do Azure.
Para ver os logs de invocação, execute get-logs novamente.
Usando o MLClient criado anteriormente, obtenha um identificador para o ponto de extremidade. O ponto de extremidade pode então ser chamado usando o comando invoke com os seguintes parâmetros:
endpoint_name – Nome do ponto de extremidade
request_file – Arquivo com os dados de solicitação
deployment_name – Nome da implantação específica a ser testada em um ponto de extremidade
Envie uma solicitação de exemplo usando um arquivo json.
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
Use a guia Teste na página de detalhes dos pontos de extremidade para testar sua implantação online gerenciada. Insira uma entrada de exemplo e veja os resultados.
Selecione a guia Teste na página de detalhes do ponto de extremidade.
Use a lista suspensa para selecionar a implantação que deseja testar.
Embora os modelos sejam úteis para implantar recursos, eles não podem ser usados para listar, mostrar ou invocar recursos. Use a CLI do Azure, o SDK do Python ou o estúdio para executar essas operações. O seguinte código usa a CLI do Azure.
Use o comando invoke ou um cliente REST de sua escolha para chamar o ponto de extremidade e obter alguns dados:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file cli/endpoints/online/model-1/sample-request.json
Se você quer atualizar o código, o modelo ou o ambiente, atualize o arquivo YAML e, em seguida, execute o comando az ml online-endpoint update.
Observação
Se você atualizar a contagem de instâncias (para escalar sua implantação) e junto com outras configurações de modelo (como código, modelo ou ambiente) em um único comando update, a operação de dimensionamento será executada 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:
Abra o arquivo online/model-1/onlinescoring/score.py.
Altere a última linha da função init(): depois de logging.info("Init complete"), adicione logging.info("Updated successfully").
Salve o arquivo.
Execute este comando:
az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
Observação
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 pontos de extremidade e implantações (até mesmo instance_count) passam pelo YAML.
Dica
Você pode usar parâmetros de atualização genéricos, como o parâmetro --set, com o comando update da CLI para substituir atributos em seu YAML ou para definir atributos específicos sem passá-los no arquivo YAML. Use --set para atributos individuais é útil principalmente em cenários de desenvolvimento e teste. Por exemplo, para escalar verticalmente o valor instance_count da primeira implantação, você pode usar o sinalizador --set instance_count=2. No entanto, como o YAML não está 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.
Como você modificou a função init(), que é executada 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 comando update também funciona com implantações locais. Use o mesmo comando az ml online-deployment update com o sinalizador --local.
Se você deseja atualizar o código, modelo ou ambiente, atualize a configuração e execute o método online_deployments.begin_create_or_update do MLClient para criar e atualizar uma implantação.
Observação
Se você atualizar a contagem de instâncias (para escalar sua implantação) juntamente com outras configurações de modelo (como código, modelo ou ambiente) em um único método begin_create_or_update, 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 begin_create_or_update funciona:
Abra o arquivo online/model-1/onlinescoring/score.py.
Altere a última linha da função init(): depois de logging.info("Init complete"), adicione logging.info("Updated successfully").
Como você modificou a função init(), que é executada quando o ponto de extremidade é criado ou atualizado, a mensagem Updated successfully estará nos logs. Recupere os logs executando:
O método begin_create_or_update também funciona com implantações locais. Use o mesmo método com o sinalizador local=True.
Atualmente, o estúdio permite que você faça atualizações apenas na contagem de instâncias de uma implantação. Use as seguintes instruções para aumentar ou reduzir uma implantação individual ajustando o número de instâncias:
Abra a página Detalhes do ponto de extremidade e localize o cartão para a implantação que você deseja atualizar.
Selecione o ícone de edição (ícone de lápis) ao lado do nome da implantação.
Atualize a contagem de instâncias associada à implantação. Você pode escolher entre Padrão ou Utilização de Destino para "Tipo de escala de implantação".
Se você selecionar Padrão, você também especificar um valor numérico para a contagem de instâncias.
Se você selecionar Utilização de Destino, poderá especificar os valores a serem usados para parâmetros ao dimensionar automaticamente a implantação.
Selecione Atualizar para concluir a atualização das contagens de instâncias para a implantação.
Atualmente, não há uma opção para atualizar a implantação usando um modelo do ARM.
Observação
A atualização da implantação nesta seção é um exemplo de uma atualização contínua no local.
Para um ponto de extremidade online gerenciado, a implantação é atualizada para a nova configuração com 20% de nós por vez. Ou seja, se a implantação tiver 10 nós, 2 nós por 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 exclui a antiga.
Para uso em produção, considere 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 automaticamente a quantidade certa de recursos para lidar com a carga em seu aplicativo. Os pontos de extremidade gerenciados dão suporte ao dimensionamento automático por meio da integração com o recurso de dimensionamento automático do Azure Monitor. Para configurar o dimensionamento automático, consulte Como fazer o dimensionamento automático de pontos de extremidade online.
O comando get-logs para CLI ou o método get_logs para SDK fornece apenas as últimas centenas de linhas de logs de uma instância selecionada automaticamente. No entanto, o Log Analytics oferece uma forma de armazenar e analisar logs de modo durável. Para obter mais informações sobre como usar o registro em log, confira Monitorar pontos de extremidade online.
Se você não for usar o ponto de extremidade e a implantação, você deve excluí-los. Ao excluir o ponto de extremidade, você também excluirá todas as suas implantações subjacentes.