Share via


Naplózás migrálása az SDK v1-ről az SDK v2-be

Az Azure Machine Tanulás az MLflow Trackingt használja a metrikanaplózáshoz és az összetevők tárolásához a kísérletekhez, függetlenül attól, hogy az Azure Machine Tanulás Python SDK-val, az Azure Machine Tanulás CLI-vel vagy az Azure Machine Tanulás Studióval hozta létre a kísérleteket. Javasoljuk, hogy az MLflow használatával kövesse nyomon a kísérleteket.

Ha SDK v1-ről SDK v2-re migrál, az ebben a szakaszban található információk segítségével megismerheti az SDK v1 naplózási API-k MLflow-megfelelőit.

Miért az MLflow?

A több mint 13 millió havi letöltéssel rendelkező MLflow a teljes körű MLOps szabványos platformjává vált, amely lehetővé teszi, hogy minden méretű csapat nyomon kövesse, ossza meg, csomagolja és telepítse a modelleket kötegelt vagy valós idejű következtetéshez. Az Azure Machine Tanulás integrálható az MLflow szolgáltatással, így a betanítási kód valódi hordozhatóságot és zökkenőmentes integrációt tesz lehetővé más platformokkal, mivel nem tartalmaz Azure Machine-Tanulás konkrét utasításokat.

Felkészülés az MLflow-ba való migrálásra

Az MLflow-nyomkövetés használatához telepítenie kell a Mlflow SDK-csomagot mlflow és az Azure Machine Tanulás beépülő modult az MLflow-hozazureml-mlflow. Minden Azure Machine Tanulás-környezet rendelkezik ezekkel a csomagokkal, de a saját környezet létrehozásakor fel kell vennie őket.

pip install mlflow azureml-mlflow

Csatlakozás a munkaterülethez

Az Azure Machine Tanulás lehetővé teszi a felhasználók számára a munkaterületen futó vagy távolról futó betanítási feladatok nyomon követését (az Azure Machine-Tanulás kívül futó kísérletek nyomon követését). Ha távoli nyomkövetést végez, meg kell jelölnie azt a munkaterületet, amelyhez az MLflow-t csatlakoztatni szeretné.

Már csatlakozik a munkaterülethez, amikor az Azure Machine Tanulás számításon fut.

Kísérletek és futtatások

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

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

Naplózási API összehasonlítása

Egész szám vagy lebegőpontos metrika naplózása

SDK v1

azureml_run.log("sample_int_metric", 1)

SDK v2 MLflow-val

mlflow.log_metric("sample_int_metric", 1)

Logikai metrika naplózása

SDK v1

azureml_run.log("sample_boolean_metric", True)

SDK v2 MLflow-val

mlflow.log_metric("sample_boolean_metric", 1)

Sztringmetrika naplózása

SDK v1

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

SDK v2 MLflow-val

mlflow.log_text("sample_string_text", "string.txt")
  • A sztringet a rendszer összetevőként naplózza, nem metrikaként. Az Azure Machine Tanulás Studióban az érték a Kimenetek + naplók lapon jelenik meg.

Kép naplózása PNG- vagy JPEG-fájlba

SDK v1

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

SDK v2 MLflow-val

mlflow.log_artifact("Azure.png")

A rendszerképet a rendszer összetevőként naplózza, és az Azure Machine Tanulás Studio Képek lapján jelenik meg.

Matplotlib.pyplot naplózása

SDK v1

import matplotlib.pyplot as plt

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

SDK v2 MLflow-val

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")
  • A rendszerképet a rendszer összetevőként naplózza, és az Azure Machine Tanulás Studio Képek lapján jelenik meg.

Metrikák listájának naplózása

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

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)
  • A metrikák az Azure Machine Tanulás Studióban a Metrikák lapon jelennek meg.
  • A szöveges értékek nem támogatottak.

Metrikák sorának naplózása

SDK v1

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

SDK v2 MLflow-val

metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
  • A metrikák nem jelennek meg táblázatként az Azure Machine Tanulás Studióban.
  • A szöveges értékek nem támogatottak.
  • A napló nem metrikaként, hanem összetevőként van naplózva.

Táblázat naplózása

SDK v1

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

SDK v2 MLflow-val

# 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")
  • Naplózza az egyes oszlopok metrikáit.
  • A metrikák nem jelennek meg táblázatként az Azure Machine Tanulás Studióban.
  • A szöveges értékek nem támogatottak.
  • A napló nem metrikaként, hanem összetevőként van naplózva.

Pontossági táblázat naplózása

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

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')
  • A metrikák nem jelennek meg pontossági táblázatként az Azure Machine Tanulás Studióban.
  • A napló nem metrikaként, hanem összetevőként van naplózva.
  • A mlflow.log_dict módszer kísérleti jellegű.

Keveredési mátrix naplózása

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

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')
  • A metrikák nem jelennek meg keveredési mátrixként az Azure Machine Tanulás Studióban.
  • A napló nem metrikaként, hanem összetevőként van naplózva.
  • A mlflow.log_dict módszer kísérleti jellegű.

Napló-előrejelzések

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

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')
  • A metrikák nem jelennek meg keveredési mátrixként az Azure Machine Tanulás Studióban.
  • A napló nem metrikaként, hanem összetevőként van naplózva.
  • A mlflow.log_dict módszer kísérleti jellegű.

Naplómaradványok

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

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')
  • A metrikák nem jelennek meg keveredési mátrixként az Azure Machine Tanulás Studióban.
  • A napló nem metrikaként, hanem összetevőként van naplózva.
  • A mlflow.log_dict módszer kísérleti jellegű.

Futtatási adatok és adatok megtekintése

A futtatási információk az MLflow-futtatás (mlflow.entities.Run) objektum tulajdonságaival data és info használatával érhetők el.

Tipp.

Az Azure Machine-Tanulás a kísérletek és a futtatások nyomon követési adatai lekérdezhetők az MLflow használatával, amely átfogó keresési API-t biztosít a kísérletek lekérdezéséhez és kereséséhez, valamint a futtatások egyszerű futtatásához, valamint az eredmények gyors összehasonlításához. Az MLflow ezen dimenzióban található összes funkciójával kapcsolatos további információkért lásd : Lekérdezés > kísérletek és futtatások összehasonlítása az MLflow-tal

Az alábbi példa bemutatja, hogyan kérhető le egy befejezett futtatás:

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

Az alábbi példa bemutatja, hogyan tekintheti meg a , tagsésparams:metrics

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

Megjegyzés:

A metrics rendszer csak egy adott metrika legutóbb naplózott értékével rendelkezik. Ha például egy , majd 23, végül 4 pedig egy elnevezett sample_metricmetrika értékét 1adja meg, akkor csak 4 a metrics szótárban jelenik meg. Ha az összes metrikát naplózni szeretné egy adott nevesített metrika esetében, használja a 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"))

További információ: MlFlowClient-referencia .

A info mező általános információkat tartalmaz a futtatásról, például a kezdési időpontról, a futtatási azonosítóról, a kísérletazonosítóról stb.:

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

Futtatási összetevők megtekintése

A futtatás összetevőinek megtekintéséhez használja a MlFlowClient.list_artifacts:

client.list_artifacts(finished_mlflow_run.info.run_id)

Összetevő letöltéséhez használja a mlflow.artifacts.download_artifacts:

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

További lépések