Seguimiento de los experimentos de aprendizaje automático de Azure Databricks con MLflow y Azure Machine Learning

MLflow es una biblioteca de código abierto para administrar el ciclo de vida de los experimentos de aprendizaje automático. Puede usar MLflow para integrar Azure Databricks con Azure Machine Learning para asegurarse de obtener lo mejor de ambos productos.

En este artículo, aprenderá lo siguiente:

Requisitos previos

Consulte qué permisos de acceso necesita para realizar las operaciones de MLflow con el área de trabajo.

Cuadernos de ejemplo

En Modelos de entrenamiento en Azure Databricks e implementación en el repositorio de Azure Machine Learning se muestra cómo entrenar modelos en Azure Databricks e implementarlos en Azure Machine Learning. También describe cómo realizar el seguimiento de los experimentos y modelos con la instancia de MLflow en Azure Databricks. Describe cómo utilizar Azure Machine Learning para la implementación.

Instalar bibliotecas

Para instalar bibliotecas en su clúster:

  1. Vaya a la pestaña Bibliotecas y seleccione Instalar nueva.

    Captura de pantalla mostrando mlflow con azure databricks.

  2. En el campo Paquete, escriba azureml-mlflow y seleccione Instalar. Repita este paso según sea necesario para instalar otros paquetes en su clúster para su experimento.

    Captura de pantalla mostrando el Azure DB instalar biblioteca mlflow.

Seguimiento de las ejecuciones de Azure Databricks con MLflow

Puede configurar Azure Databricks para rastrear experimentos utilizando MLflow de dos maneras:

Por defecto, cuando vincula su área de trabajo de Azure Databricks, se configura el seguimiento dual para usted.

Doble vía sobre Azure Databricks y Azure Machine Learning

La vinculación de su área de trabajo de Azure Databricks con su área de trabajo de Azure Machine Learning le permite realizar un seguimiento de los datos del experimento en el área de trabajo de Azure Machine Learning y en el área de trabajo de Azure Databricks al mismo tiempo. Esta configuración se denomina Seguimiento doble.

Actualmente no se admite el seguimiento doble en un área de trabajo de Azure Machine Learning habilitada para los vínculos privados. Configure el seguimiento exclusivo con el área de trabajo de Azure Machine Learning en su lugar.

El seguimiento dual no se admite actualmente en Microsoft Azure operado por 21Vianet. Configure el seguimiento exclusivo con el área de trabajo de Azure Machine Learning en su lugar.

Para vincular su área de trabajo Azure Databricks a un área de trabajo Azure Machine Learning nueva o existente:

  1. Inicie sesión en Azure Portal.

  2. Vaya a la página de Información general de su área de trabajo de Azure Databricks.

  3. Seleccione Vincular área de trabajo de Azure Machine Learning.

    La captura de pantalla muestra la opción Vincular áreas de trabajo de Azure Databricks y Azure Machine Learning.

Una vez que haya vinculado su área de trabajo Azure Databricks con su área de trabajo Azure Machine Learning, el seguimiento de MLflow se realiza automáticamente en los siguientes lugares:

  • El área de trabajo vinculada de Azure Machine Learning.
  • Su área de trabajo original de Azure Databricks.

Después, puede usar MLflow en Azure Databricks de la misma manera que acostumbra a usarlo. El siguiente ejemplo establece el nombre del experimento como es habitual en Azure Databricks e inicia el registro de algunos parámetros.

import mlflow 

experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}" 
mlflow.set_experiment(experimentName) 

with mlflow.start_run():
   mlflow.log_param('epochs', 20)
   pass

Nota:

A diferencia del seguimiento, los registros de modelos no permiten registrar modelos al mismo tiempo en Azure Machine Learning y Azure Databricks. Para más información, consulte Registrar modelos en el registro con MLflow.

Seguimiento exclusivo del área de trabajo Azure Machine Learning

Si prefiere administrar los experimentos con seguimiento en una ubicación centralizada, puede establecer el seguimiento de MLflow para que solo realice el seguimiento en el área de trabajo de Azure Machine Learning. Esta configuración tiene la ventaja de habilitar una forma más sencilla para la implementación con las opciones de implementación de Azure Machine Learning.

Configure el URI de seguimiento de MLflow para que apunte exclusivamente a Azure Machine Learning, como se muestra en el siguiente ejemplo:

Configurar URI de seguimiento

  1. Obtenga el URI de seguimiento de su área de trabajo.

    SE APLICA A: Extensión de ML de la CLI de Azure v2 (actual)

    1. Inicie sesión y configure su área de trabajo.

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. Puede obtener el URI de seguimiento utilizando el comando az ml workspace.

      az ml workspace show --query mlflow_tracking_uri
      
  2. Configurar URI de seguimiento.

    El método set_tracking_uri() apunta el URI de seguimiento de MLflow a ese URI.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

Sugerencia

Cuando trabaje con entornos compartidos, como un clúster Azure Databricks, un clúster Azure Synapse Analytics o similar, puede establecer la variable de entorno MLFLOW_TRACKING_URI a nivel de clúster. Este enfoque le permite configurar automáticamente el URI de seguimiento de MLflow para que apunte a Azure Machine Learning para todas las sesiones que se ejecutan en el clúster en lugar de hacerlo sesión por sesión.

La captura de pantalla muestra las opciones avanzadas donde se pueden configurar las variables de entorno en un clúster Azure Databricks.

Una vez haya configurado la variable de entorno, cualquier experimento que se ejecute en dicho clúster se rastrea en Azure Machine Learning.

Configurar la autenticación

Una vez haya configurado el seguimiento, configure cómo autenticarse en el área de trabajo asociada. Por defecto, el plugin Azure Machine Learning para MLflow abre un navegador para solicitar credenciales de forma interactiva. Para conocer otras formas de configurar la autenticación para MLflow en áreas de trabajo de Azure Machine Learning, consulte Configurar MLflow para Azure Machine Learning: Configurar la autenticación.

En el caso de los trabajos interactivos en los que hay un usuario conectado a la sesión, puede confiar en la autenticación interactiva y, por tanto, no es necesario realizar ninguna otra acción.

Advertencia

Explorador interactivo autenticación bloquea la ejecución del código cuando solicita credenciales. Este enfoque no es adecuado para la autenticación en entornos desatendidos, como los trabajos de entrenamiento. Le recomendamos que configure un modo de autenticación diferente.

Para aquellos escenarios en los que se requiere una ejecución desatendida, debe configurar un principal de servicio para comunicarse con Azure Machine Learning.

import os

os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"

Sugerencia

Cuando trabaje en entornos compartidos, le recomendamos que configure estas variables de entorno en el proceso. Como práctica recomendada, adminístrelos como secretos en una instancia de Azure Key Vault.

Por ejemplo, en Azure Databricks puede usar secretos en variables de entorno como se indica a continuación en la configuración del clúster: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}. Para obtener más información sobre la implementación de este enfoque en Azure Databricks, consulte Referencia a un secreto en una variable de entorno o consulte la documentación de su plataforma.

Experimento de nombres en Azure Machine Learning

Cuando se configura MLflow para realizar un seguimiento exclusivo de los experimentos en el área de trabajo de Azure Machine Learning, la convención de nomenclatura de los experimentos tiene que seguir la utilizada por Azure Machine Learning. En Azure Databricks, los experimentos se nombran con la ruta donde se guarda el experimento, por ejemplo /Users/alice@contoso.com/iris-classifier. Sin embargo, en Azure Machine Learning, se proporciona directamente el nombre del experimento. El mismo experimento se nombraría iris-classifier directamente.

mlflow.set_experiment(experiment_name="experiment-name")

Seguimiento de parámetros, métricas y artefactos

Después de esta configuración, puede utilizar MLflow en Azure Databricks de la misma manera que está acostumbrado. Para más información, consulte Registrar y ver métricas y archivos de registro.

Registro de modelos con MLflow

Una vez que un modelo está entrenado, puede registrarlo en el servidor de seguimiento con el método mlflow.<model_flavor>.log_model(). <model_flavor> hace referencia al marco asociado al modelo. Conozca qué tipos de modelos se admiten.

En el ejemplo siguiente, se está registrando un modelo creado con la biblioteca MLLib de Spark.

mlflow.spark.log_model(model, artifact_path = "model")

El tipo spark no corresponde con el hecho de que esté entrenando un modelo en un clúster de Spark. En cambio, se desprende del marco de entrenamiento utilizado. Puede entrenar un modelo usando TensorFlow con Spark. El tipo que se va a usar sería tensorflow.

Los modelos se registran dentro de la ejecución de la que se hace el seguimiento. Este hecho significa que los modelos están disponibles tanto en Azure Databricks como en Azure Machine Learning (por defecto) o exclusivamente en Azure Machine Learning si ha configurado el URI de seguimiento para que apunte a él.

Importante

El parámetro registered_model_name no ha sido especificado. Para más información sobre este parámetro y el registro, consulte Registro de modelos en el registro con MLflow.

Registrar modelos en el registro con MLflow

A diferencia del seguimiento, los registros de modelos no pueden funcionar al mismo tiempo en Azure Databricks y Azure Machine Learning. Tienen que usar uno o otro. Por defecto, los registros de modelos utilizan el área de trabajo de Azure Databricks. Si elige configurar el seguimiento de MLflow para que solo realice el seguimiento en su área de trabajo de Azure Machine Learning, el registro del modelo es el área de trabajo de Azure Machine Learning.

Si utiliza la configuración predeterminada, el siguiente código registra un modelo dentro de las ejecuciones correspondientes tanto de Azure Databricks como de Azure Machine Learning, pero lo registra solo en Azure Databricks.

mlflow.spark.log_model(model, artifact_path = "model", 
                       registered_model_name = 'model_name')  
  • Si no existe un modelo registrado con el nombre, el método registra un nuevo modelo, crea la versión 1 y devuelve un objeto ModelVersion MLflow.
  • Si ya existe un modelo registrado con el nombre, el método crea una versión del modelo y devuelve el objeto de versión.

Utilice el registro de Azure Machine Learning con MLflow

Si desea utilizar Azure Machine Learning Model Registry en lugar de Azure Databricks, le recomendamos que configure el seguimiento de MLflow para que solo se realice en su área de trabajo de Azure Machine Learning. Este enfoque elimina la ambigüedad de dónde se registran los modelos y simplifica la configuración.

Si desea seguir utilizando las capacidades de seguimiento dual pero registrar modelos en Azure Machine Learning, puede indicar a MLflow que utilice Azure Machine Learning para los registros de modelos configurando el URI de registro de modelos de MLflow. Este URI tiene el mismo formato y valor que el MLflow que rastrea URI.

mlflow.set_registry_uri(azureml_mlflow_uri)

Nota:

El valor de azureml_mlflow_uri se obtuvo de la misma forma que se describe en Configurar el seguimiento de MLflow para que sólo realice el seguimiento en su espacio de trabajo de Azure Machine Learning.

Para ver un ejemplo completo de este escenario, consulte Entrenar modelos en Azure Databricks e implementarlos en Azure Machine Learning.

Implementar y consumir modelos registrados en Azure Machine Learning

Los modelos registrados en el servicio de Azure Machine Learning con MLflow se pueden consumir como:

  • Un punto de conexión de Azure Machine Learning (en tiempo real y por lotes). Esta implementación le permite utilizar las capacidades de implementación de Azure Machine Learning tanto para la inferencia en tiempo real como por lotes en Azure Container Instances, Azure Kubernetes o Puntos de conexión de inferencia administrados.
  • Objetos de modelo MLFlow o funciones definidas por el usuario (UDF) de Pandas, que se pueden utilizar en blocs de notas Azure Databricks en canalizaciones de streaming o por lotes.

Implementación de modelos en puntos de conexión de Azure Machine Learning

Puede utilizar el complemento azureml-mlflow para implementar un modelo en su área de trabajo de Azure Machine Learning. Para más información sobre cómo implementar modelos en los distintos destinos Cómo implementar modelos MLflow.

Importante

Los modelos deben registrarse en el registro de Azure Machine Learning para poder implementarlos. Si sus modelos están registrados en la instancia de MLflow dentro de Azure Databricks, regístrelos de nuevo en Azure Machine Learning. Para más información, consulte Entrenamiento de modelos en Azure Databricks e implementación en Azure Machine Learning

Implementación de modelos en Azure Databricks para la calificación por lotes mediante UDFs

Puede elegir clústeres de Azure Databricks para la puntuación por lotes. Utilizando Mlflow, puede resolver cualquier modelo del registro al que esté conectado. Normalmente se utiliza uno de los siguientes métodos:

  • Si su modelo fue entrenado y creado con librerías Spark como MLLib, use mlflow.pyfunc.spark_udf para cargar un modelo y usarlo como un Spark Pandas UDF para puntuar nuevos datos.
  • Si el modelo no se ha entrenado o compilado con bibliotecas de Spark, use mlflow.pyfunc.load_model o mlflow.<flavor>.load_model para cargar el modelo en el controlador del clúster. Necesita orquestar cualquier paralelización o distribución de trabajo que desee que se produzca en el clúster. MLflow no instala ninguna biblioteca que su modelo necesite para funcionar. Esas bibliotecas deben instalarse en el clúster antes de ejecutarlo.

En el ejemplo siguiente se muestra cómo cargar un modelo desde el registro denominado uci-heart-classifier y usarlo como UDF de Pandas de Spark para puntuar nuevos datos.

from pyspark.sql.types import ArrayType, FloatType 

model_name = "uci-heart-classifier"
model_uri = "models:/"+model_name+"/latest"

#Create a Spark UDF for the MLFlow model 
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri) 

Para conocer más formas de referenciar modelos desde el registro, consulte Carga de modelos desde el registro.

Una vez cargado el modelo, puede utilizar este comando para puntuar nuevos datos.

#Load Scoring Data into Spark Dataframe 
scoreDf = spark.table({table_name}).where({required_conditions}) 

#Make Prediction 
preds = (scoreDf 
           .withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …)) 
        ) 

display(preds) 

Limpieza de recursos

Si desea conservar su área de trabajo Azure Databricks, pero ya no necesita el área de trabajo Azure Machine Learning, puede eliminar el área de trabajo Azure Machine Learning. Esta acción desvinculará el área de trabajo de Azure Databricks y el área de trabajo de Azure Machine Learning.

Si no tiene previsto utilizar las métricas y los artefactos registrados en su área de trabajo, elimine el grupo de recursos que contiene la cuenta de almacenamiento y el área de trabajo.

  1. En Azure Portal, busque los Grupos de recursos. En servicios, seleccione Grupos de recursos.
  2. En la lista Grupos de recursos, busque y seleccione el grupo de recursos que ha creado para abrirlo.
  3. En la página Información general, seleccione Eliminar grupo de recursos.
  4. Para comprobar la eliminación, introduzca el nombre del grupo de recursos.