Implantar modelos de aprendizado de máquina no AzureDeploy machine learning models to Azure

Saiba como implantar o aprendizado de máquina ou o modelo de aprendizado profundo como um serviço Web na nuvem do Azure.Learn how to deploy your machine learning or deep learning model as a web service in the Azure cloud. Você também pode implantar em dispositivos Azure IoT Edge.You can also deploy to Azure IoT Edge devices.

O fluxo de trabalho é semelhante, independentemente do local de implantação do seu modelo:The workflow is similar no matter where you deploy your model:

  1. Registre o modelo (opcional, veja abaixo).Register the model (optional, see below).
  2. Prepare uma configuração de inferência (a menos que não use a implantação sem código).Prepare an inference configuration (unless using no-code deployment).
  3. Prepare um script de entrada (a menos que use a implantação sem código).Prepare an entry script (unless using no-code deployment).
  4. Escolha um destino de computação.Choose a compute target.
  5. Implante o modelo no destino de computação.Deploy the model to the compute target.
  6. Teste o serviço Web resultante.Test the resulting web service.

Para obter mais informações sobre os conceitos envolvidos no fluxo de trabalho de implantação do Machine Learning, consulte gerenciar, implantar e monitorar modelos com Azure Machine Learning.For more information on the concepts involved in the machine learning deployment workflow, see Manage, deploy, and monitor models with Azure Machine Learning.

Pré-requisitosPrerequisites

Conectar-se ao workspaceConnect to your workspace

Siga as instruções na documentação do CLI do Azure para definir seu contexto de assinatura.Follow the directions in the Azure CLI documentation for setting your subscription context.

Em seguida, faça o:Then do:

az ml workspace list --resource-group=<my resource group>

para ver os espaços de trabalho aos quais você tem acesso.to see the workspaces you have access to.

Registrar seu modelo (opcional)Register your model (optional)

Um modelo registrado é um contêiner lógico para um ou mais arquivos que compõem seu modelo.A registered model is a logical container for one or more files that make up your model. Por exemplo, se você tiver um modelo armazenado em vários arquivos, poderá registrá-los como um único modelo no espaço de trabalho.For example, if you have a model that's stored in multiple files, you can register them as a single model in the workspace. Depois de registrar os arquivos, você pode baixar ou implantar o modelo registrado e receber todos os arquivos que você registrou.After you register the files, you can then download or deploy the registered model and receive all the files that you registered.

Dica

O registro de um modelo para acompanhamento de versão é recomendado, mas não obrigatório.Registering a model for version tracking is recommended but not required. Se preferir sem registrar um modelo, você precisará especificar um diretório de origem em seu InferenceConfig ou inferenceconfig.js e garantir que seu modelo resida nesse diretório de origem.If you would rather proceed without registering a model, you will need to specify a source directory in your InferenceConfig or inferenceconfig.json and ensure your model resides within that source directory.

Dica

Ao registrar um modelo, você fornece o caminho de um local de nuvem (de uma execução de treinamento) ou um diretório local.When you register a model, you provide the path of either a cloud location (from a training run) or a local directory. Esse caminho é apenas para localizar os arquivos para upload como parte do processo de registro.This path is just to locate the files for upload as part of the registration process. Ele não precisa corresponder ao caminho usado no script de entrada.It doesn't need to match the path used in the entry script. Para obter mais informações, consulte Localizar arquivos de modelo em seu script de entrada.For more information, see Locate model files in your entry script.

Importante

Ao usar filtrar por Tags opção na página modelos do Azure Machine Learning Studio, em vez de usar TagName : TagValue os clientes devem usar TagName=TagValue (sem espaço)When using Filter by Tags option on the Models page of Azure Machine Learning Studio, instead of using TagName : TagValue customers should use TagName=TagValue (without space)

Os exemplos a seguir demonstram como registrar um modelo.The following examples demonstrate how to register a model.

Registrar um modelo de uma execução de treinamento do Azure MLRegister a model from an Azure ML training run

az ml model register -n sklearn_mnist  --asset-path outputs/sklearn_mnist_model.pkl  --experiment-name myexperiment --run-id myrunid --tag area=mnist

Dica

Se você receber uma mensagem de erro informando que a extensão ml não está instalada, use o seguinte comando para instalá-la:If you get an error message stating that the ml extension isn't installed, use the following command to install it:

az extension add -n azure-cli-ml

O --asset-path parâmetro refere-se ao local da nuvem do modelo.The --asset-path parameter refers to the cloud location of the model. Neste exemplo, o caminho de um único arquivo é usado.In this example, the path of a single file is used. Para incluir vários arquivos no registro do modelo, defina --asset-path para o caminho de uma pasta que contém os arquivos.To include multiple files in the model registration, set --asset-path to the path of a folder that contains the files.

Registrar um modelo de um arquivo localRegister a model from a local file

az ml model register -n onnx_mnist -p mnist/model.onnx

Para incluir vários arquivos no registro do modelo, defina -p para o caminho de uma pasta que contém os arquivos.To include multiple files in the model registration, set -p to the path of a folder that contains the files.

Para obter mais informações sobre az ml model register o, consulte a documentação de referência.For more information on az ml model register, consult the reference documentation.

Definir um script de entradaDefine an entry script

O script de entrada recebe os dados enviados para um serviço Web implantado e os transmite ao modelo.The entry script receives data submitted to a deployed web service and passes it to the model. Em seguida, ele envia de volta ao cliente a resposta retornada pelo modelo.It then takes the response returned by the model and returns that to the client. O script é específico para seu modelo.The script is specific to your model. Ele deve entender os dados esperados e retornados pelo modelo.It must understand the data that the model expects and returns.

As duas coisas que você precisa realizar em seu script de entrada são:The two things you need to accomplish in your entry script are:

  1. Carregando seu modelo (usando uma função chamada init() )Loading your model (using a function called init())
  2. Executando o modelo em dados de entrada (usando uma função chamada run() )Running your model on input data (using a function called run())

Vamos percorrer essas etapas detalhadamente.Let's go through these steps in detail.

Gravando init ()Writing init()

Carregando um modelo registradoLoading a registered model

Os modelos registrados são armazenados em um caminho apontado por uma variável de ambiente chamada AZUREML_MODEL_DIR .Your registered models are stored at a path pointed to by an environment variable called AZUREML_MODEL_DIR. Para obter mais informações sobre a estrutura de diretório exata, consulte Localizar arquivos de modelo em seu script de entradaFor more information on the exact directory structure, see Locate model files in your entry script

Carregando um modelo localLoading a local model

Se você tiver optado por registrar seu modelo e passar seu modelo como parte do diretório de origem, poderá lê-lo como faria localmente, passando o caminho para o modelo relativo ao script de pontuação.If you opted against registering your model and passed your model as part of your source directory, you can read it in like you would locally, by passing the path to the model relative to your scoring script. Por exemplo, se você tivesse um diretório estruturado como:For example, if you had a directory structured as:


- source_dir
    - score.py
    - models
        - model1.onnx

Você pode carregar seus modelos com o seguinte código Python:you could load your models with the following Python code:

import os

model = open(os.path.join('.', 'models', 'model1.onnx'))

Gravação de execução ()Writing run()

run() é executado toda vez que seu modelo recebe uma solicitação de Pontuação e espera que o corpo da solicitação seja um documento JSON com a seguinte estrutura:run() is executed every time your model receives a scoring request, and expects the body of the request to be a JSON document with the following structure:

{
    "data": <model-specific-data-structure>
}

A entrada para run() é uma cadeia de caracteres do Python que contém o que segue a chave "dados".The input to run() is a Python string containing whatever follows the "data" key.

O exemplo a seguir demonstra como carregar um modelo scikit-Learn registrado e pontua-lo com os dados do numpy:The following example demonstrates how to load a registered scikit-learn model and score it with numpy data:

import json
import numpy as np
import os
from sklearn.externals import joblib


def init():
    global model
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    model = joblib.load(model_path)

def run(data):
    try:
        data = np.array(json.loads(data))
        result = model.predict(data)
        # You can return any data type, as long as it is JSON serializable.
        return result.tolist()
    except Exception as e:
        error = str(e)
        return error

Para obter exemplos mais avançados, incluindo dados de geração de esquema Swagger automático e binário (ou seja, imagem), leia o artigo sobre criação de script de entrada avançadaFor more advanced examples, including automatic Swagger schema generation and binary (i.e. image) data, read the article on advanced entry script authoring

Definir uma configuração de inferênciaDefine an inference configuration

Uma configuração de inferência descreve como configurar o serviço Web que contém seu modelo.An inference configuration describes how to set up the web-service containing your model. Ele é usado posteriormente, quando você implanta o modelo.It's used later, when you deploy the model.

Uma configuração de inferência mínima pode ser escrita como:A minimal inference configuration can be written as:

{
    "entryScript": "score.py",
    "sourceDirectory": "./working_dir"
}

Isso especifica que a implantação do Machine Learning usará o arquivo score.py no ./working_dir diretório para processar as solicitações de entrada.This specifies that the machine learning deployment will use the file score.py in the ./working_dir directory to process incoming requests.

Consulte este artigo para obter uma discussão mais completa sobre as configurações de inferência.See this article for a more thorough discussion of inference configurations.

Dica

Para obter informações sobre como usar uma imagem personalizada do Docker com uma configuração de inferência, consulte como implantar um modelo usando uma imagem personalizada do Docker.For information on using a custom Docker image with an inference configuration, see How to deploy a model using a custom Docker image.

Escolher um destino de computaçãoChoose a compute target

O destino de computação que você usa para hospedar seu modelo afetará o custo e a disponibilidade do ponto de extremidade implantado.The compute target you use to host your model will affect the cost and availability of your deployed endpoint. Use esta tabela para escolher um destino de computação apropriado.Use this table to choose an appropriate compute target.

Destino de computaçãoCompute target Usado paraUsed for Suporte de GPUGPU support Suporte de FPGAFPGA support DescriçãoDescription
Serviço Web localLocal web service Teste/depuraçãoTesting/debugging     Use para teste e solução de problemas limitados.Use for limited testing and troubleshooting. A aceleração de hardware depende do uso de bibliotecas no sistema local.Hardware acceleration depends on use of libraries in the local system.
AKS (Serviço de Kubernetes do Azure)Azure Kubernetes Service (AKS) Inferência em tempo realReal-time inference Sim (implantação do serviço Web)Yes (web service deployment) SimYes Use para implantações de produção em grande escala.Use for high-scale production deployments. Fornece tempo de resposta rápido e dimensionamento automático do serviço implantado.Provides fast response time and autoscaling of the deployed service. O dimensionamento automático do cluster não tem suporte por meio do SDK do Azure Machine Learning.Cluster autoscaling isn't supported through the Azure Machine Learning SDK. Para alterar os nós no cluster do AKS, use a interface do usuário do cluster do AKS no portal do Azure.To change the nodes in the AKS cluster, use the UI for your AKS cluster in the Azure portal.

Com suporte no designer.Supported in the designer.
Instâncias de Contêiner do AzureAzure Container Instances Teste ou desenvolvimentoTesting or development     Use para cargas de trabalho baseadas em CPU de baixa escala que exigem menos de 48 GB de RAM.Use for low-scale CPU-based workloads that require less than 48 GB of RAM.

Com suporte no designer.Supported in the designer.
Clusters de cálculo do Azure Machine LearningAzure Machine Learning compute clusters Inferência de loteBatch inference Sim (pipeline de machine learning)Yes (machine learning pipeline)   Executar a pontuação de lote em computação sem servidor.Run batch scoring on serverless compute. Compatível com VMs normais e de baixa prioridade.Supports normal and low-priority VMs. Não há suporte para inferência em tempo real.No support for realtime inference.

Observação

Embora os destinos de computação como local, Computação do Azure Machine Learning e clusters de cálculo do Azure Machine Learning sejam compatíveis com GPU para treinamento e experimentação, o uso de GPU para inferência quando implantada como um serviço Web só é compatível com o AKS.Although compute targets like local, Azure Machine Learning compute, and Azure Machine Learning compute clusters support GPU for training and experimentation, using GPU for inference when deployed as a web service is supported only on AKS.

O uso de uma GPU para inferência quando a pontuação é feita com um pipeline de machine learning só é compatível com a Computação do Azure Machine Learning.Using a GPU for inference when scoring with a machine learning pipeline is supported only on Azure Machine Learning compute.

Ao escolher uma SKU de cluster, primeiro escale verticalmente e, em seguida, escale horizontalmente. Comece com um computador que tenha 150% da RAM de que seu modelo requer, perfile o resultado e localize um computador que tenha o desempenho de que você precisa.When choosing a cluster SKU, first scale up and then scale out. Start with a machine that has 150% of the RAM your model requires, profile the result and find a machine that has the performance you need. Depois de aprender isso, aumente o número de computadores para atender à sua necessidade de inferência simultânea.Once you've learned that, increase the number of machines to fit your need for concurrent inference.

Observação

  • As instâncias de contêiner são adequadas somente para modelos pequenos com menos de 1 GB de tamanho.Container instances are suitable only for small models less than 1 GB in size.
  • Use clusters do AKS de nó único para desenvolvimento/teste de modelos maiores.Use single-node AKS clusters for dev/test of larger models.

Definir uma configuração de implantaçãoDefine a deployment configuration

As opções disponíveis para uma configuração de implantação diferem de acordo com o destino de computação escolhido.The options available for a deployment configuration differ depending on the compute target you choose.

As entradas no documento deploymentconfig.json são mapeadas para os parâmetros de LocalWebservice.deploy_configuration.The entries in the deploymentconfig.json document map to the parameters for LocalWebservice.deploy_configuration. A seguinte tabela descreve o mapeamento entre as entidades no documento JSON e os parâmetros do método:The following table describes the mapping between the entities in the JSON document and the parameters for the method:

Entidade JSONJSON entity Parâmetro de métodoMethod parameter DescriçãoDescription
computeType NANA O destino de computação.The compute target. Para destinos locais, o valor precisa ser local.For local targets, the value must be local.
port port A porta local na qual expor o ponto de extremidade HTTP do serviço.The local port on which to expose the service's HTTP endpoint.

O seguinte JSON é um exemplo de configuração de implantação a ser usada com a CLI:This JSON is an example deployment configuration for use with the CLI:

{
    "computeType": "local",
    "port": 32267
}

Para obter mais informações, consulte esta referência.For more information, see this reference.

Implantar o modelo de aprendizado de máquinaDeploy your machine learning model

Agora você está pronto para implantar seu modelo.You are now ready to deploy your model.

Usando um modelo registradoUsing a registered model

Se você registrou seu modelo em seu espaço de trabalho Azure Machine Learning, substitua "MyModel: 1" pelo nome do seu modelo e seu número de versão.If you registered your model in your Azure Machine Learning workspace, replace "mymodel:1" with the name of your model and its version number.

az ml model deploy -m mymodel:1 --ic inferenceconfig.json --dc deploymentconfig.json

Usando um modelo localUsing a local model

Se preferir não registrar seu modelo, você pode passar o parâmetro "sourceDirectory" no seu inferenceconfig.jspara especificar um diretório local a partir do qual servir seu modelo.If you would prefer not to register your model, you can pass the "sourceDirectory" parameter in your inferenceconfig.json to specify a local directory from which to serve your model.

az ml model deploy --ic inferenceconfig.json --dc deploymentconfig.json

Compreendendo o estado do serviçoUnderstanding service state

Durante a implantação do modelo, você pode ver a alteração do estado do serviço durante a implantação completa.During model deployment, you may see the service state change while it fully deploys.

A tabela a seguir descreve os diferentes Estados de serviço:The following table describes the different service states:

Estado WebServiceWebservice state DescriçãoDescription Estado final?Final state?
TransiçãoTransitioning O serviço está em processo de implantação.The service is in the process of deployment. NãoNo
UnhealthyUnhealthy O serviço foi implantado, mas está inacessível no momento.The service has deployed but is currently unreachable. NãoNo
Não agendávelUnschedulable O serviço não pode ser implantado no momento devido à falta de recursos.The service cannot be deployed at this time due to lack of resources. NãoNo
Com falhaFailed O serviço falhou ao ser implantado devido a um erro ou falha.The service has failed to deploy due to an error or crash. SimYes
ÍntegrosHealthy O serviço está íntegro e o ponto de extremidade está disponível.The service is healthy and the endpoint is available. SimYes

Dica

Durante a implantação, as imagens do Docker para destinos de computação são criadas e carregadas do ACR (registro de contêiner do Azure).When deploying, Docker images for compute targets are built and loaded from Azure Container Registry (ACR). Por padrão, Azure Machine Learning cria um ACR que usa a camada de serviço básica .By default, Azure Machine Learning creates an ACR that uses the basic service tier. Alterar o ACR para o seu espaço de trabalho para a camada Standard ou Premium pode reduzir o tempo necessário para criar e implantar imagens em seus destinos de computação.Changing the ACR for your workspace to standard or premium tier may reduce the time it takes to build and deploy images to your compute targets. Para obter mais informações, confira Níveis de serviço do Registro de Contêiner do Azure.For more information, see Azure Container Registry service tiers.

Observação

Se você estiver implantando um modelo no AKS (serviço kubernetes do Azure), aconselharemos a habilitar Azure monitor para esse cluster.If you are deploying a model to Azure Kubernetes Service (AKS), we advise you enable Azure Monitor for that cluster. Isso ajudará você a entender a integridade geral do cluster e o uso de recursos.This will help you understand overall cluster health and resource usage. Você também pode encontrar os seguintes recursos úteis:You might also find the following resources useful:

Se você estiver tentando implantar um modelo em um cluster não íntegro ou sobrecarregado, espera-se que eles tenham problemas.If you are trying to deploy a model to an unhealthy or overloaded cluster, it is expected to experience issues. Se precisar de ajuda para solucionar problemas de cluster AKS, entre em contato com o suporte do AKS.If you need help troubleshooting AKS cluster problems please contact AKS Support.

Inferência de loteBatch inference

Azure Machine Learning destinos de computação são criados e gerenciados pelo Azure Machine Learning.Azure Machine Learning Compute targets are created and managed by Azure Machine Learning. Eles podem ser usados para previsão de lote de pipelines de Azure Machine Learning.They can be used for batch prediction from Azure Machine Learning pipelines.

Para obter uma explicação sobre a inferência de lote com Azure Machine Learning computação, consulte como executar previsões de lote.For a walkthrough of batch inference with Azure Machine Learning Compute, see How to run batch predictions.

Inferência de IoT EdgeIoT Edge inference

O suporte para a implantação no Edge está em versão prévia.Support for deploying to the edge is in preview. Para obter mais informações, consulte implantar Azure Machine Learning como um módulo IOT Edge.For more information, see Deploy Azure Machine Learning as an IoT Edge module.

Excluir recursosDelete resources

Para excluir um WebService implantado, use az ml service <name of webservice> .To delete a deployed webservice, use az ml service <name of webservice>.

Para excluir um modelo registrado do seu espaço de trabalho, use az ml model delete <model id>To delete a registered model from your workspace, use az ml model delete <model id>

Leia mais sobre como excluir um WebService e excluir um modelo.Read more about deleting a webservice and deleting a model.

Próximas etapasNext steps