Eseguire query e confrontare esperimenti ed esecuzioni con MLflow
È possibile eseguire query su esperimenti e processi (o esecuzioni) in Azure Machine Learning usando MLflow. Non è necessario installare un SDK specifico per gestire ciò che accade all'interno di un processo di training, creando una transizione più semplice tra le esecuzioni locali e il cloud attraverso la rimozione delle dipendenze specifiche del cloud. Questo articolo illustra come eseguire query e confrontare esperimenti ed esecuzioni nell'area di lavoro usando Azure Machine Learning e MLflow SDK in Python.
MLflow consente di:
- Creare, eseguire query, eliminare e cercare esperimenti in un'area di lavoro.
- Eseguire query, eliminare e cercare le esecuzioni in un'area di lavoro.
- Tenere traccia e recuperare metriche, parametri, artefatti e modelli dalle esecuzioni.
Per un confronto dettagliato tra MLflow Open Source e MLflow quando si è connessi ad Azure Machine Learning, vedere Matrice di supporto per l'esecuzione di query e esperimenti in Azure Machine Learning.
Nota
Azure Machine Learning Python SDK v2 non offre funzionalità di registrazione o rilevamento native. Questo vale non solo per la registrazione, ma anche per l'esecuzione di query sulle metriche registrate. Usare invece MLflow per gestire esperimenti ed esecuzioni. Questo articolo illustra come usare MLflow per gestire esperimenti ed esecuzioni in Azure Machine Learning.
È anche possibile eseguire query ed esperimenti di ricerca usando l'API REST MLflow. Per un esempio sull'utilizzo, vedere Uso di REST MLflow con Azure Machine Learning.
Prerequisiti
Installare il pacchetto SDK MLflow
mlflow
e il plug-in di Azure Machine Learning per MLflowazureml-mlflow
:pip install mlflow azureml-mlflow
Suggerimento
È possibile usare il pacchetto
mlflow-skinny
, che è un pacchetto di MLflow leggero senza risorse di archiviazione SQL, server, interfaccia utente o dipendenze di data science.mlflow-skinny
è consigliabile per gli utenti che necessitano principalmente delle funzionalità di rilevamento e registrazione di MLflow senza importare il gruppo completo di funzionalità, incluse le distribuzioni.Un'area di lavoro di Azure Machine Learning. Per creare un'area di lavoro, vedere l'esercitazione Creare risorse di Machine Learning. Vedere quali sono le autorizzazioni di accesso necessarie per eseguire le operazioni MLflow nell'area di lavoro.
Se si esegue il rilevamento remoto, ovvero si monitorano esperimenti in esecuzione all'esterno di Azure Machine Learning, configurare MLflow in modo che punti all'URI di rilevamento dell'area di lavoro di Azure Machine Learning. Per altre informazioni su come connettere MLflow all'area di lavoro, vedere Configurare MLflow per Azure Machine Learning.
Query e ricerca di esperimenti
Usare MLflow per cercare esperimenti all'interno dell'area di lavoro. Vedere gli esempi seguenti:
Ottenere tutti gli esperimenti attivi:
mlflow.search_experiments()
Nota
Per le versioni legacy di MLflow (<2.0) usare invece il metodo
mlflow.list_experiments()
.Ottenere tutti gli esperimenti, inclusi quelli archiviati:
from mlflow.entities import ViewType mlflow.search_experiments(view_type=ViewType.ALL)
Ottenere un esperimento specifico in base al nome:
mlflow.get_experiment_by_name(experiment_name)
Ottenere un esperimento specifico in base all'ID:
mlflow.get_experiment('1234-5678-90AB-CDEFG')
Esperimenti di ricerca
Il metodo search_experiments()
, disponibile a partire da Mlflow 2.0, consente di cercare esperimenti che soddisfano i criteri usando filter_string
.
Recuperare più esperimenti in base ai relativi ID:
mlflow.search_experiments(filter_string="experiment_id IN (" "'CDEFG-1234-5678-90AB', '1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')" )
Recuperare tutti gli esperimenti creati dopo una data specifica:
import datetime dt = datetime.datetime(2022, 6, 20, 5, 32, 48) mlflow.search_experiments(filter_string=f"creation_time > {int(dt.timestamp())}")
Recuperare tutti gli esperimenti con un tag specifico:
mlflow.search_experiments(filter_string=f"tags.framework = 'torch'")
Query e ricerca di esecuzioni
MLflow consente di cercare le esecuzioni all'interno di qualsiasi esperimento, inclusi più esperimenti contemporaneamente. Il metodo mlflow.search_runs()
accetta l'argomento experiment_ids
e experiment_name
per indicare in quali esperimenti si desidera eseguire la ricerca. È anche possibile indicare search_all_experiments=True
se si vuole eseguire la ricerca in tutti gli esperimenti nell'area di lavoro:
In base al nome dell'esperimento:
mlflow.search_runs(experiment_names=[ "my_experiment" ])
In base all'ID dell'esperimento:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ])
Eseguire ricerche in tutti gli esperimenti nell'area di lavoro:
mlflow.search_runs(filter_string="params.num_boost_round='100'", search_all_experiments=True)
Si noti che experiment_ids
supporta la fornitura di un array di esperimenti, in modo da poter eseguire ricerche in più esperimenti, se necessario. Questo potrebbe essere utile nel caso in cui si vogliano confrontare le esecuzioni dello stesso modello quando viene registrato in esperimenti differenti (ad esempio, da persone differenti o iterazioni di progetto differenti).
Importante
Se experiment_ids
, experiment_names
o search_all_experiments
non sono specificati, MLflow cerca per impostazione predefinita nell'esperimento attivo corrente. È possibile impostare l'esperimento attivo usando mlflow.set_experiment()
.
Per impostazione predefinita, MLflow restituisce i dati in formato Dataframe
Pandas, utile quando si esegue un'ulteriore elaborazione dell'analisi delle esecuzioni. I dati restituiti includono colonne con:
- Informazioni di base sull'esecuzione.
- Parametri con il nome della colonna
params.<parameter-name>
. - Metriche (ultimo valore registrato di ciascuno) con il nome della colonna
metrics.<metric-name>
.
Tutte le metriche e i parametri vengono restituiti anche durante le esecuzioni di query. Tuttavia, per le metriche che contengono più valori (ad esempio, una curva di perdita o una curva di richiesta pull), viene restituito solo l'ultimo valore della metrica. Per recuperare tutti i valori di una determinata metrica, usare il metodo mlflow.get_metric_history
. Per un esempio, vedere Recupero di parametri e metriche da un'esecuzione.
Ordina esecuzioni
Per impostazione predefinita, gli esperimenti vengono ordinati dalla Z alla A per start_time
, ovvero l'ora in cui l'esperimento è stato aggiunto alla coda in Azure Machine Learning. Si può tuttavia possibile modificare questa impostazione predefinita usando il parametro order_by
.
Ordinare le esecuzioni in base agli attributi, come
start_time
:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.start_time DESC"])
Ordinare le esecuzioni e limitare i risultati. Nell'esempio seguente, viene restituita l'ultima esecuzione singola dell'esperimento:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], max_results=1, order_by=["attributes.start_time DESC"])
L'ordine viene eseguito dall'attributo
duration
:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.duration DESC"])
Suggerimento
attributes.duration
non è presente nel software open source MLflow, ma fornito in Azure Machine Learning per praticità.L'ordine viene eseguito in base ai valori della metrica:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)
Avviso
L'uso di
order_by
con espressioni contenentimetrics.*
,params.*
otags.*
nel parametroorder_by
non è attualmente supportato. Usare invece il metodoorder_values
di Pandas come illustrato nell'esempio.
Esecuzioni di filtri
È anche possibile cercare un'esecuzione con una combinazione specifica negli iper-parametri usando il parametro filter_string
. Usare params
per accedere ai parametri dell'esecuzione, metrics
per accedere alle metriche registrate nell'esecuzione e attributes
per accedere ai dettagli con le informazioni sull'esecuzione. MLflow supporta le espressioni unite dalla parola chiave AND (la sintassi non supporta OR):
Ricerca di esecuzioni in base al valore di un parametro:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="params.num_boost_round='100'")
Avviso
Solo gli operatori
=
,like
e!=
sono supportati per filtrareparameters
.Ricerca di esecuzioni in base al valore di una metrica:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="metrics.auc>0.8")
Ricerca di esecuzioni in base a un tag specificato:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="tags.framework='torch'")
Ricerca di esecuzioni in basa a un determinato utente:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.user_id = 'John Smith'")
Le esecuzioni di ricerca non sono riuscite. Per i valori possibili, vedere Filtrare le esecuzioni in base allo stato:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.status = 'Failed'")
Ricerca di esecuzioni successive a una data specificata:
import datetime dt = datetime.datetime(2022, 6, 20, 5, 32, 48) mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string=f"attributes.creation_time > '{int(dt.timestamp())}'")
Suggerimento
Per la chiave
attributes
, i valori devono essere sempre stringhe e quindi codificati tra virgolette.Esecuzioni di ricerca che richiedono più di un'ora:
duration = 360 * 1000 # duration is in milliseconds mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string=f"attributes.duration > '{duration}'")
Suggerimento
attributes.duration
non è presente nel software open source MLflow, ma fornito in Azure Machine Learning per praticità.Le esecuzioni di ricerca con l'ID in un determinato set:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.run_id IN ('1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')")
Filtra le esecuzioni in base allo stato
Quando si filtrano le esecuzioni in base allo stato, MLflow usa una convenzione differente per assegnare un nome al differente stato possibile di un'esecuzione rispetto ad Azure Machine Learning. Nella tabella seguente sono illustrati i possibili valori:
Stato del processo in Azure Machine Learning | attributes.status di MLflow |
Significato |
---|---|---|
Non avviato | Scheduled |
Il processo/esecuzione è stato ricevuto da Azure Machine Learning. |
Queue | Scheduled |
Il processo/esecuzione è pianificato per l'esecuzione, ma non è ancora stato avviato. |
Preparazione | Scheduled |
Il processo/esecuzione non è ancora stato avviato, ma un calcolo è stato allocato per l'esecuzione e sta preparando l'ambiente e i relativi input. |
In esecuzione | Running |
Il processo/esecuzione è attualmente in esecuzione attiva. |
Completato | Finished |
Il processo/esecuzione è stato completato senza errori. |
Non riuscito | Failed |
Il processo/esecuzione è stato completato con errori. |
Annullati | Killed |
Il processo/esecuzione è stato annullato dall'utente o terminato dal sistema. |
Esempio:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="attributes.status = 'Failed'")
Ottenere metriche, parametri, artefatti e modelli
Il metodo search_runs
restituisce un Pandas Dataframe
contenente una quantità limitata di informazioni per impostazione predefinita. Se necessario, è possibile ottenere oggetti Python che possono essere utili per ottenere informazioni dettagliate su di essi. Usare il parametro output_format
per controllare la modalità di restituzione dell'output:
runs = mlflow.search_runs(
experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="params.num_boost_round='100'",
output_format="list",
)
È quindi possibile accedere ai dettagli dal membro info
. L'esempio seguente illustra come ottenere run_id
:
last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)
Ottenere parametri e metriche da un'esecuzione
Quando vengono restituite esecuzioni usando output_format="list"
, è possibile accedere facilmente ai parametri usando la chiave data
:
last_run.data.params
Allo stesso modo, è possibile eseguire query sulle metriche:
last_run.data.metrics
Per le metriche che contengono più valori ( ad esempio, una curva di perdita o una curva di richiesta pull), viene restituito solo l'ultimo valore registrato della metrica. Per recuperare tutti i valori di una determinata metrica, usare il metodo mlflow.get_metric_history
. Questo metodo richiede l'uso di MlflowClient
:
client = mlflow.tracking.MlflowClient()
client.get_metric_history("1234-5678-90AB-CDEFG", "log_loss")
Ottenere artefatti da un'esecuzione
MLflow può eseguire query su qualsiasi artefatto registrato da un'esecuzione. Non è possibile accedere agli artefatti usando l'oggetto run stesso e il client MLflow deve essere invece usato:
client = mlflow.tracking.MlflowClient()
client.list_artifacts("1234-5678-90AB-CDEFG")
Il metodo precedente elenca tutti gli artefatti registrati nell'esecuzione, ma rimangono archiviati nell'archivio artefatti (archiviazione di Azure Machine Learning). Per scaricare uno o più elementi, usare il metodo download_artifact
:
file_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path="feature_importance_weight.png"
)
Nota
Per le versioni legacy di MLflow (<2.0), usare invece il metodo MlflowClient.download_artifacts()
.
Ottenere modelli da un'esecuzione
I modelli possono anche essere registrati nell'esecuzione e recuperati direttamente da essa. Per recuperare un modello, è necessario conoscere il percorso dell'artefatto in cui è archiviato. Il metodo list_artifacts
può essere usato per trovare gli artefatti che rappresentano un modello, poiché i modelli MLflow sono sempre cartelle. È possibile scaricare un modello specificando il percorso in cui è archiviato il modello usando il metodo download_artifact
:
artifact_path="classifier"
model_local_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path=artifact_path
)
È quindi possibile caricare nuovamente il modello dagli artefatti scaricati usando la funzione load_model
tipica nel namespace specifico della versione. Nell'esempio seguente viene usato xgboost
:
model = mlflow.xgboost.load_model(model_local_path)
MLflow consente anche di eseguire entrambe le operazioni contemporaneamente e scaricare e caricare il modello con un'unica istruzione. MLflow scarica il modello in una cartella temporanea e lo carica da questa posizione. Il metodo load_model
usa un formato URI per indicare da dove deve essere recuperato il modello. Nel caso di caricamento di un modello da un'esecuzione, la struttura URI è la seguente:
model = mlflow.xgboost.load_model(f"runs:/{last_run.info.run_id}/{artifact_path}")
Suggerimento
Per eseguire query e caricare modelli registrati nel Registro modelli, vedere Gestire i registri dei modelli in Azure Machine Learning con MLflow.
Ottenere esecuzioni figlio (annidate)
MLflow supporta il concetto di esecuzioni figlio (annidate). Tali esecuzioni utili quando è necessario avviare routine di training che richiedono un rilevamento indipendente dal processo di training principale. I processi di ottimizzazione degli iper-parametri o le pipeline di Azure Machine Learning sono esempi tipici di processi che generano più esecuzioni figlio. È possibile eseguire una query su tutte le esecuzioni figlio di un'esecuzione specifica usando il tag di proprietà mlflow.parentRunId
, che contiene l'ID di esecuzione dell'esecuzione padre.
hyperopt_run = mlflow.last_active_run()
child_runs = mlflow.search_runs(
filter_string=f"tags.mlflow.parentRunId='{hyperopt_run.info.run_id}'"
)
Confrontare processi e modelli in studio di Azure Machine Learning (anteprima)
Per confrontare e valutare la qualità dei processi e dei modelli in studio di Azure Machine Learning, usare il pannello di anteprima per abilitare la funzionalità. Dopo l'abilitazione, è possibile confrontare i parametri, le metriche e i tag tra i processi e/o i modelli selezionati.
Importante
Gli elementi contrassegnati (anteprima) in questo articolo sono attualmente disponibili in anteprima pubblica. La versione di anteprima viene messa a disposizione senza contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
Questo articolo illustra e analizza in dettaglio i notebook MLflow con Azure Machine Learning.
- Eseguire il training e il rilevamento di un classificatore con MLflow: illustra come tenere traccia degli esperimenti usando MLflow, i modelli di log e combinare più versioni in pipeline.
- Gestire esecuzioni ed esperimenti con MLflow: illustra come eseguire query su esperimenti, esecuzioni, metriche, parametri e artefatti di Azure Machine Learning usando MLflow.
Matrice di supporto per l'esecuzione di query su esecuzioni ed esperimenti
SDK di MLflow espone diversi metodi per recuperare le esecuzioni, incluse le opzioni per controllare cosa viene restituito e come. Usare la tabella seguente per informazioni su quali di questi metodi sono attualmente supportati in MLflow quando è connesso ad Azure Machine Learning:
Funzionalità | Supportato da MLflow | Supportato da Azure Machine Learning |
---|---|---|
Ordinamento delle esecuzioni in base agli attributi | ✓ | ✓ |
Ordinamento delle esecuzioni in base alle metriche | ✓ | 1 |
Ordinamento delle esecuzioni in base ai parametri | ✓ | 1 |
Ordinamento delle esecuzioni in base ai tag | ✓ | 1 |
Filtro delle esecuzioni in base agli attributi | ✓ | ✓ |
Filtro delle esecuzioni in base alle metriche | ✓ | ✓ |
Filtro delle esecuzioni in base alle metriche con caratteri speciali (escape) | ✓ | |
Filtro delle esecuzioni in base ai parametri | ✓ | ✓ |
Filtro delle esecuzioni in base ai tag | ✓ | ✓ |
Filtro delle esecuzioni con comparatori numerici (metriche), tra cui = , != > , >= , < e <= |
✓ | ✓ |
Filtro delle esecuzioni con comparatori di stringhe (parametri, tag e attributi): = e != |
✓ | ✓2 |
Filtro delle esecuzioni con comparatori di stringhe (parametri, tag e attributi): LIKE /ILIKE |
✓ | ✓ |
Filtro delle esecuzioni con comparatori AND |
✓ | ✓ |
Filtro delle esecuzioni con comparatori OR |
||
Ridenominazione degli esperimenti | ✓ |
Nota
- 1 Controllare la sezione Ordinamento delle esecuzioni per istruzioni ed esempi su come ottenere la stessa funzionalità in Azure Machine Learning.
- 2
!=
per i tag non supportati.