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