Implantar um modelo no Azure Machine Learning

Concluído

Como discutimos na unidade anterior, você pode implantar um modelo em vários tipos de destino de computação: incluindo computação local, uma Instância de Contêiner do Azure (ACI), um cluster do Serviço Kubernetes do Azure (AKS) ou um módulo de Internet das Coisas (IoT). O Azure Machine Learning utiliza contentores como mecanismo de implementação, ao empacotar o modelo e o código para utilizá-lo como uma imagem que pode ser implementada num contentor no destino de computação escolhido.

Para implantar um modelo como um serviço Web de inferência, você deve executar as seguintes tarefas:

  1. Registre um modelo treinado.
  2. Defina uma configuração de inferência.
  3. Defina uma configuração de implantação.
  4. Implante o modelo.

1. Registre um modelo treinado

Depois de preparar um modelo com êxito, tem de o registar na sua área de trabalho do Azure Machine Learning. O seu serviço em tempo real poderá então carregar o modelo quando for necessário.

Para registar um modelo a partir de um ficheiro local, pode utilizar o método register do objeto Model, como apresentado aqui:

from azureml.core import Model

model = Model.register(workspace=ws, 
                       model_name='nyc-taxi-fare',
                       model_path='model.pkl', # local path
                       description='Model to predict taxi fares in NYC.')

2. Definir uma configuração de inferência

O modelo será implantado como um serviço que consiste em:

  • Um script para carregar o modelo e devolver previsões para os dados submetidos.
  • Um ambiente no qual o script será executado.

Por isso, tem de definir o script e o ambiente para o serviço.

Criar um Script de Entrada

Crie o script de entrada (por vezes referido como o script de classificação) para o serviço como um ficheiro Python (.py). Tem de incluir duas funções:

  • init(): Chamado quando o serviço é inicializado.
  • run(raw_data): Chamado quando novos dados são enviados ao serviço.

Normalmente, utiliza a função init para carregar o modelo a partir do registo do modelo e utiliza a função run para gerar previsões a partir dos dados de entrada. O seguinte script de exemplo mostra este padrão:

import json
import joblib
import numpy as np
from azureml.core.model import Model

# Called when the service is loaded
def init():
    global model
    # Get the path to the registered model file and load it
    model_path = Model.get_model_path('nyc-taxi-fare')
    model = joblib.load(model_path)

# Called when a request is received
def run(raw_data):
    # Get the input data as a numpy array
    data = np.array(json.loads(raw_data)['data'])
    # Get a prediction from the model
    predictions = model.predict(data)
    # Return the predictions as any JSON serializable format
    return predictions.tolist()

Criar um Ambiente

Os ambientes do Azure Machine Learning são um encapsulamento do ambiente onde o seu treinamento de aprendizado de máquina acontece. Eles definem pacotes Python, variáveis de ambiente, configurações do Docker e outros atributos de forma declarativa. O trecho de código abaixo mostra um exemplo de como você pode criar um ambiente para sua implantação:

from azureml.core import Environment
from azureml.core.environment import CondaDependencies

my_env_name="nyc-taxi-env"
myenv = Environment.get(workspace=ws, name='AzureML-Minimal').clone(my_env_name)
conda_dep = CondaDependencies()
conda_dep.add_pip_package("numpy==1.18.1")
conda_dep.add_pip_package("pandas==1.1.5")
conda_dep.add_pip_package("joblib==0.14.1")
conda_dep.add_pip_package("scikit-learn==0.24.1")
conda_dep.add_pip_package("sklearn-pandas==2.1.0")
myenv.python.conda_dependencies=conda_dep

Combinar o Script e o Ambiente numa InferenceConfig

Depois de criar o script de entrada e o ambiente, você pode combiná-los em um InferenceConfig para o serviço da seguinte forma:

from azureml.core.model import InferenceConfig

from azureml.core.model import InferenceConfig
inference_config = InferenceConfig(entry_script='score.py', 
                                   source_directory='.', 
                                   environment=myenv)

3. Definir uma configuração de implantação

Agora que tem o script de entrada e o ambiente, precisa de configurar a computação para a qual o serviço será implementado. Se estiver a implementar para um cluster AKS, tem de criar o cluster e um destino de computação para o mesmo antes de implementar:

from azureml.core.compute import ComputeTarget, AksCompute

cluster_name = 'aks-cluster'
compute_config = AksCompute.provisioning_configuration(location='eastus')
production_cluster = ComputeTarget.create(ws, cluster_name, compute_config)
production_cluster.wait_for_completion(show_output=True)

Com o destino de computação criado, pode agora definir a configuração de implementação, que define a especificação de computação específica do destino para a implementação em contentor:

from azureml.core.webservice import AksWebservice

deploy_config = AksWebservice.deploy_configuration(cpu_cores = 1,
                                                   memory_gb = 1)

O código para configurar uma implementação de ACI é semelhante, exceto pelo facto de não precisar de criar explicitamente um destino de computação de ACI e ter de utilizar uma classe deploy_configuration a partir do espaço de nomes azureml.core.webservice.AciWebservice. Da mesma forma, pode utilizar o espaço de nomes azureml.core.webservice.LocalWebservice para configurar um serviço local baseado em Docker.

4. Implante o modelo

Depois de toda a configuração estar preparada, pode implementar o modelo. A forma mais fácil de o fazer é chamar o método deploy da classe Model, do seguinte modo:

from azureml.core.model import Model

service = Model.deploy(workspace=ws,
                       name = 'nyc-taxi-service',
                       models = [model],
                       inference_config = inference_config,
                       deployment_config = deploy_config,
                       deployment_target = production_cluster)
service.wait_for_deployment(show_output = True)

Para serviços de ACI ou locais, pode omitir o parâmetro deployment_target (ou defini-lo para None).

Nota

Para obter mais informações: Para obter mais informações sobre como implantar modelos com o Azure Machine Learning, consulte Implantar modelos com o Azure Machine Learning na documentação.