Seguimiento de experimentos y modelos de ML con MLflow

El seguimiento hace referencia al proceso de guardar toda la información relacionada del experimento que puedes encontrar relevante para cada experimento que ejecutes. Estos metadatos varían en función del proyecto, pero pueden incluir:

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

Azure Machine Learning realiza un seguimiento automático de algunos de estos elementos al trabajar con trabajos (incluidos el código, el entorno y los datos de entrada y salida). Sin embargo, otros, como modelos, parámetros y métricas, deben instrumentarse mediante el generador de modelos, ya que es específico del escenario concreto.

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

Nota:

Si desea realizar un seguimiento de los experimentos que se ejecutan en Azure Databricks o Azure Synapse Analytics, consulte los artículos dedicados Seguimiento de experimentos de Aprendizaje automático de Azure Databricks con MLflow y Azure Machine Learning o Seguimiento de experimentos de aprendizaje automático de Azure Synapse Analytics con MLflow y Azure Machine Learning.

Ventajas de los experimentos de seguimiento

Se recomienda encarecidamente a los profesionales del aprendizaje automático instrumentar su experimentación mediante el seguimiento de ellos, independientemente de si están entrenando con trabajos en Azure Machine Learning o de forma interactiva en cuadernos. Dicha integración aporta las siguientes ventajas:

  • Todos los experimentos de Azure Machine Learning están organizados en un solo lugar, lo que te permite buscar y filtrar experimentos para encontrar la información y profundizar para ver qué fue exactamente lo que intentaste antes.
  • Compara experimentos, analiza los resultados y depura el entrenamiento del modelo con poco trabajo adicional.
  • Reproduce o vuelve a ejecutar experimentos para validar los resultados.
  • Mejora la colaboración viendo lo que todos hacen, compartiendo los resultados del experimento y accediendo a los datos del experimento mediante programación.

¿Por qué MLflow?

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

Consulte MLflow y Azure Machine Learning para ver todas las funcionalidades admitidas de MLflow y Azure Machine Learning, incluida la compatibilidad con MLflow Project (versión preliminar) y la implementación de modelos.

Requisitos previos

  • 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 mlflow-skinny, que es un paquete de MLflow ligero sin dependencias de almacenamiento SQL, servidor, interfaz de usuario ni ciencia de datos. Se recomienda para los usuarios que necesitan principalmente las funcionalidades de seguimiento y registro sin la importación del conjunto completo de características de MLflow, incluidas las implementaciones.

  • Necesita un área de trabajo de Azure Machine Learning. Puede crear una siguiendo este tutorial.

  • Si va a realizar el seguimiento remoto (seguimiento de experimentos que se ejecutan fuera de Azure Machine Learning), configure MLflow para que seleccione al identificador URI de seguimiento del área de trabajo de Azure Machine Learning, como se explica en Configuración de MLflow para Azure Machine Learning.

Configuración del experimento

MLflow organiza la información en experimentos y ejecuciones (en Azure Machine Learning, las ejecuciones se denominan Trabajos). 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.

Cuando entrenes de forma interactiva, como en un Jupyter Notebook, usa el comando MLflow mlflow.set_experiment(). Por ejemplo, el siguiente fragmento de código demuestra la configuración del experimento y el registro durante un trabajo:

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 intentas registrar información que requiere una ejecución activa. Por ejemplo, cuando registras una métrica, registras un parámetro o cuando se inicia un ciclo de entrenamiento cuando la funcionalidad de registro automático de Mlflow está habilitada. Sin embargo, normalmente resulta útil iniciar la ejecución explícitamente, especialmente si deseas capturar el tiempo total del experimento en el campo Duración. Para iniciar la ejecución explícitamente, usa mlflow.start_run().

Independientemente de si has iniciado la ejecución manualmente o no, finalmente deberás detenerla para informar a MLflow de que la ejecución del experimento ha finalizado y marca el estado como Completado. Para ello, todo mlflow.end_run(). Se recomienda encarecidamente iniciar ejecuciones manualmente para que no olvides terminarlas al trabajar en cuadernos.

mlflow.start_run()

# Your code

mlflow.end_run()

Para ayudarte a evitar olvidarse de finalizar la ejecución, suele ser útil usar el paradigma del administrador de contextos:

with mlflow.start_run() as run:
    # Your code

Al iniciar una nueva ejecución con mlflow.start_run(), puede ser interesante indicar el parámetro run_name que, a continuación, se traducirá al nombre de la ejecución en la interfaz de usuario de Azure Machine Learning y te ayudará a identificar la ejecución más rápido:

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

Registro automático

Puedes registrar métricas, parámetros y archivos con MLflow manualmente. Sin embargo, también puedes 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 código siguiente 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. Para verlos en cualquier momento, vaya al área de trabajo y busque el experimento por su nombre en el área de trabajo en Azure Machine Learning Studio.

Captura de pantalla de la vista de métricas.

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. Una vez que hayas creado la vista deseada, puedes guardarla para su uso posterior y compartirla con tus compañeros de equipo mediante un vínculo directo.

También puedes acceder o consultar métricas, parámetros y artefactos mediante programación usando SDK de MLflow. Usa mlflow.get_run() como se explica en esta información:

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 ejemplo anterior solo devolverá el último valor de una métrica determinada. Si deseas recuperar todos los valores de una métrica determinada, usa el método mlflow.get_metric_history como se explica en Obtener parámetros y métricas de una ejecución.

Para descargar artefactos que has registrado, como archivos y modelos, puedes usar mlflow.artifacts.download_artifacts()

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

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

Cuadernos de ejemplo

Si buscas ejemplos sobre cómo usar MLflow en cuadernos de Jupyter Notebook, consulta el repositorio de ejemplo Usar MLflow (Jupyter Notebook).

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, lea Matriz de compatibilidad para consultar ejecuciones y experimentos.

Pasos siguientes