Tenere traccia delle esecuzioni di training di Machine Learning 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 MLflow con esperimenti ed esecuzioni
Il rilevamento MLflow si basa su due concetti, esperimenti ed esecuzioni:
Un esperimento MLflow è l'unità principale 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 di esecuzione e i metadati 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
I parametri, le metriche, i tag e gli artefatti dell'API MLflow Tracking vengono eseguiti da un modello. L'API di rilevamento 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.
Per informazioni su come controllare l'accesso agli esperimenti, vedere Condividere esperimenti e Modificare le autorizzazioni per l'esperimento.
Nota
MLflow viene installato nei cluster di Machine Learning di Databricks Runtime. Per usare MLflow in un cluster Databricks Runtime, è necessario installare la mlflow
libreria. 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 (PyPI origine libreria) e immettere
mlflow
nel campo Package (Pacchetto). - Per R selezionare Library Source CRAN (Origine libreria CRAN) e immettere
mlflow
nel campo Package (Pacchetto ). - Per Scala, installare questi due pacchetti:
- Selezionare Libreria Origine Maven e immettere
org.mlflow:mlflow-client:1.11.0
nel campo Coordinate. - Selezionare Libreria Source PyPI (PyPI origine libreria) e immettere
mlflow
nel campo Package (Pacchetto ).
- Selezionare Libreria Origine 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
experiment_id
parametro nel comando mlflow.start_run(). - Impostare una delle variabili di ambiente MLflow MLFLOW_EXPERIMENT_NAME o MLFLOW_EXPERIMENT_ID.
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 ospitato in 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()
e 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 vogliono 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()
. Per informazioni dettagliate su dove trovare i valori per le DATABRICKS_HOST
variabili di ambiente e DATABRICKS_TOKEN
, vedere Eseguire l'autenticazione del token di accesso personale di Azure Databricks.
L'esempio di codice seguente illustra l'impostazione di 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.
Log MLflow esegue il notebook
È 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 della riga di comando di MLflow. Vedere Accedere al server di rilevamento MLflow dall'esterno di Azure Databricks.
Analizzare le esecuzioni di MLflow a livello di codice
È possibile accedere ai dati di esecuzione di MLflow a livello di codice usando le due API dataframe seguenti:
- Il client Python MLflow search_runs API 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 in tutti gli utenti:
Perché le metriche e gli output del training del modello possono variare
Molti degli algoritmi usati in 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 correggere le condizioni iniziali per questi elementi stocastici. Tuttavia, potrebbero esserci altre fonti di variazione che non sono controllate dai semi. Alcuni algoritmi sono sensibili all'ordine dei dati e gli algoritmi di Machine Learning 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 ripartition e sortWithinPartitions.
Esempi di rilevamento 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.