¿Y si las máquinas nos explicasen las cosas…?
13 mayo, 2021
Educación digital: Así puede ayudar la inteligencia artificial a los estudiantes
19 mayo, 2021

Desde hace más de 50 años el mundo de la inteligencia Artificial no ha dejado de evolucionar, pasando por los sistemas expertos, los modelos más estadísticos del Machine Learning, las redes neuronales y en la actualidad estamos inmersos en los modelos de Deep Learning.

Aunque en este caso la evolución no ha implicado una transición de unas tecnologías a otras, sino más bien una ampliación del espectro de herramientas y técnicas disponibles para resolver problemas e incluso una fusión o complementación entre ellas.

Esta evolución, no solo se ha dado en el mundo de los algoritmos propiamente dicho, sino también en todo aquello que rodea al desarrollo de estos modelos de Inteligencia artificial, ya que, si pensamos en todo el espectro de tareas que rodean al desarrollo de los modelos de Inteligencia Artificial, vemos que el desarrollo de estos modelos es una parte bastante pequeña de lo que es el ciclo de vida de un modelo de Inteligencia Artificial:

 

Por ello no solo han aparecido nuevas técnicas y frameworks dedicados al desarrollo de modelos de IA, tales como Sklearn, Tensorflow, etc. también han aparecido multitud de frameworks, plataformas, librerías, etc, que tratan de ayudar a que todas estas tareas alrededor del desarrollo, seguimiento, despliegue, etc, del modelo óptimo de ML sea lo más sencillo y simple posible, siendo MLflow una de esas librerías de la que hablaremos en el resto del artículo.

MLflow, tal y como se definen ellos mismos, es una plataforma de código abierto para la gestión del ciclo de vida de modelos de Machine Learning, que se puede usar y aplicar tanto en problemas con pocos datos o más clásicos como ante entrenamientos más complejo o con volúmenes grandes de datos usando por ejemplo MLlib que es la librería por defecto de ML que viene con Spark, o Sparkling (Librería de H2O para Spark).

Fue anunciado inicialmente en el “Spark and AI Summit” de 2018 por Databricks, siendo su principal contributor, no parando desde entonces de sacar nuevas versiones, estando en el momento de escribir este post (Mayo 2021) en su versión 1.16.

El objetivo de esta plataforma es el de cubrir principalmente los siguientes aspectos.

  • Existen muchas herramientas que cubren diferentes partes del desarrollo de modelos de ML, pero MLflow trata de cubrir todo el ciclo de vida.
  • Todo Data Scientist se ha enfrentado a la ardua tarea de realizar un seguimiento de los diferentes modelos sobre los que se trabaja, ya sea por temas de Feature Engineering o Hyperparameter Tunning, y de saber qué resultados se obtuvieron, con que código, etc, y MLflow simplifica notablemente este trabajo.
  • Registrado de los modelos, de forma que sepamos que modelos tenemos, que versiones se encuentran en producción, o que otras están en Preproducción lista para poder desplegarse.
  • Una vez que tenemos nuestros modelos listos, su despliegue se suele volver complicado, y es en muchos necesario tener perfiles específicos que se encarguen de estos despliegues, y MLFlow permite realizar un despliegue de nuestros servicios de una forma rápida y sencilla

Por ello MLflow se puede dividir en 4 módulos separados que tratan de dar respuesta a cada uno de estos puntos y que veremos en detalle en los siguientes puntos.

Todos los ejemplos y ventana y uso, están sacadas de la versión de MLflow dentro de Databricks, por lo que si usáis el MLflow proporcionado en su versión de código abierto puede haber variaciones.

Módulos de MLflow

MLflow Tracking

Dentro del desarrollo de modelos de Machine Learning, sea cual sea el tipo, es que no se suele acertar a la primera, ni a la segunda, ni en subsiguientes pruebas… es decir, hay que hacer muchas iteraciones sobre nuestros datos y modelos hasta encontrar con los valores adecuados que hacen de nuestro modelo el adecuado, para ello el sistema de tracking nos permite almacenar y comparar cada uno de los entrenamientos realizados, trazándonos los siguientes elementos:

  • Seguimiento de los Hiperparámetros que consideramos adecuados para nuestro entrenamiento, para encontrar que combinación nos da los mejores resultados.

 

  • En cada una de estas iteraciones, tendremos unos resultados o predicciones, los cuales estarán catalogados según las métricas oportunas, existen diversas métricas, que se pueden aplicar, y según el problema que deseemos resolver, Precision, Recall, Curva ROC, etc. pero lo importante es que esta u otras métricas nos darán detalle sobre la bondad de nuestro modelo.

 

  • Por último, a lo largo de los entrenamientos podemos cambiar nuestro código para incluir nuevas variables, cálculo de estas Features nuevas, etc. por lo que también es importante el tener para cada entrenamiento cual es el código que se ejecutó para dicho entrenamiento.

 

En la siguiente imagen tenemos el detalle sobre tres modelos ejecutados de diverso tipo, en donde tenemos almacenados los parámetros o Hiperparámetros usados, así como las métricas o resultados de los entrenamientos, que nos dan una idea de la bondad del modelo.

Si entramos ya en cada uno de estos entrenamientos, aparte de tener mucho más detalle de las métricas, y parámetros, etc. en la parte superior nos encontramos con la opción de volver a ejecutar o reproducir el entrenamiento o poder ver la versión del notebook usado en dicho entrenamiento pulsando el campo identificado como Source, es decir podemos saber exactamente con código con que transformaciones se usó para ese modelo en concreto.

MLflow Projects:

Dentro de cada uno de los modelos que generamos, adicionalmente a los detalles de la propia ejecución, como vimos anteriormente, tendremos la información del modelo resultante, en donde se nos proporciona como un paquete todo lo necesario para poder desplegar nuestro proyecto o modelo en casi cualquier entorno:

Donde tenemos específicamente:

  • MLmodel: Los detalles del modelo

 

 

  • yaml: Información sobre el modelo en formato conda.

 

 

  • model.pkl: el formato pkl, es un estándar para el empaquetado y distribución de modelos de ML, de forma que podemos desplegar nuestro modelo en flask, en un contenedor, etc.

 

Model Registry

Pero el trabajo de un Data Scientist no acaba aquí, una vez seleccionado el modelo que mejor funciona, tenemos que tener la capacidad de almacenarlo o registrarlo que algún sitio para tenerlos localizado y versionado, ya que con el tiempo nuestros modelos pueden sufrir de algún tipo de decaimiento en las previsiones, o simplemente que hemos seguido trabajando sobre él, y tenemos una nueva versión mejorada, para ello, aparte de registrarlo y darles una versión como vemos en la siguiente imagen, podremos indicar que modelo se encuentra en Produccion y cual em Staging (preproduction).

Aquí es importante recalcar, que sólo podemos tener uno en ese estado, es decir, si tenemos una versión en Staging y queremos pasarlo a producción, el anterior se pasará al Vault o al histórico, y lo mismo si queremos poner otro modelo en Staging, el anterior pasará al Vault.

 

MLflow Models

Por último, y no menos importante está el tema de los despliegues, seguramente muchos habremos sufrido esto y lo complicado que es poner nuestros modelos en producción, aunque si es verdad que cada vez es mas común que ciertas herramientas nos den faciliten ese proceso, y MLflow en el entorno de Databricks, nos permite que una vez que tenemos nuestro modelo preparado, registrado y marcado para puesta en producción, el montar un Cluster de Databricks que me ponga los modelos en ejecución y pueda realizar peticiones como servicios Rest, es cuestión de darle a un botón.

 

Un punto importante que no cubrimos en este Post, pero que se debería tener en cuanta es que durante la vida de nuestro modelo, es buena idea monitorizarlo para comprobar si a medida que va pasando el tiempo (y llegan nuevos datos) sigue funcionando igual de bien. De esta forma, se puede ver si una bajada en el performance es debida a cambios en los datos (data drift), en el “concepto” de la variable target (concept drift), etc. y una vez detectado y solucionado el problema, ya se puede volver a entrenar, tunear hiperparámetros del modelo, etc. y marcar este nuevo modelo como modelo en producción en MLflow

Conclusión

Para ir cerrando, este framework proporciona una gran ayuda para todos los Data Scientist, ya que permitirá tener un control sobre todos los entrenamientos, las valoraciones, las validaciones de los modelos, etc. el entender qué tenemos en producción, qué en la recámara, en qué estamos trabajando, etc. y además nos permite desplegar de una forma rápida y sencilla nuestros modelos, para ser consumidos, y además el framework es gratuito… quien puede dar más.

 

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

NEWSLETTER