MLOps: Integración GitLab-MLflow

MLOps: Integración GitLab-MLflow
Autores:

En proyectos de Machine Learning, es habitual generar múltiples versiones de un mismo modelo, desde algunas con simples cambios en hiperparámetros, pasando por otras con modificaciones en la estructura o arquitectura del modelo, hasta aquellas que utilizan diferentes conjuntos de datos de entrenamiento. Todo esto puede dar lugar a un elevado número de ejecuciones que deben estar gestionadas debidamente.

Una buena organización de los distintos modelos, junto con sus métricas y configuraciones, es fundamental para evaluar cuál de ellos ofrece un mejor rendimiento y es el que se quiere utilizar, así como para facilitar su gestión a lo largo de todo el ciclo de vida del modelo.

Este tipo de gestión forma parte del paradigma MLOps (Machine Learning Operations), que incorpora buenas prácticas para implementar y mantener modelos de machine learning de forma confiable en producción, manteniendo un historial comprensible de todos los modelos aplicados, indicando los meta-argumentos utilizados y los resultados de los tests de validación.

Este artículo explora la funcionalidad de integración de GitLab junto con MLflow para optimizar el proceso de desarrollo y despliegue de modelos de machine learning.

MLflow[1]

MLflow se trata de una plataforma de código abierto ideada para dar soporte a los equipos y profesionales de proyectos de machine learning, centrándose en el ciclo de vida de los modelos y asegurando la trazabilidad y reproducibilidad de cada fase. MLflow está organizado en 4 componentes distintas, que pueden usarse por separadas o todas ellas conjuntamente. Las componentes son las siguientes:

  • MLflow Tracking: se trata de una API que permite mantener un seguimiento de parámetros, código y resultados de experimentos de ML. Además, ofrece una interfaz web interactiva que facilita la comparación entre ejecuciones.
  • MLflow Projects:  son una convención para organizar y describir código de manera que sea reutilizable por compañeros o herramientas automatizadas. 
  • MLflow Models: es un formato estándar para empaquetar modelos de Machine Learning facilitando su reutilización y despliegue en distintos entornos.
  • MLflow Model Registry: actúa como un almacén de modelos, manteniendo la trazabilidad de estos junto a los parámetros.

Integración de GitLab con MLflow

Recientemente, GitLab, una conocida plataforma que ofrece potentes herramientas de colaboración y control de versiones, ha incluido la compatibilidad con MLflow, permitiendo el uso de este como backend. De manera similar al código, permite la publicación de los modelos

y metadatos asociados, directamente en el registro de GitLab. Además, los resultados de los modelos se pueden consultar de forma totalmente transparente directamente desde la interfaz web de GitLab.

La integración es llevada a cabo mediante los componentes Model registry[2] y Model experiment tracking[3] proporcionados por GitLab y totalmente compatibles con la API de MLflow Tracking, la cual puede ser usada desde el código mediante MLflow Client[4].

El siguiente diagrama ilustra como se lleva a cabo la integración de GitLab con el componente de MLflow Tracking: el código registra parámetros, métricas y artefactos (como el modelo en sí) mediante la API de MLflow, y estas son almacenadas en GitLab y accesibles y visibles por todo el equipo. Las métricas y metadatos de los experimentos son guardados en la base de datos de GitLab mientras que los artefactos, que son archivos y objetos pesados, son almacenados en el Package registry de GitLab.

Figure 1. Esquema que muestra el flujo de trabajo de la integración de GitLab con el componente de MLflow Tracking.

Ejemplo de flujo de trabajo

A continuación, se muestra un ejemplo de cómo funciona el flujo de trabajo para trabajar con modelos de ML aprovechando la integración de GitLab con MLflow. Sin embargo, primero hace falta distinguir entre los componentes de Model registry y Model experiments tracking de GitLab.

El componente de Model registry sirve como repositorio para la gestión de modelos de aprendizaje automático a lo largo de su ciclo de vida. Permite comparar versiones de modelos y monitorear su evolución a lo largo del tiempo.

Figure 2. Model registry del repositorio GitLab

El componente de Model experiment tracking de GitLab permite realizar el seguimiento de experimentos de machine learning con el cliente de MLflow. Los experimentos están asociados a los modelos guardados en el Model Registry. Cuando mediante código se crea una ejecución de MLflow de un experimento se puede asociar a un modelo ya registrado en el Model Registry o si no se genera uno nuevo además de su experimento asociado, con nombre “[model]” seguido del nombre del nuevo modelo.

Figure 3. Model experiments del repositorio GitLab. Creación de un experimento.

Un experimento es una colección de distintas ejecuciones de modelos comparables entre sí, normalmente compartiendo el set de parámetros y de métricas usadas para su evaluación.

Figure 4. Experimento del modelo con una ejecución.

Después de la ejecución de un nuevo modelo, los diferentes artefactos, como transformadores, codificadores y el propio modelo, se almacenan en la sección de Artifacts dentro del experimento. Mientras tanto, las métricas de entrenamiento (como precision, recall, accuracy, etc.) se registran en la sección de Performance.

Figure 5. Ejecución del modelo con artefactos y métricas.

De esta manera, haciendo uso de la integración de GitLab con MLflow se puede tener un seguimiento de todos los modelos con sus respectivos experimentos y sus respectivos parámetros, métricas y artefactos directamente en GitLab, estando disponibles en todo momento.

El componente de Model Registry puede ser usado para el despliegue de un modelo en producción. La selección de la versión del modelo a desplegar sigue siendo un proceso manual basado en la evaluación de las métricas obtenidas. Cuando el usuario escoja una ejecución satisfactoria para utilizar como modelo para hacer inferencia, deberá ir al experimento en específico y pulsar el botón de promote para crear una nueva versión del modelo y esta será guardada como una nueva versión en el Model Registry. Entonces, la versión del modelo que debe ser utilizada para hacer inferencia es la última versión disponible en el Model Registry.

Aunque tener modelos en el repositorio es extremadamente útil, tener que cargar el modelo localmente cada vez que se intenta hacer inferencia es poco eficiente, por lo que se puede seguir la estrategia de tener una copia del modelo localmente que se actualice periódicamente o una vez alguien haya creado una nueva versión del modelo.

Cabe mencionar que la integración de MLflow con GitLab aún se encuentra en desarrollo y faltan funcionalidades por implementar, por lo que en un futuro podría ser posible aplicar mejoras en el proceso de registro y promoción de modelos para su despliegue. Sin embargo, esta integración ya ofrece una funcionalidad de gran utilidad para tener un seguimiento detallado e histórico de todos los modelos y experimentos de un proyecto, accesibles por todo el equipo en todo momento.


[1] https://mlflow.org/

[2] https://docs.gitlab.com/user/project/ml/model_registry/

[3] https://docs.gitlab.com/user/project/ml/experiment_tracking/

[4] https://docs.gitlab.com/ee/user/project/ml/experiment_tracking/mlflow_client.html