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 2
3
, végül 4
pedig egy elnevezett sample_metric
metrika értékét 1
adja 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
- Ml-kísérletek és modellek nyomon követése az MLflow használatával.
- Naplómetrikák, paraméterek és fájlok az MLflow használatával.
- MLflow-modellek naplózása.
- Lekérdezés > kísérletek és futtatások összehasonlítása az MLflow-tal.
- Modellregisztrációs adatbázisok kezelése az Azure Machine Tanulás MLflow használatával.