Tenere traccia dello sviluppo di modelli con MLflow
Il monitoraggio di MLflow consente di registrare notebook, set di dati di training, parametri, metriche, tag e artefatti correlati al training di un modello di machine learning o deep learning. Per un notebook di esempio per iniziare a usare MLflow, vedere Esercitazione: Modelli di Machine Learning completi in Azure Databricks.
Rilevamento di MLflow con esperimenti ed esecuzioni
Il processo di sviluppo del modello è iterativo e può essere difficile tenere traccia del lavoro durante lo sviluppo e l'ottimizzazione di un modello. In Azure Databricks è possibile usare di rilevamento MLflow per tenere traccia del processo di sviluppo del modello, incluse le impostazioni dei parametri o le combinazioni che si sono provate e come hanno influenzato le prestazioni del modello.
Il monitoraggio MLflow utilizza esperimenti e esecuzioni per registrare e monitorare lo sviluppo di modelli di Machine Learning e Deep Learning. Un'esecuzione è una singola esecuzione del codice del modello. Durante un'esecuzione di MLflow, è possibile registrare i parametri e i risultati del modello. Un esperimento è una raccolta di esecuzioni correlate. In un esperimento è possibile confrontare e filtrare le esecuzioni per comprendere le prestazioni del modello e il modo in cui le prestazioni dipendono dalle impostazioni dei parametri, dai dati di input e così via.
- Organizzare le esecuzioni di training con esperimenti MLflow
- Visualizzare i risultati del training con le esecuzioni di MLflow
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.
API di rilevamento 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.
MLflow è preinstallato nei cluster di Machine Learning 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.
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")
Log viene assegnato a un esperimento
MLflow può registrare automaticamente il codice di training scritto in molti framework di Machine Learning e Deep Learning. Questo è il modo più semplice per iniziare a usare il rilevamento MLflow. Vedere il notebook di esempio .
Per un maggiore controllo sui parametri e le metriche registrati o per registrare elementi aggiuntivi, ad esempio file CSV o tracciati, usare l'API di registrazione MLflow. Consulta l'esempio di notebook .
Utilizzare l'autoregistrazione per monitorare lo sviluppo dei modelli
Questo notebook di esempio dimostra come utilizzare l'autologging con scikit-learn. Per informazioni sulla registrazione automatica con altre librerie Python, vedere Registrare automaticamente gli esperimenti di training in MLflow.
Notebook Python per la registrazione automatica con MLflow
Usare l'API di registrazione per tenere traccia dello sviluppo di modelli
Questo notebook di esempio illustra come usare l'API di registrazione Python . MLflow include anche API REST, R e Java .
Notebook Python dell'API di registrazione MLflow
Registrare le esecuzioni in un esperimento dell'area di lavoro
Per impostazione predefinita, quando si addestra un modello in un notebook di Databricks, le sessioni vengono registrate nell'esperimento del notebook. 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 registrare le esecuzioni in un esperimento in un'area di lavoro, usa un codice simile al seguente nel tuo notebook o nella tua chiamata API.
experiment_name = "/Shared/name_of_experiment/"
mlflow.set_experiment(experiment_name)
Per istruzioni sulla creazione di un esperimento dell'area di lavoro, vedere Creare 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.
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 tenere traccia dello sviluppo di modelli usando MLflow.