Migrera loggning från SDK v1 till SDK v2
Azure Machine Learning använder MLflow Tracking för måttloggning och artefaktlagring för dina experiment, oavsett om du skapade experimenten via Azure Machine Learning Python SDK, Azure Machine Learning CLI eller Azure Machine Learning-studio. Vi rekommenderar att du använder MLflow för att spåra experiment.
Om du uppgraderar 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 Machine Learning 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 specifika instruktioner för Azure Machine Learning.
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 Machine Learning-plugin-programmet för MLflow azureml-mlflow
. Alla Azure Machine Learning-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 Machine Learning 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 Machine Learning). 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 Azure Machine Learning-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 Machine Learning-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 Machine Learning-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 Machine Learning-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 Machine Learning-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 Machine Learning-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 Machine Learning-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 Machine Learning-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 Machine Learning-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 Machine Learning-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 Machine Learning-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 Machine Learning 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
, tags
och 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
, , 3
2
och 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"))
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")