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 migreert 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-mlflowinstalleren. 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, tagsen 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, 3en 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")

Volgende stappen