Migrera loggning från SDK v1 till SDK v2

Azure Machine Learning använder MLflow Tracking för måttloggning och artefaktlagring för dina experiment, oavsett om du skapade experimenten via Azure Machine Learning Python SDK, Azure Machine Learning CLI eller Azure Machine Learning-studio. Vi rekommenderar att du använder MLflow för att spåra experiment.

Om du migrerar från SDK v1 till SDK v2 använder du informationen i det här avsnittet för att förstå MLflow-motsvarigheterna till SDK v1-loggnings-API:er.

Varför MLflow?

MLflow, med över 13 miljoner månatliga nedladdningar, har blivit standardplattformen för MLOps från slutpunkt till slutpunkt, vilket gör det möjligt för team av alla storlekar att spåra, dela, paketera och distribuera valfri modell för batch- eller realtidsinferens. Azure Machine Learning integreras med MLflow, vilket gör det möjligt för din träningskod att uppnå verklig portabilitet och sömlös integrering med andra plattformar eftersom den inte innehåller några specifika instruktioner för Azure Machine Learning.

Förbereda för migrering till MLflow

Om du vill använda MLflow-spårning måste du installera Mlflow SDK-paketet mlflow och Azure Machine Learning-plugin-programmet för MLflow azureml-mlflow. Alla Azure Machine Learning-miljöer har redan dessa paket tillgängliga för dig, men du måste inkludera dem om du skapar din egen miljö.

pip install mlflow azureml-mlflow

Anslut till din arbetsyta

Med Azure Machine Learning kan användare utföra spårning i träningsjobb som körs på din arbetsyta eller fjärrköra (spåra experiment som körs utanför Azure Machine Learning). Om du utför fjärrspårning måste du ange den arbetsyta som du vill ansluta MLflow till.

Du är redan ansluten till din arbetsyta när du kör Azure Machine Learning-beräkning.

Experiment och körningar

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 med MLflow

# Set the MLflow experiment and start a run
mlflow.set_experiment("logging-with-mlflow")
mlflow_run = mlflow.start_run()

Jämförelse av loggnings-API

Logga ett heltal eller flyttalsmått

SDK v1

azureml_run.log("sample_int_metric", 1)

SDK v2 med MLflow

mlflow.log_metric("sample_int_metric", 1)

Logga ett booleskt mått

SDK v1

azureml_run.log("sample_boolean_metric", True)

SDK v2 med MLflow

mlflow.log_metric("sample_boolean_metric", 1)

Logga ett strängmått

SDK v1

azureml_run.log("sample_string_metric", "a_metric")

SDK v2 med MLflow

mlflow.log_text("sample_string_text", "string.txt")
  • Strängen loggas som en artefakt, inte som ett mått. I Azure Machine Learning-studio visas värdet på fliken Utdata + loggar.

Logga en bild till en PNG- eller JPEG-fil

SDK v1

azureml_run.log_image("sample_image", path="Azure.png")

SDK v2 med MLflow

mlflow.log_artifact("Azure.png")

Bilden loggas som en artefakt och visas på fliken Bilder i Azure Machine Learning Studio.

Logga en matplotlib.pyplot

SDK v1

import matplotlib.pyplot as plt

plt.plot([1, 2, 3])
azureml_run.log_image("sample_pyplot", plot=plt)

SDK v2 med 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")
  • Bilden loggas som en artefakt och visas på fliken Bilder i Azure Machine Learning Studio.

Logga en lista över mått

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 med 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)
  • Mått visas på fliken mått i Azure Machine Learning-studio.
  • Textvärden stöds inte.

Logga en rad med mått

SDK v1

azureml_run.log_row("sample_table", col1=5, col2=10)

SDK v2 med MLflow

metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
  • Mått återges inte som en tabell i Azure Machine Learning-studio.
  • Textvärden stöds inte.
  • Loggas som en artefakt, inte som ett mått.

Logga en tabell

SDK v1

table = {
"col1" : [1, 2, 3],
"col2" : [4, 5, 6]
}
azureml_run.log_table("table", table)

SDK v2 med 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")
  • Loggar mått för varje kolumn.
  • Mått återges inte som en tabell i Azure Machine Learning-studio.
  • Textvärden stöds inte.
  • Loggas som en artefakt, inte som ett mått.

Logga en noggrannhetstabell

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 med 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')
  • Mått återges inte som en noggrannhetstabell i Azure Machine Learning-studio.
  • Loggas som en artefakt, inte som ett mått.
  • Metoden mlflow.log_dict är experimentell.

Logga en förvirringsmatris

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 med 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')
  • Mått återges inte som en förvirringsmatris i Azure Machine Learning-studio.
  • Loggas som en artefakt, inte som ett mått.
  • Metoden mlflow.log_dict är experimentell.

Loggförutsägelser

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 med 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')
  • Mått återges inte som en förvirringsmatris i Azure Machine Learning-studio.
  • Loggas som en artefakt, inte som ett mått.
  • Metoden mlflow.log_dict är experimentell.

Loggrester

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 med 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')
  • Mått återges inte som en förvirringsmatris i Azure Machine Learning-studio.
  • Loggas som en artefakt, inte som ett mått.
  • Metoden mlflow.log_dict är experimentell.

Visa körningsinformation och data

Du kan komma åt körningsinformation med hjälp av egenskaperna data och info MLflow-körningsobjektet (mlflow.entities.Run).

Dricks

Experiment och kör spårningsinformation i Azure Machine Learning kan efterfrågas med hjälp av MLflow, som tillhandahåller ett omfattande sök-API för att fråga och söka efter experiment och körs enkelt och snabbt jämföra resultat. Mer information om alla funktioner i MLflow i den här dimensionen finns i Fråga och jämför experiment och körningar med MLflow

I följande exempel visas hur du hämtar en slutförd körning:

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>")

I följande exempel visas hur du visar metrics, tagsoch params:

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

Kommentar

Kommer metrics bara att ha det senast loggade värdet för ett visst mått. Om du till exempel loggar in i ordning visas ett värde på 1, , 32och slutligen 4 till ett mått med namnet sample_metric, endast 4 i metrics ordlistan. Om du vill få alla mått loggade för ett specifikt namngivet mått använder du 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"))

Mer information finns i MlFlowClient-referensen.

Fältet info innehåller allmän information om körningen, till exempel starttid, körnings-ID, experiment-ID osv.:

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

Visa körningsartefakter

Om du vill visa artefakterna för en körning använder du MlFlowClient.list_artifacts:

client.list_artifacts(finished_mlflow_run.info.run_id)

Om du vill ladda ned en artefakt använder du mlflow.artifacts.download_artifacts:

mlflow.artifacts.download_artifacts(run_id=finished_mlflow_run.info.run_id, artifact_path="Azure.png")

Nästa steg