Gestiona el ciclo de vida completo de tu ML con MLflow

Como os hemos estado contando a lo largo de varios posts, el ciclo de vida completo de los proyectos de ML es difícil de gestionar. Porque como sabréis, desarrollar un proyecto de Machine Learning en producción no sólo implica desarrollar un código optimizado, hay un montón de aspectos complicados que se deben diseñar. Estos retos son los que se intentan solventar con la ayuda de MLOps, y para ello Databrick presentó MLflow en 2018.

Problemas comunes en el ciclo de vida de ML

Los problemas más repetidos en el desarrollo end-to-end son los siguientes:

  1. Existe una infinidad de módulos, librerías y métodos. Para cualquier fase de desarrollo de un modelo ML hay muchas herramientas de código que lo cubren. Desde el Data Cleaning y la creación de variables hasta el entrenamiento de los modelos. Aquí existe una diferencia clave con el desarrollo de software tradicional donde se utiliza una herramienta optimizada para cada fase. Pero en ML se intenta probar el mayor número de herramientas posibles que se ajustan a nuestro problema y quedarnos con la que de mejores resultados. Precisamente por esto un ML Engineer suele utilizar bastantes librerías.
  2. Resulta complicado llevar un seguimiento exhaustivo de los experimentos. Los algoritmos de ML que se utilizan tienen bastantes parámetros configurables, se trabaja con bases de datos normalmente grandes y se preparan los datos de maneras diferentes si tenemos pensado lanzar un modelo u otro. Esto hace que sea difícil llevar un tracking de código, datos, configuraciones utilizadas en cada experimento, da igual que sea trabajo individual o en equipo.
  3. Conseguir una reproducibilidad de los resultados es un desafío más. El seguimiento detallado es clave para permitir una reproducción de pasos para llegar a los mismos resultados con el experimento de Machine Learning. 

Con todos estos problemas está claro que el desarrollo de ML se convierte en un reto y es necesario una evolución para solventarlo. Esta evolución, como os he dicho en la introducción es el ámbito de MLOps. Databricks se ha tenido que pelear con cientos de problemas de ML a lo largo de los años hasta que en 2018 anunciaron la herramienta MLflow. Una herramienta de código abierto que trata de solventar todos estos problemas que os he venido contando.

MLflow: una plataforma Open Source de aprendizaje automático

MLflow es una plataforma de código abierto para gestionar el ciclo de vida de ML de principio a fin. El desarrollo de la plataforma se inspiró en las plataformas existentes, pero tiene dos aspectos clave que Databricks se aseguró de cumplir:

  • Tiene una interfaz abierta: MLflow se desarrolló para poder funcionar con cualquier lenguaje de programación, librerías, algoritmos y herramientas de implementación. Se basa en una interfaz API REST y formatos de datos muy simples, para que sea posible usarse desde una gran variedad de herramientas. Esto hace que añadir MLflow a un experimento existente sea muy fácil. Por lo que un desarrollador se puede beneficiar de la plataforma casi de inmediato y compartir su código usando cualquier módulo de ML para que el resto de personas del equipo puedan ejecutarlo.

Código abierto: esto hace que MLflow no sea solo un proyecto de un empresote como Databricks, sino que además la comunidad puede ampliarlo y mejorarlo.

Componentes de MLflow

La plataforma proporciona cuatro componentes clave para gestionar el lifecycle de un proyecto de ML:

MLflow Tracking

MLflow Tracking es una API y una interfaz de usuario gráfica para registrar parámetros, versiones de código, métricas y archivos de salida cuando se ejecuta el proyecto ML para visualizarlos posteriormente. MLflow nos permite utilizar el componente de seguimiento utilizando Python, REST, API de R y API de Java. Con pocas líneas de código podemos realizar un seguimiento de parámetros, métricas y objetos:

import mlflow
# Log de parametros(Diccionario de clave->valor)
mlflow.log_param("num_dimensions", 8)
mlflow.log_param("regularization", 0.1)
# Log de metricas; las metricas se pueden actualizar durante la ejecucion
mlflow.log_metric("accuracy", 0.1)
...
mlflow.log_metric("accuracy", 0.45)
# Log de objetos (ficheros del output)
mlflow.log_artifact("roc.png")
mlflow.log_artifact("model.pkl")

Este componente nos proporciona una interfaz gráfica para visualizar el tracking de nuestros experimentos.

MLflow Projects

Los proyectos MLflow son una convención para organizar y describir código de manera que sea reutilizable por compañeros o herramientas automatizadas. Cada proyecto es simplemente un directorio con código o un repositorio Git, y usa un archivo descriptor o simplemente una convención para especificar sus dependencias y cómo ejecutar el código. Por ejemplo, los proyectos pueden contener un archivo conda.yaml para especificar un entorno Python Conda. Cuando usa la API MLflow tracking en un proyecto, MLflow recuerda automáticamente la versión del proyecto (por ejemplo, la confirmación de Git) y cualquier parámetro. Podemos ejecutar ejecutar fácilmente proyectos MLflow existentes desde GitHub o su propio repositorio de Git, y encadenarlos en flujos de trabajo de varios pasos.

MLflow Models

MLflow models es un formato estándar para empaquetar modelos de Machine Learning que se puede usar en una variedad de herramientas. El formato define una convención que le permite guardar un modelo de diferentes maneras para que puedan ser entendidos por diferentes herramientas.

MLflow Model Registry

Al igual que se utiliza Git para llevar un registro de código, tener un tracking de los cambios de código y funcionalidades, se presenta necesario llevar un registro de los modelos que lanzamos. Aquí es donde entra en juego el componente MLflow Model Registry. 

Se trata de un almacén de modelos centralizado que contiene un conjunto de API y una interfaz gráfica de usuario para gestionar de forma colaborativa el ciclo de vida completo de un modelo MLflow. 

Proporciona información sobre el modelo:

  • Qué objeto MLflow experimentó, ejecutó y produjo el modelo
  • Versiones del modelo
  • Transiciones de etapa 
  • Anotaciones

Conclusiones

Gracias a MLflow todo el seguimiento del ciclo de vida de nuestros proyectos de Machine Learning está bajo control. Tendremos seguimiento de los modelos con sus métricas correspondientes, hiperparámetros seleccionados e incluso hasta de quién y cuándo lanzó el modelo.