Migrace protokolování ze sady SDK v1 do sady SDK v2

Azure Machine Učení používá pro experimenty sledování MLflow pro protokolování metrik a úložiště artefaktů, ať už jste experimenty vytvořili prostřednictvím sady Azure Machine Učení Python SDK, Azure Machine Učení CLI nebo studio Azure Machine Learning. Ke sledování experimentů doporučujeme použít MLflow.

Pokud migrujete ze sady SDK v1 na sadu SDK v2, využijte informace v této části, abyste porozuměli ekvivalentům MLflow rozhraní API protokolování sady SDK v1.

Proč MLflow?

MLflow s více než 13 miliony měsíčních stahování se stal standardní platformou pro komplexní MLOps, která týmům všech velikostí umožňuje sledovat, sdílet, zabalit a nasadit jakýkoli model pro odvozování dávek nebo v reálném čase. Azure Machine Učení se integruje s MLflow, což umožňuje trénovacímu kódu dosáhnout skutečné přenositelnosti a bezproblémové integrace s jinými platformami, protože neobsahuje žádné konkrétní pokyny pro Azure Machine Učení.

Příprava na migraci na MLflow

Pokud chcete použít sledování MLflow, musíte nainstalovat balíček mlflow Mlflow SDK a modul plug-in Azure Machine Učení pro MLflow azureml-mlflow. Všechny prostředí Azure Machine Učení mají tyto balíčky už k dispozici, ale pokud vytváříte vlastní prostředí, musíte je zahrnout.

pip install mlflow azureml-mlflow

Připojení k pracovnímu prostoru

Azure Machine Učení umožňuje uživatelům provádět sledování v trénovacích úlohách spuštěných ve vašem pracovním prostoru nebo vzdáleně (sledování experimentů spuštěných mimo službu Azure Machine Učení). Pokud provádíte vzdálené sledování, musíte označit pracovní prostor, ke kterému chcete připojit MLflow.

Už jste připojení ke svému pracovnímu prostoru při spuštění na Učení výpočetních prostředků Azure.

Experimenty a spuštění

Sada 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 s MLflow

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

Porovnání rozhraní API protokolování

Protokolování celočíselné nebo plovoucí metriky

Sada SDK v1

azureml_run.log("sample_int_metric", 1)

SDK v2 s MLflow

mlflow.log_metric("sample_int_metric", 1)

Protokolování logické metriky

Sada SDK v1

azureml_run.log("sample_boolean_metric", True)

SDK v2 s MLflow

mlflow.log_metric("sample_boolean_metric", 1)

Protokolování řetězcové metriky

Sada SDK v1

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

SDK v2 s MLflow

mlflow.log_text("sample_string_text", "string.txt")
  • Řetězec se protokoluje jako artefakt, ne jako metrika. V studio Azure Machine Learning se hodnota zobrazí na kartě Výstupy a protokoly.

Protokolování obrázku do souboru PNG nebo JPEG

Sada SDK v1

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

SDK v2 s MLflow

mlflow.log_artifact("Azure.png")

Image se zaprotokoluje jako artefakt a zobrazí se na kartě Image v nástroji Azure Machine Učení Studio.

Log a matplotlib.pyplot

Sada SDK v1

import matplotlib.pyplot as plt

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

SDK v2 s 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")
  • Image se zaprotokoluje jako artefakt a zobrazí se na kartě Image v nástroji Azure Machine Učení Studio.

Protokolování seznamu metrik

Sada 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 s 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)
  • Metriky se zobrazují na kartě metrik v studio Azure Machine Learning.
  • Textové hodnoty nejsou podporovány.

Protokolování řádku metrik

Sada SDK v1

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

SDK v2 s MLflow

metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
  • Metriky se v studio Azure Machine Learning nevykreslují jako tabulka.
  • Textové hodnoty nejsou podporovány.
  • Protokolováno jako artefakt, ne jako metrika.

Protokolování tabulky

Sada SDK v1

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

SDK v2 s 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")
  • Protokoluje metriky pro každý sloupec.
  • Metriky se v studio Azure Machine Learning nevykreslují jako tabulka.
  • Textové hodnoty nejsou podporovány.
  • Protokolováno jako artefakt, ne jako metrika.

Protokolování tabulky přesnosti

Sada 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 s 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')
  • Metriky se v studio Azure Machine Learning nevykreslují jako tabulka přesnosti.
  • Protokolováno jako artefakt, ne jako metrika.
  • Metoda mlflow.log_dict je experimentální.

Protokolování konfuzní matice

Sada 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 s 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')
  • Metriky se v studio Azure Machine Learning nevykreslují jako konfuzní matice.
  • Protokolováno jako artefakt, ne jako metrika.
  • Metoda mlflow.log_dict je experimentální.

Predikce protokolů

Sada 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 s 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')
  • Metriky se v studio Azure Machine Learning nevykreslují jako konfuzní matice.
  • Protokolováno jako artefakt, ne jako metrika.
  • Metoda mlflow.log_dict je experimentální.

Rezidua protokolu

Sada 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 s 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')
  • Metriky se v studio Azure Machine Learning nevykreslují jako konfuzní matice.
  • Protokolováno jako artefakt, ne jako metrika.
  • Metoda mlflow.log_dict je experimentální.

Zobrazení informací o spuštění a dat

K informacím o spuštění můžete přistupovat pomocí vlastností data a info objektu MLflow run (mlflow.entities.Run).

Tip

Pomocí MLflow je možné dotazovat experimenty a sledování spuštění ve službě Azure Machine Učení, které poskytuje komplexní rozhraní API pro vyhledávání pro dotazování a vyhledávání experimentů a spouštění a snadné porovnání výsledků. Další informace o všech možnostech MLflow v této dimenzi najdete v tématu Dotazování a porovnání experimentů a spuštění pomocí MLflow.

Následující příklad ukazuje, jak načíst dokončené spuštění:

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

Následující příklad ukazuje, jak zobrazit metrics, tagsa params:

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

Poznámka:

Pro metrics danou metriku bude mít pouze naposledy zaprotokolovanou hodnotu. Pokud se například přihlásíte k hodnotě 1, pak 32a nakonec 4 do metriky s názvem sample_metric, 4 bude ve slovníku metrics pouze. Pokud chcete získat všechny metriky protokolované pro konkrétní pojmenovanou metriku, použijte 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"))

Další informace najdete v referenční dokumentaci MlFlowClient .

Pole info poskytuje obecné informace o spuštění, jako je čas spuštění, ID spuštění, ID experimentu atd.:

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

Zobrazení artefaktů spuštění

Pokud chcete zobrazit artefakty spuštění, použijte MlFlowClient.list_artifacts:

client.list_artifacts(finished_mlflow_run.info.run_id)

Pokud chcete stáhnout artefakt, použijte mlflow.artifacts.download_artifacts:

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

Další kroky