Logboekregistratie migreren van SDK v1 naar SDK v2
Azure Machine Learning maakt gebruik van MLflow Tracking voor metrische logboekregistratie en artefactopslag voor uw experimenten, ongeacht of u de experimenten hebt gemaakt via de Azure Machine Learning Python SDK, de Azure Machine Learning CLI of Azure Machine Learning-studio. U wordt aangeraden MLflow te gebruiken voor het bijhouden van experimenten.
Als u een upgrade uitvoert van SDK v1 naar SDK v2, gebruikt u de informatie in deze sectie om inzicht te hebben in de MLflow-equivalenten van SDK v1-logboekregistratie-API's.
Waarom MLflow?
MLflow, met meer dan 13 miljoen maandelijkse downloads, is het standaardplatform geworden voor end-to-end MLOps, waardoor teams van alle grootten elk model kunnen bijhouden, delen, verpakken en implementeren voor batch- of realtimedeductie. Azure Machine Learning kan worden geïntegreerd met MLflow, waarmee uw trainingscode echte draagbaarheid en naadloze integratie met andere platforms kan bereiken, omdat deze geen specifieke Instructies voor Azure Machine Learning bevat.
Voorbereiden voor migratie naar MLflow
Als u MLflow-tracering wilt gebruiken, moet u het Mlflow SDK-pakket mlflow
en de Azure Machine Learning-invoegtoepassing voor MLflow azureml-mlflow
installeren. Alle Azure Machine Learning-omgevingen hebben deze pakketten al voor u beschikbaar, maar u moet ze opnemen als u uw eigen omgeving maakt.
pip install mlflow azureml-mlflow
Verbinding maken met uw werkruimte
Met Azure Machine Learning kunnen gebruikers bijhouden in trainingstaken die worden uitgevoerd in uw werkruimte of extern worden uitgevoerd (bijhouden van experimenten die buiten Azure Machine Learning worden uitgevoerd). Als u externe tracering uitvoert, moet u de werkruimte aangeven waarmee u MLflow wilt verbinden.
U bent al verbonden met uw werkruimte wanneer deze wordt uitgevoerd op Azure Machine Learning Compute.
Experimenten en uitvoeringen
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 met MLflow
# Set the MLflow experiment and start a run
mlflow.set_experiment("logging-with-mlflow")
mlflow_run = mlflow.start_run()
Vergelijking van logboekregistratie-API
Een geheel getal of metrische floatgegevens registreren
SDK v1
azureml_run.log("sample_int_metric", 1)
SDK v2 met MLflow
mlflow.log_metric("sample_int_metric", 1)
Een booleaanse metrische waarde vastleggen
SDK v1
azureml_run.log("sample_boolean_metric", True)
SDK v2 met MLflow
mlflow.log_metric("sample_boolean_metric", 1)
Een metrische tekenreeks registreren
SDK v1
azureml_run.log("sample_string_metric", "a_metric")
SDK v2 met MLflow
mlflow.log_text("sample_string_text", "string.txt")
- De tekenreeks wordt geregistreerd als een artefact, niet als metrische waarde. In Azure Machine Learning-studio wordt de waarde weergegeven op het tabblad Uitvoer en logboeken.
Een afbeelding vastleggen in een PNG- of JPEG-bestand
SDK v1
azureml_run.log_image("sample_image", path="Azure.png")
SDK v2 met MLflow
mlflow.log_artifact("Azure.png")
De afbeelding wordt geregistreerd als een artefact en wordt weergegeven op het tabblad Afbeeldingen in Azure Machine Learning-studio.
Een matplotlib.pyplot registreren
SDK v1
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
azureml_run.log_image("sample_pyplot", plot=plt)
SDK v2 met 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")
- De afbeelding wordt geregistreerd als een artefact en wordt weergegeven op het tabblad Afbeeldingen in Azure Machine Learning-studio.
Een lijst met metrische gegevens registreren
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 met 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)
- Metrische gegevens worden weergegeven op het tabblad Metrische gegevens in Azure Machine Learning-studio.
- Tekstwaarden worden niet ondersteund.
Een rij met metrische gegevens registreren
SDK v1
azureml_run.log_row("sample_table", col1=5, col2=10)
SDK v2 met MLflow
metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
- Metrische gegevens worden niet weergegeven als een tabel in Azure Machine Learning-studio.
- Tekstwaarden worden niet ondersteund.
- Geregistreerd als een artefact, niet als metrische waarde.
Een tabel registreren
SDK v1
table = {
"col1" : [1, 2, 3],
"col2" : [4, 5, 6]
}
azureml_run.log_table("table", table)
SDK v2 met 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")
- Registreert metrische gegevens voor elke kolom.
- Metrische gegevens worden niet weergegeven als een tabel in Azure Machine Learning-studio.
- Tekstwaarden worden niet ondersteund.
- Geregistreerd als een artefact, niet als metrische waarde.
Een nauwkeurigheidstabel vastleggen
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 met 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')
- Metrische gegevens worden niet weergegeven als een nauwkeurigheidstabel in Azure Machine Learning-studio.
- Geregistreerd als een artefact, niet als metrische waarde.
- De
mlflow.log_dict
methode is experimenteel.
Een verwarringsmatrix registreren
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 met 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')
- Metrische gegevens worden niet weergegeven als verwarringsmatrix in Azure Machine Learning-studio.
- Geregistreerd als een artefact, niet als metrische waarde.
- De
mlflow.log_dict
methode is experimenteel.
Logboekvoorspellingen
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 met 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')
- Metrische gegevens worden niet weergegeven als verwarringsmatrix in Azure Machine Learning-studio.
- Geregistreerd als een artefact, niet als metrische waarde.
- De
mlflow.log_dict
methode is experimenteel.
Logboekresiduen
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 met 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')
- Metrische gegevens worden niet weergegeven als verwarringsmatrix in Azure Machine Learning-studio.
- Geregistreerd als een artefact, niet als metrische waarde.
- De
mlflow.log_dict
methode is experimenteel.
Uitvoeringsinformatie en -gegevens weergeven
U hebt toegang tot uitvoeringsinformatie met behulp van de eigenschappen data
en info
van het MLflow-runobject (mlflow.entities.Run).
Tip
Experimenten en traceringsgegevens in Azure Machine Learning kunnen worden opgevraagd met behulp van MLflow, dat een uitgebreide zoek-API biedt om experimenten op te vragen en te zoeken en eenvoudig uit te voeren en resultaten snel te vergelijken. Zie Query && compare experimenten and runs with MLflow with MLflow(MLflow) voor meer informatie over alle mogelijkheden in MLflow in deze dimensie .
In het volgende voorbeeld ziet u hoe u een voltooide uitvoering kunt ophalen:
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>")
In het volgende voorbeeld ziet u hoe u de metrics
, tags
en params
:
metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params
Notitie
De metrics
waarde die het laatst is geregistreerd voor een bepaalde metrische waarde, heeft alleen de laatst geregistreerde waarde. Als u zich bijvoorbeeld aanmeldt op volgorde van een waarde van 1
, dan 2
, 3
en ten slotte 4
aan een metrische waarde met de naam sample_metric
, zal alleen 4
aanwezig zijn in de metrics
woordenlijst. Als u alle metrische gegevens wilt ophalen die zijn geregistreerd voor een specifieke benoemde metriek, gebruikt u 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"))
Zie de mlFlowClient-verwijzing voor meer informatie.
Het info
veld bevat algemene informatie over de uitvoering, zoals de begintijd, de uitvoerings-id, de experiment-id, enzovoort:
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
Uitvoeringsartefacten weergeven
Gebruik MlFlowClient.list_artifacts om de artefacten van een uitvoering weer te geven:
client.list_artifacts(finished_mlflow_run.info.run_id)
Als u een artefact wilt downloaden, gebruikt u mlflow.artifacts.download_artifacts:
mlflow.artifacts.download_artifacts(run_id=finished_mlflow_run.info.run_id, artifact_path="Azure.png")