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:
A CLI do Azure e a
ml
extensão para a CLI do Azure. Para obter mais informações, consulte Instalar, configurar e usar a CLI (v2).Importante
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 Windows para Linux.
Uma área de trabalho do Azure Machine Learning. Se você não tiver uma, use as etapas em Instalar, configurar e usar a CLI (v2) para criar uma.
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 opath
. Os ficheiros de modelo são automaticamente carregados e registados com um nome gerado automaticamente.environment
- Neste exemplo, temos definições embutidas que incluem opath
. Usaremosenvironment.docker.image
para a imagem. Asconda_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:
- 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.
- 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:latest
do 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:
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:
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:
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:
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
- Use Solução de problemas de implantação de endpoints online para depurar erros.
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 --query
o , 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:
Abra o arquivo online/model-1/onlinescoring/score.py.
Altere a última linha da função: Depois
logging.info("Init complete")
,init()
adicionelogging.info("Updated successfully")
.Guarde o ficheiro.
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_count
mesmo) passam pelo YAML.Gorjeta
- Você pode usar parâmetros de atualização genéricos, como o
--set
parâmetro, com o comando CLIupdate
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 oinstance_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.
- Você pode usar parâmetros de atualização genéricos, como o
Como você modificou a função, que é executada
init()
quando o ponto de extremidade é criado ou atualizado, a mensagemUpdated 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
Conteúdos relacionados
- Implementação segura para terminais online
- Implantar modelos com REST
- Como dimensionar automaticamente endpoints online gerenciados
- Como monitorar endpoints online gerenciados
- Aceder aos recursos do Azure a partir de um ponto de extremidade online com uma identidade gerida
- Resolver problemas de implementação de pontos finais online
- Habilite o isolamento de rede com pontos de extremidade online gerenciados
- Exibir custos de um ponto de extremidade online gerenciado do Azure Machine Learning
- Gerir e aumentar as quotas dos recursos com o Azure Machine Learning
- Usar pontos de extremidade de lote para pontuação de lote