Partilhar via


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:

  1. Registar o modelo.
  2. Prepare um script de entrada.
  3. Prepare uma configuração de inferência.
  4. Implante o modelo localmente para garantir que tudo funcione.
  5. Escolha um destino de computação.
  6. Implante o modelo na nuvem.
  7. 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-mlAzure 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 mlextensã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 registero , 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 registero , 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:

  1. Carregando seu modelo (usando uma função chamada init())
  2. 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:

  1. No estúdio do Azure ML, vá para configurações selecionando o ícone de engrenagem.
  2. Selecione a guia Notificações por e-mail.
  3. Alterne para ativar ou desativar notificações por e-mail para um evento específico.

Captura de ecrã das definições do estúdio do Azure ML no separador Notificações por e-mail.

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:

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