Eseguire la migrazione della registrazione dall'SDK v1 all'SDK v2
Azure Machine Learning usa MLflow Tracking per la registrazione delle metriche e l'archiviazione degli artefatti per gli esperimenti, indipendentemente dal fatto che gli esperimenti siano stati creati tramite Azure Machine Learning Python SDK, l'interfaccia della riga di comando di Azure Machine Learning o studio di Azure Machine Learning. È consigliabile usare MLflow per tenere traccia degli esperimenti.
Se si esegue l'aggiornamento da SDK v1 a SDK v2, usare le informazioni in questa sezione per comprendere gli equivalenti MLflow delle API di registrazione sdk v1.
Perché MLflow?
MLflow, con oltre 13 milioni di download mensili, è diventata la piattaforma standard per MLOps end-to-end, consentendo ai team di tutte le dimensioni di tenere traccia, condividere, creare pacchetti e distribuire qualsiasi modello per l'inferenza batch o in tempo reale. Azure Machine Learning si integra con MLflow, che consente al codice di training di ottenere una vera portabilità e una perfetta integrazione con altre piattaforme, perché non contiene istruzioni specifiche di Azure Machine Learning.
Preparare la migrazione a MLflow
Per usare il rilevamento MLflow, è necessario installare il pacchetto mlflow
Mlflow SDK e il plug-in di Azure Machine Learning per MLflow azureml-mlflow
. Tutti gli ambienti di Azure Machine Learning dispongono di questi pacchetti già disponibili, ma è necessario includerli se si crea un ambiente personalizzato.
pip install mlflow azureml-mlflow
Connettersi all'area di lavoro
Azure Machine Learning consente agli utenti di eseguire il rilevamento nei processi di training in esecuzione nell'area di lavoro o in esecuzione in remoto (rilevamento degli esperimenti in esecuzione all'esterno di Azure Machine Learning). Se si esegue il rilevamento remoto, è necessario indicare l'area di lavoro a cui si vuole connettere MLflow.
L'utente è già connesso all'area di lavoro durante l'esecuzione nell'ambiente di calcolo di Azure Machine Learning.
Esperimenti ed esecuzioni
SDK v1
from azureml.core import Experiment
# create an Azure Machine Learning experiment and start a run
experiment = Experiment(ws, "create-experiment-sdk-v1")
azureml_run = experiment.start_logging()
SDK v2 con MLflow
# Set the MLflow experiment and start a run
mlflow.set_experiment("logging-with-mlflow")
mlflow_run = mlflow.start_run()
Confronto tra LE API di registrazione
Registrare un numero intero o una metrica float
SDK v1
azureml_run.log("sample_int_metric", 1)
SDK v2 con MLflow
mlflow.log_metric("sample_int_metric", 1)
Registrare una metrica booleana
SDK v1
azureml_run.log("sample_boolean_metric", True)
SDK v2 con MLflow
mlflow.log_metric("sample_boolean_metric", 1)
Registrare una metrica stringa
SDK v1
azureml_run.log("sample_string_metric", "a_metric")
SDK v2 con MLflow
mlflow.log_text("sample_string_text", "string.txt")
- La stringa viene registrata come artefatto, non come metrica. In studio di Azure Machine Learning il valore viene visualizzato nella scheda Output e log.
Registrare un'immagine in un file PNG o JPEG
SDK v1
azureml_run.log_image("sample_image", path="Azure.png")
SDK v2 con MLflow
mlflow.log_artifact("Azure.png")
L'immagine viene registrata come artefatto e viene visualizzata nella scheda Immagini in studio di Azure Machine Learning.
Registrare un file matplotlib.pyplot
SDK v1
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
azureml_run.log_image("sample_pyplot", plot=plt)
SDK v2 con MLflow
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
fig, ax = plt.subplots()
ax.plot([0, 1], [2, 3])
mlflow.log_figure(fig, "sample_pyplot.png")
- L'immagine viene registrata come artefatto e viene visualizzata nella scheda Immagini in studio di Azure Machine Learning.
Registrare un elenco di metriche
SDK v1
list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
azureml_run.log_list('sample_list', list_to_log)
SDK v2 con MLflow
list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
from mlflow.entities import Metric
from mlflow.tracking import MlflowClient
import time
metrics = [Metric(key="sample_list", value=val, timestamp=int(time.time() * 1000), step=0) for val in list_to_log]
MlflowClient().log_batch(mlflow_run.info.run_id, metrics=metrics)
- Le metriche vengono visualizzate nella scheda metriche in studio di Azure Machine Learning.
- I valori di testo non sono supportati.
Registrare una riga di metriche
SDK v1
azureml_run.log_row("sample_table", col1=5, col2=10)
SDK v2 con MLflow
metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
- Il rendering delle metriche non viene eseguito come tabella in studio di Azure Machine Learning.
- I valori di testo non sono supportati.
- Registrato come artefatto, non come metrica.
Registrare una tabella
SDK v1
table = {
"col1" : [1, 2, 3],
"col2" : [4, 5, 6]
}
azureml_run.log_table("table", table)
SDK v2 con MLflow
# Add a metric for each column prefixed by metric name. Similar to log_row
row1 = {"table.col1": 5, "table.col2": 10}
# To be done for each row in the table
mlflow.log_metrics(row1)
# Using mlflow.log_artifact
import json
with open("table.json", 'w') as f:
json.dump(table, f)
mlflow.log_artifact("table.json")
- Registra le metriche per ogni colonna.
- Il rendering delle metriche non viene eseguito come tabella in studio di Azure Machine Learning.
- I valori di testo non sono supportati.
- Registrato come artefatto, non come metrica.
Registrare una tabella di accuratezza
SDK v1
ACCURACY_TABLE = '{"schema_type": "accuracy_table", "schema_version": "v1", "data": {"probability_tables": ' +\
'[[[114311, 385689, 0, 0], [0, 0, 385689, 114311]], [[67998, 432002, 0, 0], [0, 0, ' + \
'432002, 67998]]], "percentile_tables": [[[114311, 385689, 0, 0], [1, 0, 385689, ' + \
'114310]], [[67998, 432002, 0, 0], [1, 0, 432002, 67997]]], "class_labels": ["0", "1"], ' + \
'"probability_thresholds": [0.52], "percentile_thresholds": [0.09]}}'
azureml_run.log_accuracy_table('v1_accuracy_table', ACCURACY_TABLE)
SDK v2 con MLflow
ACCURACY_TABLE = '{"schema_type": "accuracy_table", "schema_version": "v1", "data": {"probability_tables": ' +\
'[[[114311, 385689, 0, 0], [0, 0, 385689, 114311]], [[67998, 432002, 0, 0], [0, 0, ' + \
'432002, 67998]]], "percentile_tables": [[[114311, 385689, 0, 0], [1, 0, 385689, ' + \
'114310]], [[67998, 432002, 0, 0], [1, 0, 432002, 67997]]], "class_labels": ["0", "1"], ' + \
'"probability_thresholds": [0.52], "percentile_thresholds": [0.09]}}'
mlflow.log_dict(ACCURACY_TABLE, 'mlflow_accuracy_table.json')
- Le metriche non vengono eseguite come tabella di accuratezza in studio di Azure Machine Learning.
- Registrato come artefatto, non come metrica.
- Il
mlflow.log_dict
metodo è sperimentale.
Registrare una matrice di confusione
SDK v1
CONF_MATRIX = '{"schema_type": "confusion_matrix", "schema_version": "v1", "data": {"class_labels": ' + \
'["0", "1", "2", "3"], "matrix": [[3, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]}}'
azureml_run.log_confusion_matrix('v1_confusion_matrix', json.loads(CONF_MATRIX))
SDK v2 con MLflow
CONF_MATRIX = '{"schema_type": "confusion_matrix", "schema_version": "v1", "data": {"class_labels": ' + \
'["0", "1", "2", "3"], "matrix": [[3, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]}}'
mlflow.log_dict(CONF_MATRIX, 'mlflow_confusion_matrix.json')
- Le metriche non vengono eseguite come matrice di confusione in studio di Azure Machine Learning.
- Registrato come artefatto, non come metrica.
- Il
mlflow.log_dict
metodo è sperimentale.
Stime dei log
SDK v1
PREDICTIONS = '{"schema_type": "predictions", "schema_version": "v1", "data": {"bin_averages": [0.25,' + \
' 0.75], "bin_errors": [0.013, 0.042], "bin_counts": [56, 34], "bin_edges": [0.0, 0.5, 1.0]}}'
azureml_run.log_predictions('test_predictions', json.loads(PREDICTIONS))
SDK v2 con MLflow
PREDICTIONS = '{"schema_type": "predictions", "schema_version": "v1", "data": {"bin_averages": [0.25,' + \
' 0.75], "bin_errors": [0.013, 0.042], "bin_counts": [56, 34], "bin_edges": [0.0, 0.5, 1.0]}}'
mlflow.log_dict(PREDICTIONS, 'mlflow_predictions.json')
- Le metriche non vengono eseguite come matrice di confusione in studio di Azure Machine Learning.
- Registrato come artefatto, non come metrica.
- Il
mlflow.log_dict
metodo è sperimentale.
Residui del log
SDK v1
RESIDUALS = '{"schema_type": "residuals", "schema_version": "v1", "data": {"bin_edges": [100, 200, 300], ' + \
'"bin_counts": [0.88, 20, 30, 50.99]}}'
azureml_run.log_residuals('test_residuals', json.loads(RESIDUALS))
SDK v2 con MLflow
RESIDUALS = '{"schema_type": "residuals", "schema_version": "v1", "data": {"bin_edges": [100, 200, 300], ' + \
'"bin_counts": [0.88, 20, 30, 50.99]}}'
mlflow.log_dict(RESIDUALS, 'mlflow_residuals.json')
- Le metriche non vengono eseguite come matrice di confusione in studio di Azure Machine Learning.
- Registrato come artefatto, non come metrica.
- Il
mlflow.log_dict
metodo è sperimentale.
Visualizzare informazioni e dati di esecuzione
È possibile accedere alle informazioni di esecuzione usando le proprietà data
e info
l'oggetto MLflow run (mlflow.entities.Run).
Suggerimento
È possibile eseguire query su esperimenti ed esecuzioni di informazioni di rilevamento in Azure Machine Learning usando MLflow, che fornisce un'API di ricerca completa per eseguire query e cercare esperimenti ed esecuzioni facilmente e confrontare rapidamente i risultati. Per altre informazioni su tutte le funzionalità di MLflow in questa dimensione, vedere Eseguire query e confrontare esperimenti ed esecuzioni con MLflow
Nell'esempio seguente viene illustrato come recuperare un'esecuzione completata:
from mlflow.tracking import MlflowClient
# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
finished_mlflow_run = MlflowClient().get_run("<RUN_ID>")
Nell'esempio seguente viene illustrato come visualizzare , metrics
tags
e params
:
metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params
Nota
L'oggetto metrics
avrà solo il valore registrato più di recente per una determinata metrica. Ad esempio, se si accede in ordine a un valore di 1
, 2
, 3
, e infine 4
a una metrica denominata sample_metric
, sarà presente solo 4
nel metrics
dizionario. Per ottenere tutte le metriche registrate per una metrica denominata specifica, usare MlFlowClient.get_metric_history:
with mlflow.start_run() as multiple_metrics_run:
mlflow.log_metric("sample_metric", 1)
mlflow.log_metric("sample_metric", 2)
mlflow.log_metric("sample_metric", 3)
mlflow.log_metric("sample_metric", 4)
print(client.get_run(multiple_metrics_run.info.run_id).data.metrics)
print(client.get_metric_history(multiple_metrics_run.info.run_id, "sample_metric"))
Per altre informazioni, vedere le informazioni di riferimento su MlFlowClient .
Il info
campo fornisce informazioni generali sull'esecuzione, ad esempio ora di inizio, ID esecuzione, ID esperimento e così via:
run_start_time = finished_mlflow_run.info.start_time
run_experiment_id = finished_mlflow_run.info.experiment_id
run_id = finished_mlflow_run.info.run_id
Visualizzare gli artefatti di esecuzione
Per visualizzare gli artefatti di un'esecuzione, usare MlFlowClient.list_artifacts:
client.list_artifacts(finished_mlflow_run.info.run_id)
Per scaricare un artefatto, usare mlflow.artifacts.download_artifacts:
mlflow.artifacts.download_artifacts(run_id=finished_mlflow_run.info.run_id, artifact_path="Azure.png")