Dela via


Migrera loggning från SDK v1 till SDK v2

Azure Mašinsko učenje använder MLflow Tracking för måttloggning och artefaktlagring för dina experiment, oavsett om du skapade experimenten via Azure Mašinsko učenje Python SDK, Azure Mašinsko učenje CLI eller Azure Mašinsko učenje 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 Mašinsko učenje 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 Azure-Mašinsko učenje specifika instruktioner.

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 Mašinsko učenje plugin-programmet för MLflow azureml-mlflow. Alla Azure Mašinsko učenje-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 Mašinsko učenje 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 Mašinsko učenje). 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 på Azure Mašinsko učenje 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 Mašinsko učenje 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 Mašinsko učenje 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 Mašinsko učenje 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 Mašinsko učenje 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 Mašinsko učenje 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 Mašinsko učenje 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 Mašinsko učenje 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 Mašinsko učenje 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 Mašinsko učenje 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 Mašinsko učenje 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 Mašinsko učenje 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