Seguimiento de experimentos y modelos de ML con MLflow

En este artículo, aprenderá a usar MLflow para realizar el seguimiento de los experimentos y las ejecuciones en áreas de trabajo de Azure Machine Learning.

El seguimiento es el proceso de guardar información relevante sobre los experimentos que se ejecutan. La información guardada (metadatos) varía en función del proyecto y puede incluir:

  • Código
  • Detalles del entorno (como la versión del sistema operativo, los paquetes de Python)
  • Datos de entrada
  • Configuración de parámetros
  • Modelos
  • Métricas de evaluación
  • Visualizaciones de evaluación (como las matrices de confusión, los trazados de importancia)
  • Resultados de la evaluación (incluidas algunas predicciones de evaluación)

Cuando trabaja con trabajos en Azure Machine Learning, Azure Machine Learning realiza un seguimiento automático de cierta información sobre los experimentos, como el código, el entorno y los datos de entrada y salida. Sin embargo, para otros, como modelos, parámetros y métricas, el generador de modelos debe configurar su seguimiento, ya que son específicos del escenario concreto.

Nota:

Si desea realizar un seguimiento de los experimentos que se ejecutan en Azure Databricks, consulte Seguimiento de experimentos de ML de Azure Databricks con MLflow y Azure Machine Learning. Para más información sobre el seguimiento de experimentos que se ejecutan en Azure Synapse Analytics, consulte Seguimiento de experimentos de ML de Azure Synapse Analytics con MLflow y Azure Machine Learning.

Ventajas de los experimentos de seguimiento

Se recomienda encarecidamente que los profesionales del aprendizaje automático realicen un seguimiento de los experimentos, tanto si está entrenando con trabajos en Azure Machine Learning como si está entrenando de forma interactiva en cuadernos. El seguimiento de experimentos le permite:

  • Organizar todos los experimentos de aprendizaje automático en un solo lugar. A continuación, puede buscar y filtrar experimentos y explorar en profundidad para ver detalles sobre los experimentos que ejecutó antes.
  • Compara experimentos, analiza los resultados y depura el entrenamiento del modelo con poco trabajo adicional.
  • Reproducir o volver a ejecutar experimentos para validar los resultados.
  • Mejorar la colaboración, ya que puede ver qué hacen otros compañeros de equipo, compartir los resultados del experimento y acceder a los datos del experimento mediante programación.

¿Por qué usar MLflow para realizar el seguimiento de experimentos?

Las áreas de trabajo de Azure Machine Learning son compatibles con MLflow, lo que significa que se puede usar MLflow para realizar un seguimiento de ejecuciones, métricas, parámetros y artefactos en las áreas de trabajo de Azure Machine Learning. Una ventaja importante del uso de MLflow para el seguimiento es que no es necesario cambiar las rutinas de entrenamiento para trabajar con Azure Machine Learning ni insertar ninguna sintaxis específica de la nube.

Para más información sobre todas las funcionalidades de MLflow y Azure Machine Learning admitidas, consulte MLflow y Azure Machine Learning.

Limitaciones

Es posible que algunos métodos disponibles en la API de MLflow no estén disponibles cuando están conectados a Azure Machine Learning. Para más información sobre las operaciones admitidas y no admitidas, consulte Matriz de compatibilidad para consultar ejecuciones y experimentos.

Requisitos previos

  • Instale el paquete mlflow del SDK de MLflow y el complemento azureml-mlflow de Azure Machine Learning para 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, interfaz de usuario, 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. Para crear un área de trabajo, consulte el tutorial Creación de recursos de aprendizaje automático. Revise los permisos de acceso que necesita para realizar las operaciones de MLflow en el área de trabajo.

  • Si realiza el seguimiento remoto (es decir, realiza un seguimiento de los experimentos 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 experimento

MLflow organiza la información en experimentos y ejecuciones (las ejecuciones se denominan trabajos en Azure Machine Learning). De forma predeterminada, las ejecuciones se registran en un experimento llamado Predeterminado que se crea automáticamente para ti. Puede configurar el experimento en el que se está realizando el seguimiento.

Para el entrenamiento interactivo, como en un cuaderno de Jupyter, use el comando mlflow.set_experiment() de MLflow. Por ejemplo, el siguiente fragmento de código configura un experimento:

experiment_name = 'hello-world-example'
mlflow.set_experiment(experiment_name)

Configurar la ejecución

Azure Machine Learning realiza un seguimiento de cualquier trabajo de entrenamiento en lo que MLflow llama a una ejecución. Usa ejecuciones para capturar todo el procesamiento que realiza el trabajo.

Al trabajar de forma interactiva, MLflow inicia el seguimiento de la rutina de entrenamiento en cuanto se intenta registrar información que requiere una ejecución activa. Por ejemplo, el seguimiento de MLflow se inicia al registrar una métrica, un parámetro o iniciar un ciclo de entrenamiento y la funcionalidad de registro automático de MLflow está habilitada. Sin embargo, normalmente resulta útil iniciar la ejecución explícitamente, especialmente si se desea capturar el tiempo total del experimento en el campo Duración. Para iniciar la ejecución explícitamente, usa mlflow.start_run().

Tanto si inicia la ejecución manualmente como si no, finalmente debe detener la ejecución, de modo que MLflow sepa que la ejecución del experimento se realiza y puede marcar el estado de la ejecución como Completado. Para detener una ejecución, use mlflow.end_run().

Se recomienda encarecidamente iniciar ejecuciones manualmente para que no olvide terminarlas al trabajar en cuadernos.

  • Para iniciar una ejecución manualmente y finalizarla cuando haya terminado de trabajar en el cuaderno:

    mlflow.start_run()
    
    # Your code
    
    mlflow.end_run()
    
  • Normalmente resulta útil usar el paradigma del administrador de contextos para ayudarle a recordar finalizar la ejecución:

    with mlflow.start_run() as run:
        # Your code
    
  • Al iniciar una nueva ejecución con mlflow.start_run(), puede ser útil especificar el parámetro run_name, que más adelante se traducirá al nombre de la ejecución de la interfaz de usuario de Azure Machine Learning y le ayudará a identificar la ejecución más rápido:

    with mlflow.start_run(run_name="hello-world-example") as run:
        # Your code
    

Habilitación del registro automático de MLflow

Puede registrar métricas, parámetros y archivos con MLflow manualmente. Sin embargo, también se puede confiar en la funcionalidad de registro automático de MLflow. Cada marco de aprendizaje automático compatible con MLflow decide qué realizar un seguimiento automáticamente.

Para habilitar el registro automático, inserte el siguiente código antes del código de entrenamiento:

mlflow.autolog()

Visualización de las métricas y los artefactos en el área de trabajo

Las métricas y los artefactos procedentes del registro de MLflow se supervisan en el área de trabajo. Puede verlos y acceder a ellos en Studio en cualquier momento o acceder a ellos mediante programación a través del SDK de MLflow.

Para ver métricas y artefactos en Studio:

  1. Vaya a Azure Machine Learning Studio.

  2. Vaya a su área de trabajo.

  3. Busque el experimento por su nombre en el área de trabajo.

  4. Seleccione las métricas registradas para representar gráficos en el lado derecho. Puede personalizar los gráficos aplicando suavizado, cambiando el color o trazando varias métricas en un solo gráfico. También puede cambiar el tamaño y reorganizar el diseño como quiera.

  5. Una vez que haya creado la vista deseada, guárdela para su uso posterior y compártala con sus compañeros de equipo mediante un vínculo directo.

    Captura de pantalla de la vista de métricas.

Para el acceso o consulta de métricas, parámetros y artefactos mediante programación a través del SDK de MLflow, use mlflow.get_run().

import mlflow

run = mlflow.get_run("<RUN_ID>")

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

print(metrics, params, tags)

Sugerencia

En el caso de las métricas, el código de ejemplo anterior solo devolverá el último valor de una métrica determinada. Si quiere recuperar todos los valores de una métrica determinada, use el método mlflow.get_metric_history. Para obtener más información sobre cómo recuperar valores de una métrica, consulte Obtención de parámetros y métricas de una ejecución.

Para descargar artefactos que ha registrado, como archivos y modelos, use mlflow.artifacts.download_artifacts().

mlflow.artifacts.download_artifacts(run_id="<RUN_ID>", artifact_path="helloworld.txt")

Para obtener más información acerca de cómo recuperar o comparar información de experimentos y ejecuciones en Azure Machine Learning mediante MLflow, consulte Consulta y comparación de experimentos y ejecuciones con MLflow