Implantar modelos de aprendizado de máquina no Azure
APLICA-SE A:Azure CLI ml extension v1Python SDK azureml v1
Saiba como implantar seu modelo de aprendizado de máquina ou aprendizado profundo como um serviço Web na nuvem do Azure.
Nota
Os Pontos de Extremidade do Azure Machine Learning (v2) fornecem uma experiência de implantação aprimorada e mais simples. Os endpoints suportam cenários de inferência em tempo real e em lote. Os endpoints fornecem uma interface unificada para invocar e gerenciar implantações de modelo em todos os tipos de computação. Consulte O que são pontos de extremidade do Azure Machine Learning?.
Fluxo de trabalho para implantar um modelo
O fluxo de trabalho é semelhante, independentemente de onde implementa o modelo:
- Registar o modelo.
- Prepare um script de entrada.
- Prepare uma configuração de inferência.
- Implante o modelo localmente para garantir que tudo funcione.
- Escolha um destino de computação.
- Implante o modelo na nuvem.
- Teste o serviço Web resultante.
Para obter mais informações sobre os conceitos envolvidos no fluxo de trabalho de implantação do aprendizado de máquina, consulte Gerenciar, implantar e monitorar modelos com o Azure Machine Learning.
Pré-requisitos
APLICA-SE A: Azure CLI ml extension v1
Importante
Alguns dos comandos da CLI do Azure neste artigo usam a extensão , ou v1, para o azure-cli-ml
Azure Machine Learning. O suporte para a extensão v1 terminará em 30 de setembro de 2025. Você poderá instalar e usar a extensão v1 até essa data.
Recomendamos que você faça a transição para a ml
extensão , ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, consulte Extensão CLI do Azure ML e Python SDK v2.
- Uma área de trabalho do Azure Machine Learning. Para obter mais informações, consulte Criar recursos de espaço de trabalho.
- Um modelo. Os exemplos neste artigo usam um modelo pré-treinado.
- Uma máquina que pode executar o Docker, como uma instância de computação.
Ligar à sua área de trabalho
APLICA-SE A: Azure CLI ml extension v1
Para ver os espaços de trabalho aos quais você tem acesso, use os seguintes comandos:
az login
az account set -s <subscription>
az ml workspace list --resource-group=<resource-group>
Registar o modelo
Uma situação típica para um serviço de aprendizado de máquina implantado é que você precisa dos seguintes componentes:
- Recursos que representam o modelo específico que você deseja implantar (por exemplo: um arquivo de modelo pytorch).
- Código que você estará executando no serviço que executa o modelo em uma determinada entrada.
O Azure Machine Learnings permite-lhe separar a implementação em dois componentes separados, para que possa manter o mesmo código e atualizar apenas o modelo. Definimos o mecanismo através do qual envia um modelo separadamente do código como “registar o modelo”.
Quando regista um modelo, nós carregamos o modelo na cloud (na conta de armazenamento predefinida da sua área de trabalho) e, em seguida, montamos esse modelo na mesma computação em que o seu serviço Web está em execução.
Os exemplos a seguir demonstram como registrar um modelo.
Importante
Apenas deve utilizar modelos criados por si ou que tenha obtido a partir de uma origem fidedigna. Deve tratar os modelos serializados como código, pois foram descobertas vulnerabilidades de segurança em vários formatos populares. Além disso, os modelos podem ser preparados propositadamente com a intenção maliciosa de fornecer saídas tendenciosas ou imprecisas.
APLICA-SE A: Azure CLI ml extension v1
Os comandos a seguir baixam um modelo e o registram no seu espaço de trabalho do Azure Machine Learning:
wget https://aka.ms/bidaf-9-model -O model.onnx --show-progress
az ml model register -n bidaf_onnx \
-p ./model.onnx \
-g <resource-group> \
-w <workspace-name>
Defina -p
como o caminho de uma pasta ou de um arquivo que você deseja registrar.
Para obter mais informações sobre az ml model register
o , consulte a documentação de referência.
Registrar um modelo de um trabalho de treinamento do Azure Machine Learning
Se você precisar registrar um modelo que foi criado anteriormente por meio de um trabalho de treinamento do Azure Machine Learning, poderá especificar o experimento, a execução e o caminho para o modelo:
az ml model register -n bidaf_onnx --asset-path outputs/model.onnx --experiment-name myexperiment --run-id myrunid --tag area=qna
O --asset-path
parâmetro refere-se à localização na nuvem do modelo. Neste exemplo, o caminho de um único arquivo é usado. Para incluir vários arquivos no registro do modelo, defina --asset-path
como o caminho de uma pasta que contém os arquivos.
Para obter mais informações sobre az ml model register
o , consulte a documentação de referência.
Nota
Você também pode registrar um modelo de um arquivo local por meio do portal da interface do usuário do espaço de trabalho.
Atualmente, há duas opções para carregar um arquivo de modelo local na interface do usuário:
- A partir de arquivos locais, que registrarão um modelo v2.
- A partir de arquivos locais (baseados no framework), que registrarão um modelo v1.
Observe que apenas os modelos registrados por meio da entrada De arquivos locais (com base na estrutura) (que são conhecidos como modelos v1) podem ser implantados como webservices usando SDKv1/CLIv1.
Definir um script de entrada fictício
O script de entrada recebe os dados enviados para um serviço Web implementado e transmite-os para o modelo. Em seguida, ele retorna a resposta do modelo para o cliente. O script é específico para o seu modelo. O script de entrada deve entender os dados que o modelo espera e retorna.
As duas coisas que você precisa realizar em seu script de entrada são:
- Carregando seu modelo (usando uma função chamada
init()
) - Executando seu modelo em dados de entrada (usando uma função chamada
run()
)
Para sua implantação inicial, use um script de entrada fictício que imprima os dados recebidos.
import json
def init():
print("This is init")
def run(data):
test = json.loads(data)
print(f"received data {test}")
return f"test is {test}"
Salve este arquivo como echo_score.py
dentro de um diretório chamado source_dir
. Esse script fictício retorna os dados que você envia para ele, portanto, ele não usa o modelo. Mas é útil para testar se o script de pontuação está em execução.
Definir uma configuração de inferência
Uma configuração de inferência descreve o contêiner do Docker e os arquivos a serem usados ao inicializar seu serviço Web. Todos os arquivos dentro do diretório de origem, incluindo subdiretórios, serão compactados e carregados na nuvem quando você implantar seu serviço Web.
A configuração de inferência abaixo especifica que a implantação de aprendizado de máquina usará o arquivo echo_score.py
no ./source_dir
diretório para processar solicitações de entrada e que usará a imagem do Docker com os pacotes Python especificados no project_environment
ambiente.
Você pode usar qualquer ambiente curado de inferência do Azure Machine Learning como a imagem base do Docker ao criar seu ambiente de projeto. Instalaremos as dependências necessárias na parte superior e armazenaremos a imagem resultante do Docker no repositório associado ao seu espaço de trabalho.
Nota
O carregamento do diretório de origem da inferência do aprendizado de máquina do Azure não respeita .gitignore ou .amlignore
APLICA-SE A: Azure CLI ml extension v1
Uma configuração de inferência mínima pode ser escrita como:
{
"entryScript": "echo_score.py",
"sourceDirectory": "./source_dir",
"environment": {
"docker": {
"arguments": [],
"baseDockerfile": null,
"baseImage": "mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
"enabled": false,
"sharedVolumes": true,
"shmSize": null
},
"environmentVariables": {
"EXAMPLE_ENV_VAR": "EXAMPLE_VALUE"
},
"name": "my-deploy-env",
"python": {
"baseCondaEnvironment": null,
"condaDependencies": {
"channels": [],
"dependencies": [
"python=3.6.2",
{
"pip": [
"azureml-defaults"
]
}
],
"name": "project_environment"
},
"condaDependenciesFile": null,
"interpreterPath": "python",
"userManagedDependencies": false
},
"version": "1"
}
}
Salve este arquivo com o nome dummyinferenceconfig.json
.
Consulte este artigo para obter uma discussão mais aprofundada sobre as configurações de inferência.
Definir uma configuração de implantação
Uma configuração de implantação especifica a quantidade de memória e núcleos que seu serviço Web precisa para ser executado. Ele também fornece detalhes de configuração do webservice subjacente. Por exemplo, uma configuração de implantação permite especificar que seu serviço precisa de 2 gigabytes de memória, 2 núcleos de CPU, 1 núcleo de GPU e que você deseja habilitar o dimensionamento automático.
As opções disponíveis para uma configuração de implantação diferem dependendo do destino de computação escolhido. Em uma implantação local, tudo o que você pode especificar é em qual porta seu serviço Web será servido.
APLICA-SE A: Azure CLI ml extension v1
As entradas no deploymentconfig.json
documento são mapeadas para os parâmetros para LocalWebservice.deploy_configuration. A tabela a seguir descreve o mapeamento entre as entidades no documento JSON e os parâmetros para o método:
Entidade JSON | Parâmetro do método | Description |
---|---|---|
computeType |
ND | O destino de computação. Para destinos locais, o valor deve ser local . |
port |
port |
A porta local na qual expor o ponto de extremidade HTTP do serviço. |
Este JSON é um exemplo de configuração de implantação para uso com a CLI:
{
"computeType": "local",
"port": 32267
}
Salve este JSON como um arquivo chamado deploymentconfig.json
.
Para obter mais informações, consulte o esquema de implantação.
Implante seu modelo de aprendizado de máquina
Agora você está pronto para implantar seu modelo.
APLICA-SE A: Azure CLI ml extension v1
Substitua bidaf_onnx:1
pelo nome do seu modelo e respetivo número de versão.
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic dummyinferenceconfig.json \
--dc deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
Ligue para o seu modelo
Vamos verificar se seu modelo de eco foi implantado com êxito. Você deve ser capaz de fazer um pedido de vivacidade simples, bem como um pedido de pontuação:
APLICA-SE A: Azure CLI ml extension v1
curl -v http://localhost:32267
curl -v -X POST -H "content-type:application/json" \
-d '{"query": "What color is the fox", "context": "The quick brown fox jumped over the lazy dog."}' \
http://localhost:32267/score
Definir um script de entrada
Agora é hora de realmente carregar o seu modelo. Primeiro, modifique seu script de entrada:
import json
import numpy as np
import os
import onnxruntime
from nltk import word_tokenize
import nltk
def init():
nltk.download("punkt")
global sess
sess = onnxruntime.InferenceSession(
os.path.join(os.getenv("AZUREML_MODEL_DIR"), "model.onnx")
)
def run(request):
print(request)
text = json.loads(request)
qw, qc = preprocess(text["query"])
cw, cc = preprocess(text["context"])
# Run inference
test = sess.run(
None,
{"query_word": qw, "query_char": qc, "context_word": cw, "context_char": cc},
)
start = np.asscalar(test[0])
end = np.asscalar(test[1])
ans = [w for w in cw[start : end + 1].reshape(-1)]
print(ans)
return ans
def preprocess(word):
tokens = word_tokenize(word)
# split into lower-case word tokens, in numpy array with shape of (seq, 1)
words = np.asarray([w.lower() for w in tokens]).reshape(-1, 1)
# split words into chars, in numpy array with shape of (seq, 1, 1, 16)
chars = [[c for c in t][:16] for t in tokens]
chars = [cs + [""] * (16 - len(cs)) for cs in chars]
chars = np.asarray(chars).reshape(-1, 1, 1, 16)
return words, chars
Salve este arquivo como score.py
dentro do source_dir
.
Observe o AZUREML_MODEL_DIR
uso da variável de ambiente para localizar seu modelo registrado. Agora que você adicionou alguns pacotes pip.
APLICA-SE A: Azure CLI ml extension v1
{
"entryScript": "score.py",
"sourceDirectory": "./source_dir",
"environment": {
"docker": {
"arguments": [],
"baseDockerfile": null,
"baseImage": "mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
"enabled": false,
"sharedVolumes": true,
"shmSize": null
},
"environmentVariables": {
"EXAMPLE_ENV_VAR": "EXAMPLE_VALUE"
},
"name": "my-deploy-env",
"python": {
"baseCondaEnvironment": null,
"condaDependencies": {
"channels": [],
"dependencies": [
"python=3.6.2",
{
"pip": [
"azureml-defaults",
"nltk",
"numpy",
"onnxruntime"
]
}
],
"name": "project_environment"
},
"condaDependenciesFile": null,
"interpreterPath": "python",
"userManagedDependencies": false
},
"version": "2"
}
}
Salve este arquivo como inferenceconfig.json
Implante novamente e ligue para o seu serviço
Implante seu serviço novamente:
APLICA-SE A: Azure CLI ml extension v1
Substitua bidaf_onnx:1
pelo nome do seu modelo e respetivo número de versão.
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic inferenceconfig.json \
--dc deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
Em seguida, certifique-se de que pode enviar um pedido de correio para o serviço:
APLICA-SE A: Azure CLI ml extension v1
curl -v -X POST -H "content-type:application/json" \
-d '{"query": "What color is the fox", "context": "The quick brown fox jumped over the lazy dog."}' \
http://localhost:32267/score
Escolha um destino de computação
O destino de computação que você usa para hospedar seu modelo afetará o custo e a disponibilidade do seu endpoint implantado. Use esta tabela para escolher um destino de computação apropriado.
Destino de computação | Utilizado para | Suporte de GPU | Description |
---|---|---|---|
Serviço Web local | Teste/depuração | Use para testes limitados e solução de problemas. A aceleração de hardware depende do uso de bibliotecas no sistema local. | |
Azure Machine Learning Kubernetes | Inferência em tempo real | Sim | Execute cargas de trabalho de inferência na nuvem. |
Azure Container Instances | Inferência em tempo real Recomendado apenas para fins de desenvolvimento/teste. |
Use para cargas de trabalho baseadas em CPU de baixa escala que exigem menos de 48 GB de RAM. Não requer que você gerencie um cluster. Adequado apenas para modelos com menos de 1 GB de tamanho. Suportado no designer. |
Nota
Ao escolher uma SKU de cluster, primeiro aumente a escala e, em seguida, diminua. Comece com uma máquina que tenha 150% da RAM que o seu modelo requer, perfile o resultado e encontre uma máquina que tenha o desempenho que você precisa. Depois de aprender isso, aumente o número de máquinas para atender à sua necessidade de inferência simultânea.
Nota
Os Pontos de Extremidade do Azure Machine Learning (v2) fornecem uma experiência de implantação aprimorada e mais simples. Os endpoints suportam cenários de inferência em tempo real e em lote. Os endpoints fornecem uma interface unificada para invocar e gerenciar implantações de modelo em todos os tipos de computação. Consulte O que são pontos de extremidade do Azure Machine Learning?.
Implantar na nuvem
Depois de confirmar que seu serviço funciona localmente e escolher um destino de computação remota, você estará pronto para implantar na nuvem.
Altere sua configuração de implantação para corresponder ao destino de computação escolhido, neste caso, Instâncias de Contêiner do Azure:
APLICA-SE A: Azure CLI ml extension v1
As opções disponíveis para uma configuração de implantação diferem dependendo do destino de computação escolhido.
{
"computeType": "aci",
"containerResourceRequirements":
{
"cpu": 0.5,
"memoryInGB": 1.0
},
"authEnabled": true,
"sslEnabled": false,
"appInsightsEnabled": false
}
Salve este arquivo como re-deploymentconfig.json
.
Para obter mais informações, consulte esta referência.
Implante seu serviço novamente:
APLICA-SE A: Azure CLI ml extension v1
Substitua bidaf_onnx:1
pelo nome do seu modelo e respetivo número de versão.
az ml model deploy -n myservice \
-m bidaf_onnx:1 \
--overwrite \
--ic inferenceconfig.json \
--dc re-deploymentconfig.json \
-g <resource-group> \
-w <workspace-name>
Para exibir os logs de serviço, use o seguinte comando:
az ml service get-logs -n myservice \
-g <resource-group> \
-w <workspace-name>
Ligue para o seu serviço Web remoto
Ao implantar remotamente, você pode ter a autenticação de chave habilitada. O exemplo abaixo mostra como obter sua chave de serviço com Python para fazer uma solicitação de inferência.
import requests
import json
from azureml.core import Webservice
service = Webservice(workspace=ws, name="myservice")
scoring_uri = service.scoring_uri
# If the service is authenticated, set the key or token
key, _ = service.get_keys()
# Set the appropriate headers
headers = {"Content-Type": "application/json"}
headers["Authorization"] = f"Bearer {key}"
# Make the request and display the response and logs
data = {
"query": "What color is the fox",
"context": "The quick brown fox jumped over the lazy dog.",
}
data = json.dumps(data)
resp = requests.post(scoring_uri, data=data, headers=headers)
print(resp.text)
print(service.get_logs())
Consulte o artigo sobre aplicativos cliente para consumir serviços da Web para obter mais exemplos de clientes em outros idiomas.
Como configurar e-mails no estúdio
Para começar a receber e-mails quando seu trabalho, ponto de extremidade online ou ponto de extremidade em lote estiver concluído ou se houver um problema (falha, cancelado), use as seguintes etapas:
- No estúdio do Azure ML, vá para configurações selecionando o ícone de engrenagem.
- Selecione a guia Notificações por e-mail.
- Alterne para ativar ou desativar notificações por e-mail para um evento específico.
Noções básicas sobre o estado do serviço
Durante a implantação do modelo, você pode ver a alteração do estado do serviço enquanto ele é totalmente implantado.
A tabela a seguir descreve os diferentes estados de serviço:
Estado do serviço Web | Description | Estado final? |
---|---|---|
Transição | O serviço está em processo de implantação. | Não |
Mau estado de funcionamento | O serviço foi implantado, mas está inacessível no momento. | Não |
Inescaldável | O serviço não pode ser implantado neste momento devido à falta de recursos. | Não |
Com falhas | O serviço falhou ao implantar devido a um erro ou falha. | Sim |
Bom estado de funcionamento | O serviço está íntegro e o ponto de extremidade está disponível. | Sim |
Gorjeta
Durante a implantação, as imagens do Docker para destinos de computação são criadas e carregadas do Azure Container Registry (ACR). Por padrão, o Aprendizado de Máquina do Azure cria uma ACR que usa a camada de serviço básica . Alterar o ACR do seu espaço de trabalho para o nível padrão ou premium pode reduzir o tempo necessário para criar e implantar imagens em seus destinos de computação. Para obter mais informações, veja Escalões de serviço do Azure Container Registry (ACR).
Nota
Se estiver a implementar um modelo no Azure Kubernetes Service (AKS), recomendamos que ative o Azure Monitor para esse cluster. Este procedimento ajudará a compreender o estado de funcionamento geral do cluster e a utilização dos recursos. Os seguintes recursos também poderão ser úteis:
- Verificar se existem eventos do Resource Health a afetar o cluster do AKS
- Diagnóstico do Azure Kubernetes Service
Se estiver a tentar implementar um modelo num cluster em mau estado de funcionamento ou sobrecarregado, poderão ocorrer problemas. Se precisar de ajuda para solucionar problemas de cluster do AKS, entre em contato com o Suporte do AKS.
Eliminar recursos
APLICA-SE A: Azure CLI ml extension v1
# Get the current model id
import os
stream = os.popen(
'az ml model list --model-name=bidaf_onnx --latest --query "[0].id" -o tsv'
)
MODEL_ID = stream.read()[0:-1]
MODEL_ID
az ml service delete -n myservice
az ml service delete -n myaciservice
az ml model delete --model-id=<MODEL_ID>
Para excluir um serviço Web implantado, use az ml service delete <name of webservice>
.
Para excluir um modelo registrado do seu espaço de trabalho, use az ml model delete <model id>
Leia mais sobre como excluir um serviço Web e excluir um modelo.
Próximos passos
- Resolver problemas de uma implementação com falhas
- Atualizar serviço Web
- Implantação com um clique para execução automatizada de ML no estúdio do Azure Machine Learning
- Utilizar o TLS para proteger um serviço Web através do Azure Machine Learning
- Monitore seus modelos do Azure Machine Learning com o Application Insights
- Criar alertas de eventos e gatilhos para implantações de modelo