Implantar um modelo no Azure Machine Learning
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:
- Registre um modelo treinado.
- Defina uma configuração de inferência.
- Defina uma configuração de implantação.
- 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.