En projectes de Machine Learning, és habitual generar múltiples versions d’un mateix model, des d’algunes amb simples canvis en hiperparàmetres, passant per altres amb modificacions en l’estructura o arquitectura del model, fins aquelles que utilitzen diferents conjunts de dades d’entrenament. Tot això pot donar lloc a un elevat nombre d’execucions que han de ser gestionades degudament.
Una bona organització dels diferents models, juntament amb les seves mètriques i configuracions, és fonamental per a avaluar quin d’ells ofereix un millor rendiment i és el que es vol utilitzar, així com per a facilitar la seva gestió al llarg de tot el cicle de vida del model.
Aquest tipus de gestió forma part del paradigma MLOps (Machine Learning Operations), que incorpora bones pràctiques per a implementar i mantenir models de machine learning de manera de confiança en producció, mantenint un historial comprensible de tots els models aplicats, indicant els fiqui-arguments utilitzats i els resultats dels tests de validació.
Aquest article explora la funcionalitat d’integració de GitLab juntament amb MLflow per a optimitzar el procés de desenvolupament i desplegament de models de machine learning.
MLflow[1]
MLflow es tracta d’una plataforma de codi obert ideada per a donar suport als equips i professionals de projectes de machine learning, centrant-se en el cicle de vida dels models i assegurant la traçabilitat i reproduicitat de cada fase. MLflow està organitzat en 4 components distintes, que poden usar-se per separades o totes elles conjuntament. Les components són les següents:
- MLflow Tracking: es tracta d’una API que permet mantenir un seguiment de paràmetres, codi i resultats d’experiments de ML. A més, ofereix una interfície web interactiva que facilita la comparació entre execucions.
- MLflow Projects: són una convenció per a organitzar i descriure codi de manera que sigui reutilitzable per companys o eines automatitzades.
- MLflow Models: és un format estàndard per a empaquetar models de Machine Learning facilitant la seva reutilització i desplegament en diferents entorns.
- MLflow Model Registry: actua com un magatzem de models, mantenint la traçabilitat d’aquests al costat dels paràmetres.
Integració de GitLab amb MLflow
Recentment, GitLab, una coneguda plataforma que ofereix potents eines de col·laboració i control de versions, ha inclòs la compatibilitat amb MLflow, permetent l’ús d’aquest com backend. De manera similar al codi, permet la publicació dels models
i metadades associades, directament en el registre de GitLab. A més, els resultats dels models es poden consultar de forma totalment transparent directament des de la interfície web de GitLab.
La integració és duta a terme mitjançant els components Model registry[2] i Model experiment tracking[3] proporcionats per GitLab i totalment compatibles amb la API de MLflow Tracking, la qual pot ser usada des del codi mitjançant MLflow Client[4].
El següent diagrama il·lustra com es duu a terme la integració de GitLab amb el component de MLflow Tracking: el codi registra paràmetres, mètriques i artefactes (com el model en si) mitjançant la API de MLflow, i aquestes són emmagatzemades en GitLab i accessibles i visibles per tot l’equip. Les mètriques i metadades dels experiments són guardats en la base de dades de GitLab mentre que els artefactes, que són arxius i objectes pesats, són emmagatzemats en el Package registry de GitLab.

Exemple de flux de treball
A continuació, es mostra un exemple de com funciona el flux de treball per a treballar amb models de ML aprofitant la integració de GitLab amb MLflow. No obstant això, primer fa falta distingir entre els components de Model registry i Model experiments tracking de GitLab.
El component de Model registry serveix com a repositori per a la gestió de models d’aprenentatge automàtic al llarg del seu cicle de vida. Permet comparar versions de models i monitorar la seva evolució al llarg del temps.

El component de Model experiment tracking de GitLab permet realitzar el seguiment d’experiments de machine learning amb el client de MLflow. Els experiments estan associats als models guardats en el Model Registry. Quan mitjançant codi es crea una execució de MLflow d’un experiment es pot associar a un model ja registrat en el Model Registry o si no es genera un nou a més del seu experiment associat, amb nom “[model]” seguit del nom del nou model.

Un experiment es una col·lecció de diferents execucions de models comparables entre sí, normalment compartint el set de paràmetres y de mètriques usades per a la seva evaluación.

Després de l’execució d’un nou model, els diferents artefactes, com a transformadors, codificadors i el propi model, s’emmagatzemen en la secció de Artifacts dins de l’experiment. Mentrestant, les mètriques d’entrenament (com precision, recall, accuracy, etc.) es registren en la secció de Performance.

D’aquesta manera, fent ús de la integració de GitLab amb MLflow es pot tenir un seguiment de tots els models amb els seus respectius experiments i els seus respectius paràmetres, mètriques i artefactes directament en GitLab, estant disponibles en tot moment.
El component de Model Registry pot ser usat per al desplegament d’un model en producció. La selecció de la versió del model a desplegar continua sent un procés manual basat en l’avaluació de les mètriques obtingudes. Quan l’usuari triï una execució satisfactòria per a utilitzar com a model per a fer inferència, haurà d’anar a l’experiment en específic i prémer el botó de promote per a crear una nova versió del model i aquesta serà guardada com una nova versió en el Model Registry. Llavors, la versió del model que ha de ser utilitzada per a fer inferència és l’última versió disponible en el Model Registry.
Encara que tenir models en el repositori és extremadament útil, haver de carregar el model localment cada vegada que s’intenta fer inferència és poc eficient, per la qual cosa es pot seguir l’estratègia de tenir una còpia del model localment que s’actualitzi periòdicament o una vegada algú hagi creat una nova versió del model.
Cal esmentar que la integració de MLflow amb GitLab encara es troba en desenvolupament i falten funcionalitats per implementar, per la qual cosa en un futur podria ser possible aplicar millores en el procés de registre i promoció de models per al seu desplegament. No obstant això, aquesta integració ja ofereix una funcionalitat de gran utilitat per a tenir un seguiment detallat i històric de tots els models i experiments d’un projecte, accessibles per tot l’equip en tot moment.
[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