Share via


Eseguire la migrazione della registrazione dall'SDK v1 all'SDK v2

Azure Machine Learning usa MLflow Tracking per la registrazione delle metriche e l'archiviazione degli artefatti per gli esperimenti, indipendentemente dal fatto che gli esperimenti siano stati creati tramite Azure Machine Learning Python SDK, l'interfaccia della riga di comando di Azure Machine Learning o studio di Azure Machine Learning. È consigliabile usare MLflow per tenere traccia degli esperimenti.

Se si esegue la migrazione da SDK v1 a SDK v2, usare le informazioni in questa sezione per comprendere gli equivalenti MLflow delle API di registrazione SDK v1.

Perché MLflow?

MLflow, con oltre 13 milioni di download mensili, è diventata la piattaforma standard per MLOps end-to-end, consentendo ai team di tutte le dimensioni di tenere traccia, condividere, creare pacchetti e distribuire qualsiasi modello per l'inferenza batch o in tempo reale. Azure Machine Learning si integra con MLflow, che consente al codice di training di ottenere una vera portabilità e una perfetta integrazione con altre piattaforme, perché non contiene istruzioni specifiche di Azure Machine Learning.

Preparare la migrazione a MLflow

Per usare il rilevamento MLflow, è necessario installare il pacchetto mlflow Mlflow SDK e il plug-in di Azure Machine Learning per MLflow azureml-mlflow. Tutti gli ambienti di Azure Machine Learning dispongono di questi pacchetti già disponibili, ma è necessario includerli se si crea un ambiente personalizzato.

pip install mlflow azureml-mlflow

Connettersi all'area di lavoro

Azure Machine Learning consente agli utenti di eseguire il rilevamento nei processi di training in esecuzione nell'area di lavoro o in esecuzione in remoto (rilevamento degli esperimenti in esecuzione all'esterno di Azure Machine Learning). Se si esegue il rilevamento remoto, è necessario indicare l'area di lavoro a cui si vuole connettere MLflow.

L'utente è già connesso all'area di lavoro durante l'esecuzione nell'ambiente di calcolo di Azure Machine Learning.

Esperimenti ed esecuzioni

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 con MLflow

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

Confronto tra LE API di registrazione

Registrare un numero intero o una metrica float

SDK v1

azureml_run.log("sample_int_metric", 1)

SDK v2 con MLflow

mlflow.log_metric("sample_int_metric", 1)

Registrare una metrica booleana

SDK v1

azureml_run.log("sample_boolean_metric", True)

SDK v2 con MLflow

mlflow.log_metric("sample_boolean_metric", 1)

Registrare una metrica stringa

SDK v1

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

SDK v2 con MLflow

mlflow.log_text("sample_string_text", "string.txt")
  • La stringa viene registrata come artefatto, non come metrica. In studio di Azure Machine Learning il valore viene visualizzato nella scheda Output e log.

Registrare un'immagine in un file PNG o JPEG

SDK v1

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

SDK v2 con MLflow

mlflow.log_artifact("Azure.png")

L'immagine viene registrata come artefatto e viene visualizzata nella scheda Immagini in Azure Machine Learning Studio.

Registrare un file matplotlib.pyplot

SDK v1

import matplotlib.pyplot as plt

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

SDK v2 con 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")
  • L'immagine viene registrata come artefatto e viene visualizzata nella scheda Immagini in Azure Machine Learning Studio.

Registrare un elenco di metriche

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 con 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)
  • Le metriche vengono visualizzate nella scheda metriche in studio di Azure Machine Learning.
  • I valori di testo non sono supportati.

Registrare una riga di metriche

SDK v1

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

SDK v2 con MLflow

metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
  • Il rendering delle metriche non viene eseguito come tabella in studio di Azure Machine Learning.
  • I valori di testo non sono supportati.
  • Registrato come artefatto, non come metrica.

Registrare una tabella

SDK v1

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

SDK v2 con 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")
  • Registra le metriche per ogni colonna.
  • Il rendering delle metriche non viene eseguito come tabella in studio di Azure Machine Learning.
  • I valori di testo non sono supportati.
  • Registrato come artefatto, non come metrica.

Registrare una tabella di accuratezza

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 con 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')
  • Le metriche non vengono eseguite come tabella di accuratezza in studio di Azure Machine Learning.
  • Registrato come artefatto, non come metrica.
  • Il mlflow.log_dict metodo è sperimentale.

Registrare una matrice di confusione

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 con 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')
  • Le metriche non vengono eseguite come matrice di confusione in studio di Azure Machine Learning.
  • Registrato come artefatto, non come metrica.
  • Il mlflow.log_dict metodo è sperimentale.

Stime dei log

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 con 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')
  • Le metriche non vengono eseguite come matrice di confusione in studio di Azure Machine Learning.
  • Registrato come artefatto, non come metrica.
  • Il mlflow.log_dict metodo è sperimentale.

Residui del log

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 con 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')
  • Le metriche non vengono eseguite come matrice di confusione in studio di Azure Machine Learning.
  • Registrato come artefatto, non come metrica.
  • Il mlflow.log_dict metodo è sperimentale.

Visualizzare informazioni e dati di esecuzione

È possibile accedere alle informazioni di esecuzione usando le proprietà data e info l'oggetto MLflow run (mlflow.entities.Run).

Suggerimento

È possibile eseguire query su esperimenti ed esecuzioni di informazioni di rilevamento in Azure Machine Learning usando MLflow, che fornisce un'API di ricerca completa per eseguire query e cercare esperimenti ed esecuzioni facilmente e confrontare rapidamente i risultati. Per altre informazioni su tutte le funzionalità di MLflow in questa dimensione, vedere Eseguire query e confrontare esperimenti ed esecuzioni con MLflow

Nell'esempio seguente viene illustrato come recuperare un'esecuzione completata:

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

Nell'esempio seguente viene illustrato come visualizzare , metricstagse params:

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

Nota

L'oggetto metrics avrà solo il valore registrato più di recente per una determinata metrica. Ad esempio, se si accede in ordine a un valore di 1, 2, 3, e infine 4 a una metrica denominata sample_metric, sarà presente solo 4 nel metrics dizionario. Per ottenere tutte le metriche registrate per una metrica denominata specifica, usare 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"))

Per altre informazioni, vedere le informazioni di riferimento su MlFlowClient .

Il info campo fornisce informazioni generali sull'esecuzione, ad esempio ora di inizio, ID esecuzione, ID esperimento e così via:

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

Visualizzare gli artefatti di esecuzione

Per visualizzare gli artefatti di un'esecuzione, usare MlFlowClient.list_artifacts:

client.list_artifacts(finished_mlflow_run.info.run_id)

Per scaricare un artefatto, usare mlflow.artifacts.download_artifacts:

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

Passaggi successivi