Tracciamento degli esperimenti di Machine Learning utilizzando MLflow

Tracciamento esperimenti di Machine Learning con MLflow

Introduzione

Il campo del machine learning (ML) sta rapidamente espandendosi e ha applicazioni in molti settori diversi. Tenere traccia degli esperimenti di machine learning utilizzando MLflow e gestire le prove necessarie per costruirli diventa più difficile man mano che diventano più complicati. Ciò può causare molti problemi per gli scienziati dei dati, come:

  • Perdita o duplicazione degli esperimenti: Tenere traccia di tutti i molti esperimenti condotti può essere impegnativo, aumentando il rischio di perdita o duplicazione degli esperimenti.
  • Riproducibilità dei risultati: Potrebbe essere difficile replicare i risultati di un esperimento, rendendo difficile individuare problemi e migliorare il modello.
  • Mancanza di trasparenza: Potrebbe essere difficile fidarsi delle previsioni di un modello poiché può essere confuso capire come è stato creato un modello.
Foto di CHUTTERSNAP su Unsplash

Data la sfide sopra elencate, è importante avere uno strumento in grado di tracciare tutti gli esperimenti di ML e registrare le metriche per una migliore riproducibilità e collaborazione. Questo articolo esplorerà e mostrerà MLflow, un tool open-source per il tracciamento degli esperimenti di ML e la gestione dei modelli con esempi di codice.

Obiettivi di apprendimento

  • In questo articolo, intendiamo ottenere una solida comprensione del tracciamento degli esperimenti di machine learning e del registro dei modelli utilizzando MLflow.
  • Inoltre, impareremo come i progetti ML vengono consegnati in modo riutilizzabile e riproducibile.
  • Infine, impareremo cos’è un LLM e perché è necessario tener traccia dei LLM per lo sviluppo delle applicazioni.

Cos’è MLflow?

Logo MLflow (fonte: sito ufficiale)

MLflow è un software per il tracciamento degli esperimenti di machine learning e la gestione dei modelli che semplifica la gestione dei progetti di machine learning. Fornisce una varietà di strumenti e funzioni per semplificare il flusso di lavoro di ML. Gli utenti possono confrontare e replicare i risultati, registrare parametri e metriche e seguire gli esperimenti di MLflow. Inoltre, semplifica il confezionamento e il deployment dei modelli.

Con MLflow, è possibile registrare parametri e metriche durante l’addestramento.

# importa la libreria mlflow
import mlflow

# inizia il tracciamento di mlflow
mlflow.start_run()
mlflow.log_param("learning_rate", 0.01)
mlflow.log_metric("accuratezza", 0.85)
mlflow.end_run()

MLflow supporta anche la versioning e la gestione dei modelli, consentendo di tenere traccia e organizzare facilmente diverse versioni dei modelli:

import mlflow.sklearn

# Addestra e salva il modello
modello = addestra_modello()
mlflow.sklearn.save_model(modello, "modello")

# Carica una specifica versione del modello
modello_caricato = mlflow.sklearn.load_model("modello", versione="1")

# Servi il modello caricato per le previsioni
previsioni = modello_caricato.predict(data)

Inoltre, MLflow ha un registro dei modelli che consente a molti utenti di monitorare, condividere e distribuire modelli per lo sviluppo collaborativo dei modelli.

MLflow consente anche la registrazione di modelli in un registro dei modelli, ricette e plugin, insieme a un ampio tracciamento dei modelli di linguaggio. Ora, esamineremo gli altri componenti della libreria MLflow.

MLflow – Tracciamento degli esperimenti

MLflow ha molte funzionalità, tra cui il tracciamento degli esperimenti per tenere traccia degli esperimenti di machine learning per qualsiasi progetto di ML. Il tracciamento degli esperimenti è un insieme unico di API e UI per la registrazione di parametri, metriche, versioni del codice e file di output per scopi di diagnosi. Il tracciamento degli esperimenti di MLflow ha API Python, Java, REST e R.

Ora, guarda l’esempio di codice del tracciamento degli esperimenti di MLflow utilizzando la programmazione Python.

import mlflow
import mlflow.sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from mlflow.models.signature import infer_signature

# Carica e preprocessa il tuo dataset
data = carica_dataset()
X_train, X_test, y_train, y_test = train_test_split(data["features"], data["labels"], test_size=0.2)

# Inizia un esperimento di MLflow
mlflow.set_experiment("Mio Esperimento")
mlflow.start_run():
      # Registra i parametri
      mlflow.log_param("n_estimators", 100)
      mlflow.log_param("max_depth", 5)

      # Crea e addestra il modello
      modello = RandomForestClassifier(n_estimators=100, max_depth=5)
      modello.fit(X_train, y_train)

      # Effettua previsioni sul set di test
      y_pred = modello.predict(X_test)
      signature = infer_signature(X_test, y_pred)

      # Registra le metriche
      accuratezza = accuracy_score(y_test, y_pred)
      mlflow.log_metric("accuratezza", accuratezza)

      # Salva il modello
      mlflow.sklearn.save_model(modello, "modello")

# Chiudi l'esecuzione di MLflow
mlflow.end_run()

Nel codice sopra, importiamo i moduli da MLflow e dalla libreria sklearn per eseguire un tracciamento dell’esperimento del modello. Dopo di ciò, carichiamo il dataset di esempio per procedere con le API di esperimenti di mlflow. Stiamo utilizzando le classi start_run(), log_param(), log_metric() e save_model() per eseguire gli esperimenti e salvarli in un esperimento chiamato “Il mio esperimento”.

Oltre a ciò, MLflow supporta anche il logging automatico dei parametri e delle metriche senza chiamare esplicitamente ogni funzione di tracciamento. È possibile utilizzare mlflow.autolog() prima del codice di addestramento per registrare tutti i parametri e gli artefatti.

MLflow — Registro dei modelli

Illustrazione del registro dei modelli (fonte: Databricks)

Il registro dei modelli è un registro centralizzato dei modelli che archivia gli artefatti dei modelli utilizzando un insieme di API e un’interfaccia utente per collaborare in modo efficace con l’intero flusso di lavoro MLOps.

Fornisce una completa genealogia del salvataggio dei modelli di machine learning con salvataggio dei modelli, registrazione dei modelli, versionamento dei modelli e staging all’interno di un’unica interfaccia utente o utilizzando un insieme di API.

Diamo un’occhiata all’interfaccia utente del registro dei modelli MLflow nello screenshot qui sotto.

Screenshot dell'interfaccia utente di mlflow

Lo screenshot sopra mostra gli artefatti dei modelli salvati su MLflow UI con il pulsante “Registra modello”, che può essere utilizzato per registrare modelli su un registro dei modelli. Una volta registrato il modello, verrà mostrato con la sua versione, il timestamp e lo stage sulla pagina dell’interfaccia utente del registro dei modelli. (Per ulteriori informazioni, fare riferimento allo screenshot sottostante.)

Interfaccia utente del registro dei modelli MLflow

Come discusso in precedenza, oltre al flusso di lavoro dell’interfaccia utente, MLflow supporta il flusso di lavoro delle API per archiviare modelli nel registro dei modelli e aggiornare lo stage e la versione dei modelli.

# Registra il modello sklearn come versione 1
mlflow.sklearn.log_model(
        sk_model=model,
        artifact_path="sklearn-model",
        signature=signature,
        registered_model_name="sk-learn-random-forest-reg-model",
   )

Il codice sopra registra il modello e lo registra se non esiste già. Se il nome del modello esiste, viene creata una nuova versione del modello. Ci sono molte altre alternative per registrare modelli nella libreria MLflow. Consiglio vivamente di leggere la documentazione ufficiale a riguardo.

MLflow — Progetti

Un altro componente di MLflow sono i progetti MLflow, che vengono utilizzati per confezionare il codice di data science in modo riutilizzabile e riproducibile per qualsiasi membro del team di dati.

Il codice del progetto è composto dal nome del progetto, dal punto di ingresso e dalle informazioni sull’ambiente, che specificano le dipendenze e altre configurazioni del codice del progetto per eseguire il progetto. MLflow supporta ambienti come Conda, ambienti virtuali e immagini Docker.

In poche parole, il file del progetto MLflow contiene i seguenti elementi:

  • Nome del progetto
  • File dell’ambiente
  • Punti di ingresso

Diamo un’occhiata all’esempio del file del progetto MLflow.

# nome del progetto
name: My Project

python_env: python_env.yaml
# o
# conda_env: my_env.yaml
# o
# docker_env:
#    image:  mlflow-docker-example

# scrivi i punti di ingresso
entry_points:
  main:
    parameters:
      data_file: path
      regularization: {type: float, default: 0.1}
    command: "python train.py -r {regularization} {data_file}"
  validate:
    parameters:
      data_file: path
    command: "python validate.py {data_file}"

Il file sopra mostra il nome del progetto, il nome del file di configurazione dell’ambiente e i punti di ingresso del codice del progetto per l’esecuzione del progetto durante il runtime.

Ecco l’esempio del file di ambiente Python python_env.yaml:

# Versione di Python richiesta per eseguire il progetto.
python: "3.8.15"
# Dipendenze necessarie per compilare i pacchetti. Questo campo è facoltativo.
build_dependencies:
  - pip
  - setuptools
  - wheel==0.37.1
# Dipendenze necessarie per eseguire il progetto.
dependencies:
  - mlflow==2.3
  - scikit-learn==1.0.2

MLflow — Tracciamento LLM

Come abbiamo visto, gli LLM stanno prendendo il sopravvento nell’industria tecnologica come mai prima. Con l’aumento delle applicazioni alimentate da LLM, gli sviluppatori stanno sempre più adottando gli LLM nei loro flussi di lavoro, creando la necessità di tracciare e gestire tali modelli durante il processo di sviluppo.

Cosa sono gli LLM?

I Large Language Models sono un tipo di modello di rete neurale sviluppato utilizzando l’architettura del transformer con parametri di addestramento nell’ordine dei miliardi. Tali modelli possono svolgere una vasta gamma di compiti di elaborazione del linguaggio naturale, come la generazione di testo, la traduzione e la risposta alle domande, con elevati livelli di fluidità e coerenza.

Perché abbiamo bisogno del tracciamento LLM?

A differenza dei modelli di machine learning classici, gli LLM devono monitorare le richieste per valutare le prestazioni e trovare il miglior modello di produzione. Gli LLM hanno molti parametri come top_k, temperatura, ecc., e diverse metriche di valutazione. Diversi modelli con diversi parametri producono risultati vari per determinate query. Pertanto, è importante monitorarli per identificare l’LLM più performante.

Le API di tracciamento LLM di MLflow vengono utilizzate per registrare e monitorare il comportamento degli LLM. Registrano input, output e richieste inviate e restituite dall’LLM. Forniscono anche un’interfaccia utente completa per visualizzare e analizzare i risultati del processo. Per saperne di più sulle API di tracciamento LLM, consiglio di visitare la loro documentazione ufficiale per una comprensione più dettagliata.

Conclusione

In conclusione, MLflow è una piattaforma estremamente efficace ed esaustiva per la gestione dei flussi di lavoro e degli esperimenti di machine learning. Con funzionalità come la gestione dei modelli e il supporto per varie librerie di machine learning. Con i suoi quattro componenti principali – tracciamento degli esperimenti, registro dei modelli, progetti e tracciamento LLM – MMLflow fornisce una soluzione di gestione del flusso di lavoro di machine learning end-to-end senza soluzione di continuità per la gestione e il rilascio di modelli di machine learning.

Punti chiave

Guardiamo le lezioni chiave tratte dall’articolo.

  1. Il tracciamento degli esperimenti di machine learning consente agli scienziati dei dati e agli ingegneri di machine learning di tenere traccia e registrare facilmente i parametri e le metriche del modello.
  2. Il registro dei modelli aiuta a memorizzare e gestire il modello di machine learning in un repository centralizzato.
  3. I progetti MLflow semplificano il codice del progetto nell’impacchettamento e nel rilascio del codice di machine learning, rendendo più facile riprodurre i risultati in diversi ambienti.

Domande frequenti

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e vengono utilizzati a discrezione dell’autore.