Configuración de MLflow para Azure Machine Learning

En este artículo se explica cómo configurar MLflow para conectarse a un área de trabajo de Azure Machine Learning para el seguimiento, los registros y la implementación.

Las áreas de trabajo de Azure Machine Learning son compatibles con MLflow, lo que significa que pueden actuar como un servidor de MLflow sin ninguna configuración adicional. Cada área de trabajo tiene un URI de seguimiento de MLflow que MLflow puede usar para conectarse al área de trabajo. Las áreas de trabajo de Azure Machine Learning ya están configuradas para funcionar con MLflow, por lo que no se requiere ninguna configuración adicional.

Sin embargo, si trabaja fuera de Azure Machine Learning (como la máquina local, Azure Synapse Analytics o Azure Databricks), debe configurar MLflow para que apunte al área de trabajo.

Importante

Cuando se ejecuta en Azure Compute (cuadernos de Azure Machine Learning, cuadernos de Jupyter alojados en instancias de proceso de Azure Machine Learning o trabajos que se ejecutan en clústeres de proceso de Azure Machine Learning), no es necesario configurar el URI de seguimiento. Se configura automáticamente.

Requisitos previos

Necesita los siguientes requisitos previos para seguir este tutorial:

  • Instale el paquete mlflow del SDK de MLflow y el complemento de Azure Machine Learning para MLflow azureml-mlflow.

    pip install mlflow azureml-mlflow
    

    Sugerencia

    Puede usar el paquete de mlflow-skinny, que es un paquete MLflow ligero sin dependencias de ciencia de datos, servidor, servidor o almacenamiento de SQL. mlflow-skinny se recomienda para los usuarios que necesitan principalmente las funcionalidades de seguimiento y registro de MLflow sin importar el conjunto completo de características, incluidas las implementaciones.

  • Un área de trabajo de Azure Machine Learning. Puede crear uno siguiendo el tutorial Creación de recursos de Aprendizaje automático .

  • Si va a realizar el seguimiento remoto (es decir, los experimentos de seguimiento que se ejecutan fuera de Azure Machine Learning), configure MLflow para que apunte al URI de seguimiento del área de trabajo de Azure Machine Learning. Para más información sobre cómo conectar MLflow al área de trabajo, consulte Configuración de MLflow para Azure Machine Learning.

Configuración del URI de seguimiento de MLflow

Para conectar MLflow a un área de trabajo de Azure Machine Learning, necesita el URI de seguimiento del área de trabajo. Cada área de trabajo tiene su propio URI de seguimiento y tiene el protocolo azureml://.

  1. Obtenga el URI de seguimiento del área de trabajo:

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

    1. Inicie sesión y configure el á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 mediante el comando az ml workspace:

      az ml workspace show --query mlflow_tracking_uri
      
  2. Configuración del URI de seguimiento:

    A continuación, 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

    Al trabajar en entornos compartidos, como un clúster de Azure Databricks, un clúster de Azure Synapse Analytics o similar, resulta útil establecer la variable MLFLOW_TRACKING_URI de entorno en el nivel de clúster para 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 por sesión.

Configurar la autenticación

Una vez configurado el seguimiento, también debe configurar el método de autenticación para el área de trabajo asociada. De forma predeterminada, el complemento de Azure Machine Learning para MLflow realiza la autenticación interactiva abriendo el explorador predeterminado para solicitar las credenciales.

El complemento de Azure Machine Learning para MLflow admite varios mecanismos de autenticación a través del paquete azure-identity, que se instala como una dependencia para el complemento azureml-mlflow. Los siguientes métodos de autenticación se prueban uno por uno hasta que uno de ellos se realiza correctamente:

  1. Entorno: lee la información de cuenta especificada mediante variables de entorno y la usa para autenticarse.
  2. Identidad administrada: si la aplicación se implementa en un host de Azure con la identidad administrada activada, se autentica con él.
  3. CLI de Azure: si un usuario inicia sesión mediante el comando az login de la CLI de Azure, se autentica como ese usuario.
  4. Azure PowerShell: si un usuario inicia sesión mediante el comando Connect-AzAccount de Azure PowerShell, se autentica como ese usuario.
  5. Explorador interactivo: autentica interactivamente a un usuario a través del explorador predeterminado.

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

La autenticación interactiva del explorador bloqueará la ejecución del código al solicitar las credenciales. No es una opción adecuada para la autenticación en entornos desatendidos, como trabajos de entrenamiento. Se recomienda configurar otro modo de autenticación.

En aquellos escenarios en los que se requiere la ejecución desatendida, tendrá que configurar una entidad 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

Al trabajar en entornos compartidos, es aconsejable configurar estas variables de entorno en el proceso. Como procedimiento recomendado, puede administrarlos como secretos en una instancia de Azure Key Vault siempre que sea posible. 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>}}. Consulte Referencia a un secreto en una variable de entorno para obtener información sobre cómo hacerlo en Azure Databricks o consulte documentación similar en la plataforma.

Si prefiere usar un certificado en lugar de un secreto, puede configurar las variables AZURE_CLIENT_CERTIFICATE_PATH de entorno en la ruta de acceso a un PEM archivo de certificado o PKCS12 (incluida la clave privada) y AZURE_CLIENT_CERTIFICATE_PASSWORD con la contraseña del archivo de certificado, si existe.

Configurar los niveles de autorización y los permisos

Algunos roles predeterminados, como Científico de datos de AzureML o Colaborador, ya están configurados para realizar operaciones de MLflow en un área de trabajo de Azure Machine Learning. Si usa un rol personalizado, necesita los permisos siguientes:

  • Para usar el seguimiento de MLflow:

    • Microsoft.MachineLearningServices/workspaces/experiments/*
    • Microsoft.MachineLearningServices/workspaces/jobs/*
  • Para usar el registro de modelos de MLflow:

    • Microsoft.MachineLearningServices/workspaces/models/*/*

Para obtener información sobre cómo conceder acceso a la entidad de servicio que creó o a la cuenta de usuario en el área de trabajo, vea Conceder acceso.

Solución de errores de autenticación

MLflow intenta autenticarse en Azure Machine Learning en la primera operación que interactúa con el servicio, como mlflow.set_experiment() o mlflow.start_run(). Si encuentra problemas o mensajes de autenticación inesperados durante el proceso, puede aumentar el nivel de registro para obtener más detalles sobre el error:

import logging

logging.getLogger("azure").setLevel(logging.DEBUG)

Establecimiento del nombre del experimento (opcional)

Todas las ejecuciones de MLflow se registran en el experimento activo. Las ejecuciones se registran de manera predeterminada en un experimento denominado Default que se crea automáticamente. Puede configurar el experimento en el que se está realizando el seguimiento.

Sugerencia

Al enviar trabajos mediante la CLI de Azure Machine Learning v2, puede establecer el nombre del experimento mediante la propiedad experiment_name en la definición de YAML del trabajo. No es necesario configurarlo en el script de entrenamiento. Consulte YAML: nombre para mostrar, nombre del experimento, descripción y etiquetas para obtener más detalles.

Configure el experimento mediante el comando MLflow mlflow.set_experiment().

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Compatibilidad con nubes de Azure no públicas

El complemento de Azure Machine Learning para MLflow está configurado de manera predeterminada para trabajar con la nube global de Azure. Sin embargo, puede configurar la nube de Azure que usa estableciendo la variable de entorno AZUREML_CURRENT_CLOUD.

import os

os.environ["AZUREML_CURRENT_CLOUD"] = "AzureChinaCloud"

Puede identificar la nube que usa con el siguiente comando de la CLI de Azure:

az cloud list

La nube actual tiene el valor IsActive establecido en True.

Pasos siguientes

Ahora que el entorno está conectado al área de trabajo en Azure Machine Learning, puede empezar a trabajar con él.