Tenere traccia delle esecuzioni di training di ML e Deep Learning
Il componente di rilevamento MLflow consente di registrare proprietà, parametri, metriche, tag e artefatti di origine correlati al training di un modello di Machine Learning o Deep Learning. Per iniziare a usare MLflow, provare una delle Esercitazioni introduttive su MLflow.
Rilevamento di MLflow con esperimenti ed esecuzioni
Il rilevamento di MLflow si basa su due concetti, esperimenti ed esecuzioni:
Nota
A partire dal 27 marzo 2024, MLflow impone un limite di quota per il numero totale di parametri, tag e passaggi delle metriche per tutte le esecuzioni nuove ed esistenti e il numero di esecuzioni totali per tutti gli esperimenti esistenti e nuovi, vedere Limiti delle risorse. Se si raggiunge la quota di esecuzioni per ogni quota dell'esperimento, Databricks consiglia di eliminare le esecuzioni che non sono più necessarie usando l'API di esecuzione dell'eliminazione in Python. Se si raggiungono altri limiti di quota, Databricks consiglia di modificare la strategia di registrazione per mantenere il limite. Se è necessario incrementare questo limite, contattare il team dell'account Databricks con una breve spiegazione del caso d'uso, perché gli approcci di prevenzione suggeriti non funzionano e il nuovo limite richiesto.
Un esperimento MLflow è l'unità primaria dell'organizzazione e il controllo di accesso per le esecuzioni MLflow; tutte le esecuzioni MLflow appartengono a un esperimento. Gli esperimenti consentono di visualizzare, cercare e confrontare le esecuzioni, nonché scaricare gli artefatti e i metadati dell'esecuzione per l'analisi in altri strumenti.
Un'esecuzione MLflow corrisponde a una singola esecuzione del codice del modello.
Organizzare le esecuzioni di training con esperimenti MLflow
MLflow Tracking API registra parametri, metriche, tag e artefatti di un'esecuzione del modello. Il Tracking API comunica con un server di rilevamento MLflow. Quando si usa Databricks, un server di rilevamento ospitato in Databricks registra i dati. Il server di rilevamento MLflow ospitato include API Python, Java e R.
Nota
MLflow viene installato nei cluster ML di Databricks Runtime. Per usare MLflow in un cluster Databricks Runtime, è necessario installare la libreria mlflow
. Per istruzioni sull'installazione di una libreria in un cluster, vedere Installare una libreria in un cluster. I pacchetti specifici da installare per MLflow sono:
- Per Python selezionare Library Source PyPI e immettere
mlflow
nel campo Package. - Per R selezionare Library Source CRAN e immettere
mlflow
nel campo Package. - Per Scala, installare questi due pacchetti:
- Selezionare Library Source Maven e immettere
org.mlflow:mlflow-client:1.11.0
nel campo Coordinates. - Selezionare Library Source PyPI e immettere
mlflow
nel campo Package.
- Selezionare Library Source Maven e immettere
Posizione in cui vengono registrate le esecuzioni di MLflow
Tutte le esecuzioni di MLflow vengono registrate nell'esperimento attivo, che può essere impostato usando uno dei modi seguenti:
- Usare il comando mlflow.set_experiment().
- Usare il parametro
experiment_id
nel comando mlflow.start_run(). - Impostare una delle variabili di ambiente MLFLOW_EXPERIMENT_NAME o MLFLOW_EXPERIMENT_ID di MLflow.
Se non è impostato alcun esperimento attivo, le esecuzioni vengono registrate nell'esperimento del notebook.
Per registrare i risultati dell'esperimento in un server MLflow Tracking in hosting remoto in un'area di lavoro diversa da quella in cui si esegue l'esperimento, impostare l'URI di rilevamento per fare riferimento all'area di lavoro remota con mlflow.set_tracking_uri()
, quindi impostare il percorso dell'esperimento nell'area di lavoro remota usando mlflow.set_experiment()
.
mlflow.set_tracking_uri(<uri-of-remote-workspace>)
mlflow.set_experiment("path to experiment in remote workspace")
Se si eseguono esperimenti in locale e si desidera registrare i risultati dell'esperimento nel server Databricks MLflow Tracking, specificare l'istanza dell'area di lavoro Databricks (DATABRICKS_HOST
) e il token di accesso personale di Databricks (DATABRICKS_TOKEN
). Successivamente, è possibile impostare l'URI di rilevamento per fare riferimento all'area di lavoro con mlflow.set_tracking_uri()
e impostare il percorso dell'esperimento usando mlflow.set_experiment()
. L'articolo Eseguire l'autenticazione con token di accesso personale di Azure Databricks contiene informazioni dettagliate su dove trovare i valori per le variabili di ambiente DATABRICKS_HOST
e DATABRICKS_TOKEN
.
L'esempio di codice seguente mostra come impostare questi valori:
os.environ["DATABRICKS_HOST"] = "https://dbc-1234567890123456.cloud.databricks.com" # set to your server URI
os.environ["DATABRICKS_TOKEN"] = "dapixxxxxxxxxxxxx"
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/your-experiment")
Notebook di esempio di registrazione
Questo notebook illustra come registrare le esecuzioni in un esperimento di notebook e in un esperimento dell'area di lavoro. Solo le esecuzioni di MLflow avviate all'interno di un notebook possono essere registrate nell'esperimento del notebook. Le esecuzioni di MLflow avviate da qualsiasi notebook o dalle API possono essere registrate in un esperimento dell'area di lavoro. Per informazioni sulla visualizzazione delle esecuzioni registrate, vedere Visualizzare l'esperimento del notebook e Visualizzare l'esperimento dell'area di lavoro.
Notebook: Registrare esecuzioni MLflow
È possibile usare le API MLflow Python, Java o Scala e R per avviare le esecuzioni e registrare i dati di esecuzione. Per informazioni dettagliate, vedere i notebook di esempio di MLflow.
Accedere al server di rilevamento MLflow dall'esterno di Azure Databricks
È anche possibile scrivere e leggere dal server di rilevamento dall'esterno di Azure Databricks, ad esempio usando l'interfaccia CLI di MLflow. Vedere Accedere al server di rilevamento MLflow dall'esterno di Azure Databricks.
Analizzare le esecuzioni di MLflow a livello programmatico
È possibile accedere ai dati di esecuzione di MLflow a livello programmatico usando le due API DataFrame seguenti:
- L'API search_runs del client Python MLflow restituisce un DataFrame pandas.
- L'origine dati dell'esperimento MLflow restituisce un DataFrame Apache Spark.
Questo esempio illustra come usare il client Python MLflow per creare un dashboard che visualizza le modifiche nelle metriche di valutazione nel tempo, tiene traccia del numero di esecuzioni avviate da un utente specifico e misura il numero totale di esecuzioni per tutti gli utenti:
Perché le metriche e gli output del training del modello possono variare
Molti degli algoritmi usati nel ML hanno un elemento casuale, ad esempio il campionamento o condizioni iniziali casuali all'interno dell'algoritmo stesso. Quando si esegue il training di un modello usando uno di questi algoritmi, i risultati potrebbero non essere uguali a ogni esecuzione, anche se si avvia l'esecuzione con le stesse condizioni. Molte librerie offrono un meccanismo di seeding per fissare le condizioni iniziali per questi elementi stocastici. Tuttavia, potrebbero esserci altre fonti di variazione non controllate dai seed. Alcuni algoritmi sono sensibili all'ordine dei dati e gli algoritmi di ML distribuiti possono essere interessati anche dal modo in cui i dati vengono partizionati. In genere questa variazione non è significativa e non è importante nel processo di sviluppo del modello.
Per controllare la variazione causata dalle differenze nell'ordinamento e nel partizionamento, usare le funzioni PySpark repartition e sortWithinPartitions.
Esempi di monitoraggio di MLflow
I notebook seguenti illustrano come eseguire il training di diversi tipi di modelli e tenere traccia dei dati di training in MLflow e come archiviare i dati di rilevamento in Delta Lake.