Condividi tramite


Tenere traccia dello sviluppo di modelli con MLflow

Il tracciamento di MLflow consente di tenere traccia di notebook e set di dati di addestramento, parameters, metriche, tag e artefatti correlati all'addestramento di un modello di machine learning o deep learning. Per un notebook di esempio da get avviato con MLflow, vedere Esercitazione: Modelli di Machine Learning end-to-end 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'optimize 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 il modello parameters e i risultati. 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.

Nota

A partire dal 27 marzo 2024, MLflow impone una quota limit sul numero totale di parameters, tag e passaggi delle metriche per tutte le esecuzioni nuove e esistenti e il numero totale di esecuzioni per tutti gli esperimenti nuovi e esistenti, 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 in modo da mantenere sotto il limit. Se hai bisogno di un aumento di questo limit, contatta il tuo team del tuo account Databricks con una breve spiegazione del tuo caso d'uso, perché gli approcci di mitigazione suggeriti non funzionano, e il nuovo limit che richiedi.

API di rilevamento MLflow

L'API MLflow Tracking registra parameters, metriche, tag e artefatti da 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.

Where vengono registrate le esecuzioni MLflow

Tutte le esecuzioni MLflow vengono registrate nell'esperimento attivo, che può essere set usando uno dei modi seguenti:

Se non è attivo alcun esperimento , le esecuzioni vengono registrate nell'esperimentodel 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, set l'URI di rilevamento per fare riferimento all'area di lavoro remota con mlflow.set_tracking_uri()e set 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). È quindi possibile set l'URI di rilevamento per fare riferimento all'area di lavoro con mlflow.set_tracking_uri()e set il percorso dell'esperimento usando mlflow.set_experiment(). Per maggiori dettagli su come trovare where e values per le variabili di ambiente DATABRICKS_HOST e DATABRICKS_TOKEN, consultare Eseguire l'autenticazione dei token di accesso personale di Azure Databricks.

Nell'esempio di codice seguente viene illustrata l'impostazione di questi values:


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 get iniziare a utilizzare il tracciamento MLflow. Vedere il notebook di esempio .

Per un maggiore controllo su quali parameters e metriche vengono registrate o per registrare elementi aggiuntivi, ad esempio file CSV o tracciati, usare l'API di registrazione MLflow. Vedere il notebook di esempio .

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 la documentazione sulla registrazione automatica di MLflow.

Notebook Python per la registrazione automatica con MLflow

Get computer portatile

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

Get taccuino

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:

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.