Implementar modelos MLflow como serviços web Azure

Neste artigo, aprenda a implementar o seu modelo MLflow como um serviço web Azure, para que possa aproveitar e aplicar as capacidades de gestão de modelos e de deteção de deriva de dados da Azure Machine Learning para os seus modelos de produção.

A Azure Machine Learning oferece configurações de implementação para:

  • Azure Container Instance (ACI) que é uma escolha adequada para uma rápida implantação de teste de dev.
  • Serviço Azure Kubernetes (AKS) que é recomendado para implantações de produção escalável.

Dica

A informação neste documento é principalmente para cientistas de dados e desenvolvedores que querem implementar o seu modelo MLflow para um ponto final de serviço web Azure Machine Learning. Se você é um administrador interessado em monitorizar a utilização de recursos e eventos da Azure Machine Learning, tais como quotas, execuções de formação completas ou implementações de modelos concluídas, consulte Monitoring Azure Machine Learning.

MLflow com implementação de aprendizagem automática Azure

MLflow é uma biblioteca de código aberto para gerir o ciclo de vida das suas experiências de aprendizagem automática. A sua integração com a Azure Machine Learning permite-lhe estender esta gestão para além da formação de modelos até à fase de implantação do seu modelo de produção.

O diagrama seguinte demonstra que com o MLflow implementar API e Azure Machine Learning, você pode implementar modelos criados com estruturas populares, como PyTorch, Tensorflow, scikit-learn, etc., como serviços web Azure e geri-los no seu espaço de trabalho.

 implementar modelos de fluxo de mlflow com aprendizagem de máquina azul

Pré-requisitos

Implantar para a instância do contentor Azure (ACI)

Para implementar o seu modelo MLflow num serviço web Azure Machine Learning, o seu modelo tem de ser configurado com o MLflow Tracking URI para se conectar com a Azure Machine Learning.

Para ser implantado no ACI, não precisa de definir nenhuma configuração de implementação, o serviço irá por defeito para uma implementação de ACI quando não for fornecida uma config.

Nota

Pode configurar a sua configuração de implementação com os valores do método deploy_configuration() como referência se quiser personalizar os seus parâmetros de implantação.

from azureml.core.webservice import AciWebservice, Webservice

# Set the model path to the model folder created by your run
model_path = "model"

# Configure 
aci_config = AciWebservice.deploy_configuration(cpu_cores=1, 
                                                memory_gb=1, 
                                                tags={'method' : 'sklearn'}, 
                                                description='Diabetes model',
                                                location='eastus2')

Em seguida, registe e implemente o modelo num passo com o método de implementação da MLflow para a Azure Machine Learning.

from mlflow.deployments import get_deploy_client

# set the tracking uri as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())

# set the model path 
model_path = "model"

# define the model path and the name is the service name
# the model gets registered automatically and a name is autogenerated using the "name" parameter below 
client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path),
                         name="mlflow-test-aci")

Implementar para o Serviço Azure Kubernetes (AKS)

Para implementar o seu modelo MLflow num serviço web Azure Machine Learning, o seu modelo tem de ser configurado com o MLflow Tracking URI para se conectar com a Azure Machine Learning.

Para implantar para aKS, primeiro crie um cluster AKS. Crie um cluster AKS utilizando o método ComputeTarget.create(). Pode levar 20 a 25 minutos para criar um novo cluster.

from azureml.core.compute import AksCompute, ComputeTarget

# Use the default configuration (can also provide parameters to customize)
prov_config = AksCompute.provisioning_configuration()

aks_name = 'aks-mlflow'

# Create the cluster
aks_target = ComputeTarget.create(workspace=ws, 
                                  name=aks_name, 
                                  provisioning_configuration=prov_config)

aks_target.wait_for_completion(show_output = True)

print(aks_target.provisioning_state)
print(aks_target.provisioning_errors)

Crie um json config de implementação utilizando deploy_configuration() valores do método como referência. Cada um dos parâmetros de configuração de implantação simplesmente precisa ser definido como um dicionário. Aqui está um exemplo abaixo:

{'computeType': 'aks', 'computeTargetName': 'aks-mlflow'}

Em seguida, registe e implemente o modelo num passo com o cliente de implantaçãoda MLflow.

from mlflow.deployments import get_deploy_client

# set the tracking uri as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())

# set the model path 
model_path = "model"

# set the deployment config
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}

# define the model path and the name is the service name
# the model gets registered automatically and a name is autogenerated using the "name" parameter below 
client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path),
                         config=test_config,
                         name="mlflow-test-aci")

A colocação de serviço pode demorar vários minutos.

Limpar os recursos

Se não pretender utilizar o seu serviço web implantado, service.delete() utilize-o para o eliminar do seu caderno. Para obter mais informações, consulte a documentação para WebService.delete().

Blocos de notas de exemplo

O MLflow com os cadernos Azure Machine Learning demonstram e expandem-se sobre conceitos apresentados neste artigo.

Nota

Um repositório de exemplos orientado pela comunidade pode ser encontrado em https://github.com/Azure/azureml-examples .

Passos seguintes