Implementación de modelos de MLflow como servicios web de Azure

Aprenda con este artículo a implementar su modelo de MLflow como servicio web de Azure para aprovechar y aplicar las funcionalidades de detección del desfase de datos y de administración de modelos de Azure Machine Learning, y aplicarlas a los modelos de producción. Consulte MLflow y Azure Machine Learning (versión preliminar) para obtener otras integraciones de la funcionalidad de MLflow y Azure Machine Learning.

Azure Machine Learning ofrece configuraciones de implementación para:

  • Azure Container Instances (ACI), que es una opción adecuada para una implementación rápida de desarrollo y pruebas.
  • Azure Kubernetes Service (AKS), que es una opción adecuada para implementaciones de producción escalables.

Nota

Los puntos de conexión de Azure Machine Learning (versión preliminar) proporcionan una experiencia de implementación mejorada y más sencilla. Los puntos de conexión admiten escenarios de inferencia por lotes y en tiempo real. Los puntos de conexión proporcionan una interfaz unificada para invocar y administrar implementaciones de modelos entre tipos de proceso. Vea ¿Qué son los puntos de conexión de Azure Machine Learning (versión preliminar)?.

Sugerencia

La información de este documento está destinada principalmente a científicos de datos y desarrolladores que deseen implementar su modelo de MLflow en un punto de conexión de servicio web de Azure Machine Learning. Los administradores que estén interesados en la supervisión del uso de recursos y eventos desde Azure Machine Learning, como cuotas, ejecuciones de entrenamiento completadas o implementaciones de modelos completadas pueden consultar Supervisión de Azure Machine Learning.

Implementación de MLflow con Azure Machine Learning

MLflow es una biblioteca de código abierto para administrar el ciclo de vida de los experimentos de aprendizaje automático. Su integración con Azure Machine Learning permite administrar, además del entrenamiento del modelo, la fase de implementación del modelo de producción.

En el diagrama siguiente se muestra que, con la API de implementación de MLflow y Azure Machine Learning, se pueden implementar los modelos creados con marcos populares, como PyTorch, Tensorflow, scikit-learn, etc., como servicios web de Azure y administrarlos en el área de trabajo.

 deploy mlflow models with azure machine learning

Requisitos previos

Implementación en Azure Container Instances (ACI)

Para implementar el modelo de MLflow en un servicio web de Azure Machine Learning, se debe configurar con el URI de seguimiento de MLflow para la conexión con Azure Machine Learning.

Para implementar en ACI, no es necesario definir ninguna configuración de implementación; el servicio tendrá como valor predeterminado una implementación de ACI cuando no se proporcione ninguna configuración. A continuación, registre e implemente el modelo en un paso mediante el método deploy de MLflow para 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")

Personalización de la configuración de implementación

Si prefiere no usar los valores predeterminados, puede configurar la configuración de implementación con un archivo JSON de configuración de implementación que use parámetros del método deploy_configuration() como referencia.

Para el archivo JSON de configuración de implementación, cada uno de los parámetros de configuración de implementación debe definirse en forma de diccionario. A continuación se muestra un ejemplo. Más información sobre lo que puede contener el archivo JSON de configuración de implementación.

{"computeType": "aci",
 "containerResourceRequirements": {"cpu": 1, "memoryInGB": 1},
 "location": "eastus2"
}

A continuación, el archivo JSON se puede usar para crear la implementación.

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

client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path),
                         config=test_config,
                         name="mlflow-test-aci")                                       

Implementación en Azure Kubernetes Service (AKS)

Para implementar el modelo de MLflow en un servicio web de Azure Machine Learning, se debe configurar con el URI de seguimiento de MLflow para la conexión con Azure Machine Learning.

Para implementar en AKS, cree primero un clúster de AKS. Cree un clúster de AKS mediante el método ComputeTarget.create(). La creación de un clúster puede tardar entre 20 y 25 minutos.

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)

Cree un archivo JSON de configuración de implementación con los valores del método deploy_configuration() como referencia. Cada uno de los parámetros de configuración de implementación debe definirse como un diccionario. A continuación, se proporciona un ejemplo:

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

A continuación, registre e implemente el modelo en un paso mediante el cliente de implementación de 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")

La implementación del servicio puede tardar varios minutos.

Limpieza de recursos

Si no tiene previsto usar el servicio web implementado, use service.delete() para eliminarlo del cuaderno. Para más información, consulte la documentación de Webservice.delete().

Cuadernos de ejemplo

En MLflow con cuadernos de Azure Machine Learning se demuestran y se analizan con mayor profundidad los conceptos presentados en este artículo.

Nota

Puede encontrar un repositorio de ejemplos administrado por la comunidad mediante mlflow en https://github.com/Azure/azureml-examples.

Pasos siguientes