Experiment Tracking
Il tracciamento degli esperimenti registra parametri, versioni di codice e dati, metriche e artefatti di ogni esecuzione di addestramento ML, così da poter confrontare e riprodurre le esecuzioni.
Il tracciamento degli esperimenti consiste nel registrare in un unico archivio consultabile ogni aspetto di ciascuna esecuzione di training di machine learning, incluse la versione del codice e dei dati, le impostazioni, l'ambiente, le metriche nel tempo e i file di output come pesi e grafici. Un progetto che prova decine di learning rate, impostazioni di data augmentation e dimensioni del modello produce esecuzioni simili tra loro sul disco; il tracciamento conserva la configurazione associata a ciascun risultato, così mesi dopo puoi confrontare e riprodurre l'esecuzione migliore e risalire alla sua origine. TensorBoard, rilasciato insieme a TensorFlow nel 2015, ha reso standard i grafici di training in tempo reale; nel 2018 Databricks ha rilasciato MLflow come open source, includendo il tracciamento tra i suoi tre componenti originali. Anche Weights & Biases, Comet, ClearML e DVC sono strumenti di tracciamento molto usati.
Cosa registra un tracker#
Ogni esecuzione riceve un ID univoco e appartiene a un esperimento, un gruppo nominato di esecuzioni correlate. Un tipico record di esecuzione contiene:
- Iperparametri: Learning rate, dimensione del batch, ottimizzatore, architettura del modello, seed casuale e tutte le altre impostazioni che determinano il training.
- Metriche: Perdite e punteggi di training e convalida registrati per passaggio o epoca, oltre a metriche di sistema come l'utilizzo e la memoria della GPU.
- Artefatti: Checkpoint, matrici di confusione, previsioni di esempio e file di configurazione.
- Provenienza: Il commit Git, la versione del dataset, le versioni dei pacchetti, l'hardware e l'autore associati all'esecuzione.
La registrazione avviene tramite una chiamata del client per ogni valore oppure automaticamente, attraverso integrazioni di autologging che acquisiscono parametri e metriche di un framework senza bisogno di codice aggiuntivo. Un server di tracciamento condiviso raccoglie le esecuzioni da tutti i laptop, i computer cloud e i job CI di un team; la dashboard sovrappone le curve di perdita delle esecuzioni selezionate e le filtra in base a qualsiasi parametro o metrica, rendendo immediatamente visibili problemi come l'overfitting.
Il training di Ultralytics YOLO salva gli argomenti di ogni esecuzione in args.yaml e le perdite e le metriche per epoca in results.csv; le integrazioni integrate inviano gli stessi valori a MLflow, Comet, ClearML o DVC non appena il relativo pacchetto è installato, mentre TensorBoard e Weights & Biases si attivano tramite yolo settings. Gli argomenti di training project e name diventano i nomi dell'esperimento e dell'esecuzione in MLflow, così una ricerca a sweep di YOLO26 arriva nel tracker già organizzata.
Confrontare e riprodurre le esecuzioni#
I dashboard tracciano una metrica rispetto a un parametro tra le esecuzioni o disegnano grafici a coordinate parallele che collegano le impostazioni di ogni esecuzione al relativo punteggio, mostrando quali impostazioni contano in una ricerca. In Ultralytics Platform, un progetto confronta i propri modelli con curve di metriche e loss sovrapposte e una tabella affiancata, e la lezione Confrontare le esecuzioni e scegliere la migliore trasforma il confronto in un gate di promozione automatizzato. Per riprodurre un'esecuzione servono più degli iperparametri: il record deve contenere anche il commit del codice, lo snapshot esatto dei dati, le versioni dei pacchetti e il seed casuale, perché i kernel GPU e l'ordine di caricamento dei dati possono modificare leggermente i risultati anche tra esecuzioni altrimenti identiche.
Questo script MLflow addestra un albero decisionale con quattro profondità sui dati delle cifre scritte a mano di scikit-learn, registra ogni profondità come parametro e l'accuratezza di convalida come metrica, quindi interroga l'esperimento come se fosse una tabella:
import mlflow
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# Store runs in a local SQLite file and group them under one experiment
mlflow.set_tracking_uri("sqlite:///mlflow.db")
mlflow.set_experiment("digits-tree-depth")
X_train, X_val, y_train, y_val = train_test_split(*load_digits(return_X_y=True), random_state=0)
# One tracked run per setting: the parameter goes in, the metric comes out
for depth in [2, 4, 8, 16]:
with mlflow.start_run(run_name=f"depth-{depth}"):
model = DecisionTreeClassifier(max_depth=depth, random_state=0).fit(X_train, y_train)
mlflow.log_param("max_depth", depth)
mlflow.log_metric("val_accuracy", model.score(X_val, y_val))
# Query the experiment like a table, best run first
runs = mlflow.search_runs(order_by=["metrics.val_accuracy DESC"])
print(runs[["params.max_depth", "metrics.val_accuracy"]])Con un database nuovo, la tabella elenca per prima la profondità 16 con un'accuratezza di convalida di 0.838, poi la profondità 8 con 0.818, la profondità 4 con 0.533 e la profondità 2 con 0.318. Eseguendo mlflow ui nella stessa cartella con --backend-store-uri sqlite:///mlflow.db si aprono le stesse esecuzioni nel browser.
Tracciamento degli esperimenti e pratiche correlate#
Il tracciamento degli esperimenti è una fase delle operazioni di machine learning (MLOps), affiancata da tre pratiche spesso confuse con esso:
- Registro dei modelli: Conserva i pochi modelli addestrati che vale la pena distribuire, ciascuna versione collegata all'esecuzione tracciata da cui è stata prodotta.
- Monitoraggio dei modelli: Osserva gli input, gli output e l'accuratezza di un modello distribuito in produzione, dopo che il tracciamento ha svolto il suo compito durante lo sviluppo.
- Ottimizzazione degli iperparametri: Strumenti di ricerca come Optuna e Ray Tune avviano automaticamente molte esecuzioni; il tracker le registra e le classifica tutte.










