Migrace protokolování ze sady SDK v1 do sady SDK v2
Azure Machine Learning používá pro experimenty sledování MLflow pro protokolování metrik a úložiště artefaktů bez ohledu na to, jestli jste experimenty vytvořili prostřednictvím sady Azure Machine Learning Python SDK, azure Machine Learning 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 Learning 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é specifické pokyny pro Azure Machine Learning.
Příprava na migraci na MLflow
Pokud chcete používat sledování MLflow, musíte nainstalovat balíček mlflow
Mlflow SDK a modul plug-in Azure Machine Learning pro MLflow azureml-mlflow
. Všechna prostředí Azure Machine Learning už mají tyto balíčky 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 Learning 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 Azure Machine Learning). 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 výpočetních prostředcích služby Azure Machine Learning.
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")
Obrázek se zaprotokoluje jako artefakt a zobrazí se na kartě Obrázky v studio Azure Machine Learning.
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")
- Obrázek se zaprotokoluje jako artefakt a zobrazí se na kartě Obrázky v studio Azure Machine Learning.
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
Experimenty a spouštění informací o sledování ve službě Azure Machine Learning se dají dotazovat pomocí MLflow, 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
, tags
a 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 3
2
a 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")