Migrieren der Protokollierung vom SDK v1 zum SDK v2
Azure Machine Learning verwendet die MLflow-Nachverfolgung für die Metrikprotokollierung und Artefaktspeicherung für Ihre Experimente, unabhängig davon, ob Sie die Experimente über das Python-SDK für Azure Machine Learning, über die Azure Machine Learning CLI oder über das Azure Machine Learning Studio erstellt haben. Es wird empfohlen, MLflow für die Nachverfolgung von Experimenten zu verwenden.
Wenn Sie vom SDK v1 zum SDK v2 migrieren, verwenden Sie die Informationen in diesem Abschnitt, um die MLflow-Entsprechungen der SDK v1-Protokollierungs-APIs zu verstehen.
Gründe für MLflow
MLflow ist mit über 13 Mio. monatlichen Downloads zur Standardplattform für End-to-End-MLOps geworden und ermöglicht es Teams jeder Größe, jedes Modell für Batch- oder Echtzeitrückschlüsse zu verfolgen, freizugeben, zu packen und bereitzustellen. Azure Machine Learning ist in MLflow integriert, sodass Ihr Trainingscode echte Portabilität und nahtlose Integration mit anderen Plattformen erreichen kann, da er keine Azure Machine Learning-spezifischen Anweisungen enthält.
Vorbereiten der Migration zu MLflow
Wenn Sie die MLflow-Nachverfolgung verwenden möchten, müssen Sie das Mlflow SDK-Paket „mlflow
“ und das Azure Machine Learning-Plug-In für MLflow „azureml-mlflow
“installieren. In allen Azure Machine Learning-Umgebungen stehen diese Pakete bereits zur Verfügung, aber Sie müssen sie einbinden, wenn Sie Ihre eigene Umgebung erstellen.
pip install mlflow azureml-mlflow
Herstellen einer Verbindung mit Ihrem Arbeitsbereich
Mit Azure Machine Learning können Benutzer die Nachverfolgung in Trainingsaufträgen durchführen, die in Ihrem Arbeitsbereich oder remote ausgeführt werden (Nachverfolgung von Experimenten, die außerhalb von Azure Machine Learning ausgeführt werden). Für eine Remotenachverfolgung müssen Sie den Arbeitsbereich angeben, mit dem Sie MLflow verbinden möchten.
Sie sind bereits mit Ihrem Arbeitsbereich verbunden, wenn die Ausführung in Azure Machine Learning-Compute erfolgt.
Experimente und Ausführungen
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 mit MLflow
# Set the MLflow experiment and start a run
mlflow.set_experiment("logging-with-mlflow")
mlflow_run = mlflow.start_run()
Vergleich von Protokollierungs-APIs
Protokollieren einer integer- oder float-Metrik
SDK v1
azureml_run.log("sample_int_metric", 1)
SDK v2 mit MLflow
mlflow.log_metric("sample_int_metric", 1)
Protokollieren einer boolean-Metrik
SDK v1
azureml_run.log("sample_boolean_metric", True)
SDK v2 mit MLflow
mlflow.log_metric("sample_boolean_metric", 1)
Protokollieren einer string-Metrik
SDK v1
azureml_run.log("sample_string_metric", "a_metric")
SDK v2 mit MLflow
mlflow.log_text("sample_string_text", "string.txt")
- Die Zeichenfolge wird als Artefakt protokolliert, nicht als Metrik. In Azure Machine Learning Studio wird der Wert auf der Registerkarte Ausgaben und Protokolle angezeigt.
Protokollieren eines Bilds in einer PNG- oder JPEG-Datei
SDK v1
azureml_run.log_image("sample_image", path="Azure.png")
SDK v2 mit MLflow
mlflow.log_artifact("Azure.png")
Das Bild wird als Artefakt protokolliert und wird auf der Registerkarte Bilder in Azure Machine Learning Studio angezeigt.
Protokollieren von matplotlib.pyplot
SDK v1
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
azureml_run.log_image("sample_pyplot", plot=plt)
SDK v2 mit 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")
- Das Bild wird als Artefakt protokolliert und wird auf der Registerkarte Bilder in Azure Machine Learning Studio angezeigt.
Protokollieren einer Liste von Metriken
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 mit 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)
- Metriken werden auf der Registerkarte Metriken in Azure Machine Learning Studio angezeigt.
- Textwerte werden nicht unterstützt.
Protokollieren einer Zeile mit Metriken
SDK v1
azureml_run.log_row("sample_table", col1=5, col2=10)
SDK v2 mit MLflow
metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
- Metriken werden in Azure Machine Learning Studio nicht als Tabelle dargestellt.
- Textwerte werden nicht unterstützt.
- Als Artefakt protokolliert, nicht als Metrik.
Protokollieren einer Tabelle
SDK v1
table = {
"col1" : [1, 2, 3],
"col2" : [4, 5, 6]
}
azureml_run.log_table("table", table)
SDK v2 mit 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")
- Protokolliert die Metriken für jede Spalte.
- Metriken werden in Azure Machine Learning Studio nicht als Tabelle dargestellt.
- Textwerte werden nicht unterstützt.
- Als Artefakt protokolliert, nicht als Metrik.
Protokollieren einer Genauigkeitstabelle
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 mit 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')
- Metriken werden in Azure Machine Learning Studio nicht als Genauigkeitstabelle dargestellt.
- Als Artefakt protokolliert, nicht als Metrik.
- Die
mlflow.log_dict
-Methode ist experimentell.
Protokollieren einer Konfusionsmatrix
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 mit 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')
- Metriken werden in Azure Machine Learning Studio nicht als Konfusionsmatrix dargestellt.
- Als Artefakt protokolliert, nicht als Metrik.
- Die
mlflow.log_dict
-Methode ist experimentell.
Protokollieren von Vorhersagen
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 mit 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')
- Metriken werden in Azure Machine Learning Studio nicht als Konfusionsmatrix dargestellt.
- Als Artefakt protokolliert, nicht als Metrik.
- Die
mlflow.log_dict
-Methode ist experimentell.
Protokollieren von Restdaten
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 mit 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')
- Metriken werden in Azure Machine Learning Studio nicht als Konfusionsmatrix dargestellt.
- Als Artefakt protokolliert, nicht als Metrik.
- Die
mlflow.log_dict
-Methode ist experimentell.
Anzeigen von Informationen und Daten zur Ausführung
Sie können mithilfe der Eigenschaften „data
“ und „info
“ des MLflow-Ausführungsobjekts (mlflow.entities.Run) auf Ausführungsinformationen zugreifen.
Tipp
Nachverfolgungsinformationen zu Experimenten und Ausführungen in Azure Machine Learning können mithilfe von MLflow abgefragt werden. MLflow bietet eine umfassende Such-API zum einfachen Abfragen und Suchen nach Experimenten und Ausführungen sowie zum schnellen Vergleichen von Ergebnissen. Weitere Informationen zu allen Funktionen in MLflow in dieser Dimension finden Sie unter Abfragen und Vergleichen von Experimenten und Ausführungen mit MLflow
Das folgende Beispiel zeigt, wie eine abgeschlossene Ausführung abgerufen werden kann:
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>")
Das folgende Beispiel zeigt, wie Sie metrics
, tags
und params
anzeigen können:
metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params
Hinweis
Die metrics
enthalten nur den zuletzt protokollierten Wert für eine bestimmte Metrik. Wenn Sie beispielsweise einen Wert in der Reihenfolge 1
, dann 2
, 3
und schließlich 4
in eine Metrik namens sample_metric
protokollieren, wird nur 4
im metrics
-Wörterbuch vorhanden sein. Verwenden Sie MlFlowClient.get_metric_history, um alle Metriken abzurufen, die für eine bestimmte benannte Metrik protokolliert wurden:
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"))
Weitere Informationen finden Sie in der Referenz zu MlFlowClient.
Das Feld info
enthält allgemeine Informationen zur Ausführung wie Startzeit, Ausführungs-ID, Experiment-ID usw.:
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
Anzeigen von Ausführungsartefakten
Zum Anzeigen der Artefakte einer Ausführung verwenden Sie MlFlowClient.list_artifacts:
client.list_artifacts(finished_mlflow_run.info.run_id)
Verwenden Sie zum Herunterladen eines Artefakts mlflow.artifacts.download_artifacts:
mlflow.artifacts.download_artifacts(run_id=finished_mlflow_run.info.run_id, artifact_path="Azure.png")
Nächste Schritte
- Verfolgen Sie ML-Experimenten und -Modellen mit MLflow nach.
- Protokollieren Sie Metriken, Parametern und Dateien mit MLflow.
- Protokollieren Sie MLflow-Modelle.
- Abfragen und Vergleichen von Experimenten und Ausführungen mit MLflow
- Verwalten von Modellregistrierungen in Azure Machine Learning mit MLflow