Corso
MLOps è una parte importante del machine learning perché aiuta ad automatizzare l’addestramento e la distribuzione dei modelli. Questa automazione può velocizzare lo sviluppo e la messa in produzione dei modelli e contribuire a garantire che vengano distribuiti correttamente. MLOps può anche aiutare a monitorare le prestazioni dei modelli e a identificare in modo proattivo i problemi che potrebbero dover essere risolti in produzione.
Il panorama di MLOps nel 2022 comprende vari strumenti e servizi che aiutano le organizzazioni ad automatizzare la creazione, l’addestramento e la distribuzione dei modelli di machine learning. Questi strumenti e servizi sono progettati per lavorare insieme e rendere il processo di MLOps più efficiente e semplice da gestire. MLflow è uno di questi strumenti importanti che esploreremo in questo post.
MLflow è una piattaforma open source per l’intero ciclo di vita del machine learning. Permette ai data scientist di tracciare gli esperimenti, riprodurre le esecuzioni e pubblicare i modelli come endpoint. In questo articolo, approfondiremo che cos’è MLflow e come puoi sfruttare questa fantastica piattaforma open source per tracciare e distribuire i tuoi esperimenti di machine learning.
Se vuoi approfondire MLOps, dai un’occhiata al nostro tutorial su Machine Learning, Pipeline, Deployment e MLOps.
Che cos’è MLflow
MLflow è una piattaforma open source per gestire l’intero ciclo di vita del machine learning. Fornisce un punto centrale per tracciare gli esperimenti, condividere codice e modelli e distribuire i modelli in produzione. MLflow include anche diversi algoritmi e pacchetti integrati per i toolkit ML più diffusi. Ha quattro funzioni principali:
- MLflow Tracking. Tiene traccia degli esperimenti di machine learning per registrare, analizzare e confrontare risultati e parametri.
- MLflow Projects. Impacchetta il codice di machine learning in una forma riutilizzabile e riproducibile da condividere con altri data scientist o da spostare in un ambiente di produzione.
- MLflow Models. Gestisce e distribuisce modelli provenienti da diverse librerie di machine learning su varie piattaforme di serving e inferenza, come Amazon Sagemaker.
- MLflow Model Registry. Fornisce un repository centralizzato per gestire in modo collaborativo l’intero ciclo di vita di un modello MLflow, inclusi versionamento, transizioni di stato e annotazioni.

Fonte immagine: https://www.databricks.com/wp-content/uploads/2021/02/mlflow-components2.png
MLflow non è legato a una singola libreria. Poiché tutte le funzioni sono accessibili tramite una REST API e un’interfaccia a riga di comando, puoi usarlo con qualsiasi libreria di machine learning e in qualsiasi linguaggio di programmazione. Il progetto include per comodità anche una API Python, una API R e una API Java.
Concetti chiave in MLflow
MLflow Tracking
Quando esegui codice di machine learning, il componente MLflow Tracking fornisce un’API e un’interfaccia grafica (UI) per registrare parametri, versioni del codice, metriche e file di output. In seguito puoi visualizzare i risultati della registrazione. Grazie a MLflow Tracking, puoi anche registrare e interrogare gli esperimenti usando le API Python, REST, R e Java.
MLflow Tracking è organizzato attorno al concetto di run. Ogni run registra le informazioni e le metadati chiave come orario di inizio e fine, file sorgente, parametri, artifact, metriche, tag, ecc.
Puoi registrare le run usando le API Python, R o Java di MLflow da qualsiasi posizione, indipendentemente da dove viene eseguito il tuo codice. Puoi, ad esempio, registrarle in un programma standalone, su una macchina cloud remota o in un notebook interattivo.
Allo stesso modo, puoi organizzare le singole run in esperimenti, ovvero raccolte di run raggruppate per uno scopo specifico. Per creare un esperimento puoi usare l’interfaccia a riga di comando (CLI), il metodo mlflow.create experiment() o la REST API. Gli utenti possono creare esperimenti anche tramite l’UI di MLflow.
Se ti serve, puoi salvare localmente su file le registrazioni delle run MLflow, caricarle in un database compatibile con SQLAlchemy oppure inviarle a un server di tracking remoto. Per impostazione predefinita, la MLflow Python API registra le run localmente in file nella directory mlruns del percorso in cui è stato eseguito il tuo programma. In seguito, puoi visualizzare le run registrate avviando l’applicazione mlflow ui.

Fonte immagine: https://mlflow.org/docs/latest/_images/scenario_1.png
MLflow Projects
I MLflow Projects sono un modo per strutturare il tuo codice di machine learning in forma riutilizzabile e riproducibile. Puoi usare i project con qualsiasi libreria di machine learning e ambiente di sviluppo. Ogni project è composto da una directory contenente un file MLproject, che descrive l’ambiente e i parametri del project, e un insieme di file con il codice di machine learning.
MLflow supporta attualmente i seguenti tipi di ambienti per i project:
- Ambiente Conda,
- Ambiente Virtualenv,
- Container Docker,
- Ambiente di sistema.
Aggiungendo un file MLProject, che è semplicemente un file YAML, puoi avere un controllo più granulare sul project MLflow. Qui sotto trovi un esempio di file MLProject:

Fonte: https://mlflow.org/docs/latest/projects.html#overview
Quando il project non contiene un file MLproject, MLflow assume alcune convenzioni predefinite, ad esempio:
- Il nome del project è il nome della directory.
- Si usa l’ambiente Conda, specificato nel file conda.yaml, che deve trovarsi nella stessa directory.
- Qualsiasi file .py o .sh può essere il punto di ingresso.
- Per impostazione predefinita, i punti di ingresso non hanno parametri.

MLflow Models
Un MLflow Model è un formato standardizzato per impacchettare modelli di machine learning che possono poi essere utilizzati in vari strumenti a valle. Questo può includere il serving in tempo reale tramite una REST API o processi di inferenza batch. MLflow Model è uno dei componenti chiave di MLflow. Specifica un protocollo che consente di salvare un modello in diverse "flavor", ognuna delle quali può essere compresa da un insieme specifico di strumenti a valle.
Ogni MLflow Model è in realtà una directory che memorizza file arbitrari insieme a un file MLmodel posizionato alla base della directory, che può definire diverse flavor con cui visualizzare il modello. Questi file sono collettivamente denominati MLflow Model.
L’idea alla base della potenza dei MLflow Models è l’uso delle flavor, che fungono da standard per gli strumenti di deployment per comprendere il modello. Questo permette agli sviluppatori di creare strumenti in grado di interagire con modelli di qualsiasi libreria ML senza dover integrare ogni strumento con ogni libreria. Una flavor "standard" supportata da tutti gli strumenti di deployment integrati in MLflow è "Python Function", che descrive come eseguire il modello come funzione Python.
Esempio di directory di MLflow Models con flavor Scikit-learn:

Fonte immagine: https://mlflow.org/docs/latest/models.html
MLflow supporta nativamente le seguenti librerie (come flavor di modello):
- Scikit-learn
- TensorFlow
- PyTorch
- Keras
- Spark MLlib
- XGBoost
- LightGBM
- CatBoost
- Spacy
- Fastai
- Statsmodels
- Prophet
- Funzione Python (generica)
- Funzione R (generica)
- Vedi l’elenco completo qui
MLflow Model Registry
MLflow Model Registry è un repository centrale per archiviare e versionare i modelli di ML. Fornisce un modo per tracciare la genealogia dei modelli, confrontarli e distribuirli.
Il componente MLflow Model Registry è un insieme di API e un’interfaccia utente per gestire in modo collaborativo l’intero ciclo di vita di un MLflow Model.
Per accedere al Model Registry tramite interfaccia utente (UI) o API è necessario utilizzare un backend store con database, se vuoi usare il Model Registry.
Registrare un modello usando la UI di MLflow:

Fonte immagine: https://mlflow.org/docs/latest/model-registry.html#concepts
MLflow Pipelines (sperimentale)
MLflow Pipelines è una nuova funzionalità ed è ancora in modalità sperimentale.
Lo sviluppo e la produzione di applicazioni di machine learning sono semplificati e standardizzati grazie a MLflow Pipelines, un framework con opinioni definite per strutturare i workflow MLOps. Grazie a MLflow Pipelines, i data scientist hanno più tempo da dedicare alla creazione di modelli di qualità, potendo al contempo seguire con facilità gli standard del settore per realizzare deliverable di machine learning pronti per la produzione.
MLflow Pipelines consente anche a machine learning engineer e team DevOps di incorporare questi modelli nelle app e rilasciarli in produzione in modo fluido.
MLflow Pipelines offre template di pipeline di qualità produttiva per problemi tipici di machine learning, come regressione e classificazione, e per operazioni MLOps, come il batch scoring. Le pipeline sono strutturate come repository git con file di configurazione basati su YAML e codice Python. Questo offre agli sviluppatori un approccio dichiarativo alla costruzione di applicazioni ML, riducendo il boilerplate.
MLflow Pipelines implementa anche un executor con cache per gli step della pipeline. Questo garantisce che gli step vengano eseguiti solo quando cambia il codice o la configurazione corrispondente. In questo modo, data scientist, machine learning engineer e team DevOps possono iterare molto rapidamente nei rispettivi ambiti. Inoltre, l’esecuzione delle pipeline e l’esame del loro output possono essere effettuati tramite API e interfaccia a riga di comando (CLI) fornite da MLflow.
|
Distribuire modelli di machine learning in produzione sembra facile con gli strumenti moderni, ma spesso finisce con una delusione perché il modello va peggio in produzione che in sviluppo. Se vuoi imparare a progettare workflow di machine learning in Python che resistano alla prova del tempo, dai un’occhiata al nostro corso Designing Machine Learning Workflows in Python. |
MLflow vs. Kubeflow
Ora che hai capito cos’è MLflow, affrontiamo una domanda molto comune nel campo: qual è la differenza tra MLflow e Kubeflow?
Prima di tutto, che cos’è Kubeflow?
Kubeflow è un progetto open source che raccoglie un set curato di strumenti e framework. L’obiettivo principale di Kubeflow è rendere semplice sviluppare, distribuire e gestire workflow di machine learning portabili e scalabili.
Kubeflow è costruito sopra Kubernetes, una piattaforma open source per l’esecuzione e l’orchestrazione di container. Kubernetes è progettato per funzionare in modo coerente in ambienti diversi, ed è questo l’aspetto chiave del funzionamento di Kubeflow.
Per saperne di più su Kubeflow, leggi il nostro tutorial dettagliato su Kubeflow.
Confrontando MLflow e Kubeflow, l’unica somiglianza tra questi due progetti è che sono entrambi open source, ma servono esigenze completamente diverse. Kubeflow è un sistema open source di orchestrazione di container per sviluppare, distribuire e gestire applicazioni di machine learning su Kubernetes. MLflow, invece, è una libreria Python per il tracciamento degli esperimenti e il versionamento/distribuzione dei modelli, indipendentemente dall’ambiente di orchestrazione.
Tutorial su MLflow
Usare MLflow è estremamente semplice. Bastano poche righe di codice per integrare il logging di MLflow nel tuo codice esistente. Ma prima devi installare MLflow con pip.
# install mlflow
pip install mlflow
Creiamo un semplice script Python per addestrare un modello di regressione logistica e registrare metrica e modello usando MLflow. Questo è un esempio ufficiale di MLflow, riprodotto da qui.
import numpy as np
from sklearn.linear_model import LogisticRegression
import mlflow
import mlflow.sklearn
if __name__ == "__main__":
X = np.array([-2, -1, 0, 1, 2, 1]).reshape(-1, 1)
y = np.array([0, 0, 1, 1, 1, 0])
lr = LogisticRegression()
lr.fit(X, y)
score = lr.score(X, y)
print("Score: %s" % score)
mlflow.log_metric("score", score)
mlflow.sklearn.log_model(lr, "model")
print("Model saved in run %s" % mlflow.active_run().info.run_uuid)
OUTPUT:
>>> Score: 0.6666666666666666
>>> Model saved in run 9def2bd1c55b4f0985aa5c050b8f71cd
Puoi avviare l’UI di MLflow digitando "mlflow ui" nel terminale della riga di comando nella stessa directory in cui si trova il tuo file Python.
mlflow ui
Quindi vai su https://localhost:5000 e vedrai questa pagina:

Puoi vedere che abbiamo solo una registrazione, cioè il modello che abbiamo addestrato e registrato nello script sopra. Clicca sul nome e vedrai una pagina dettagliata:

|
MIGLIORA LE TUE COMPETENZE ORA! ISCRIVITI OGGI a Machine Learning Scientist with Python Padroneggia le competenze essenziali per ottenere un lavoro come machine learning scientist. Amplierai le tue abilità di programmazione in Python con gli strumenti per eseguire apprendimento supervisionato, non supervisionato e deep learning. Imparerai:
|
Conclusione
MLflow è una piattaforma open source e un ottimo strumento per gestire l’intero ciclo di vita del machine learning. È stato creato da Databricks, l’azienda dietro la popolare piattaforma Apache Spark, ed è progettato per funzionare con qualsiasi libreria, algoritmo o linguaggio di machine learning.
MLflow offre numerosi vantaggi per sviluppatori di machine learning e data scientist. Fornisce un punto centrale per tracciare gli esperimenti e gestire i progetti di machine learning. Questo può essere molto utile per la collaborazione, perché permette ai diversi membri del team di vedere cosa stanno facendo gli altri e confrontare i risultati.
MLflow può automatizzare il workflow di machine learning, dal preprocessing dei dati all’addestramento del modello fino alla distribuzione. Questo può far risparmiare tempo e fatica e rendere più semplice riprodurre i risultati.
In generale, MLflow è uno strumento prezioso per gestire i progetti di machine learning. Può aiutarti a tracciare gli esperimenti, automatizzare il workflow e ottimizzare i modelli. Se stai lavorando su progetti di machine learning, dovresti sicuramente dare un’occhiata a MLflow.
|
Se vuoi fare upskilling e comprendere le basi del Machine Learning e la sua applicazione nel mondo del business, dai un’occhiata al nostro corso Machine Learning for Business su DataCamp. |

