Migrowanie rejestrowania z zestawu SDK w wersji 1 do zestawu SDK w wersji 2

Usługa Azure Machine Edukacja używa rozwiązania MLflow Tracking na potrzeby rejestrowania metryk i magazynu artefaktów dla eksperymentów niezależnie od tego, czy eksperymenty zostały utworzone za pośrednictwem zestawu SDK języka Python usługi Azure Machine Edukacja, interfejsu wiersza polecenia usługi Azure Machine Edukacja lub usługi Azure Machine Edukacja Studio. Zalecamy używanie biblioteki MLflow do śledzenia eksperymentów.

Jeśli przeprowadzasz migrację z zestawu SDK w wersji 1 do zestawu SDK w wersji 2, skorzystaj z informacji w tej sekcji, aby poznać odpowiedniki biblioteki MLflow interfejsów API rejestrowania zestawu SDK w wersji 1.

Dlaczego MLflow?

MLflow, z ponad 13 milionami miesięcznych pobrań, stał się standardową platformą kompleksowej metodyki MLOps, umożliwiając zespołom wszystkich rozmiarów śledzenie, udostępnianie, pakowanie i wdrażanie dowolnego modelu na potrzeby wnioskowania wsadowego lub w czasie rzeczywistym. Usługa Azure Machine Edukacja integruje się z rozwiązaniem MLflow, co umożliwia kodowi szkoleniowemu osiągnięcie prawdziwej przenośności i bezproblemowej integracji z innymi platformami, ponieważ nie zawiera żadnych instrukcji usługi Azure Machine Edukacja.

Przygotowanie do migracji do platformy MLflow

Aby użyć śledzenia MLflow, należy zainstalować pakiet mlflow zestawu MLflow SDK i wtyczkę azure Machine Edukacja dla biblioteki MLflowazureml-mlflow. Wszystkie środowiska usługi Azure Machine Edukacja mają te pakiety już dostępne, ale należy je uwzględnić w przypadku tworzenia własnego środowiska.

pip install mlflow azureml-mlflow

Nawiązywanie połączenia z obszarem roboczym

Usługa Azure Machine Edukacja umożliwia użytkownikom śledzenie zadań szkoleniowych uruchomionych w obszarze roboczym lub zdalnie (śledzenie eksperymentów uruchomionych poza usługą Azure Machine Edukacja). W przypadku przeprowadzania śledzenia zdalnego należy wskazać obszar roboczy, z którym chcesz połączyć rozwiązanie MLflow.

Masz już połączenie z obszarem roboczym podczas uruchamiania na maszynie azure Edukacja obliczeniowych.

Eksperymenty i przebiegi

Zestaw SDK w wersji 1

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

Zestaw SDK w wersji 2 z biblioteką MLflow

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

Porównanie interfejsu API rejestrowania

Rejestrowanie liczby całkowitej lub metryki zmiennoprzecinkowej

Zestaw SDK w wersji 1

azureml_run.log("sample_int_metric", 1)

Zestaw SDK w wersji 2 z biblioteką MLflow

mlflow.log_metric("sample_int_metric", 1)

Rejestrowanie metryki logicznej

Zestaw SDK w wersji 1

azureml_run.log("sample_boolean_metric", True)

Zestaw SDK w wersji 2 z biblioteką MLflow

mlflow.log_metric("sample_boolean_metric", 1)

Rejestrowanie metryki ciągu

Zestaw SDK w wersji 1

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

Zestaw SDK w wersji 2 z biblioteką MLflow

mlflow.log_text("sample_string_text", "string.txt")
  • Ciąg jest rejestrowany jako artefakt, a nie jako metryka. W usłudze Azure Machine Edukacja Studio wartość jest wyświetlana na karcie Dane wyjściowe i dzienniki.

Rejestrowanie obrazu w pliku PNG lub JPEG

Zestaw SDK w wersji 1

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

Zestaw SDK w wersji 2 z biblioteką MLflow

mlflow.log_artifact("Azure.png")

Obraz jest rejestrowany jako artefakt i jest wyświetlany na karcie Obrazy w usłudze Azure Machine Edukacja Studio.

Rejestrowanie biblioteki matplotlib.pyplot

Zestaw SDK w wersji 1

import matplotlib.pyplot as plt

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

Zestaw SDK w wersji 2 z biblioteką 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")
  • Obraz jest rejestrowany jako artefakt i jest wyświetlany na karcie Obrazy w usłudze Azure Machine Edukacja Studio.

Rejestrowanie listy metryk

Zestaw SDK w wersji 1

list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
azureml_run.log_list('sample_list', list_to_log)

Zestaw SDK w wersji 2 z biblioteką 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)
  • Metryki są wyświetlane na karcie metryk w usłudze Azure Machine Edukacja Studio.
  • Wartości tekstowe nie są obsługiwane.

Rejestrowanie wiersza metryk

Zestaw SDK w wersji 1

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

Zestaw SDK w wersji 2 z biblioteką MLflow

metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
  • Metryki nie są renderowane jako tabela w usłudze Azure Machine Edukacja Studio.
  • Wartości tekstowe nie są obsługiwane.
  • Zarejestrowane jako artefakt, a nie jako metryka.

Rejestrowanie tabeli

Zestaw SDK w wersji 1

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

Zestaw SDK w wersji 2 z biblioteką 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")
  • Rejestruje metryki dla każdej kolumny.
  • Metryki nie są renderowane jako tabela w usłudze Azure Machine Edukacja Studio.
  • Wartości tekstowe nie są obsługiwane.
  • Zarejestrowane jako artefakt, a nie jako metryka.

Rejestrowanie tabeli dokładności

Zestaw SDK w wersji 1

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)

Zestaw SDK w wersji 2 z biblioteką 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')
  • Metryki nie są renderowane jako tabela dokładności w usłudze Azure Machine Edukacja Studio.
  • Zarejestrowane jako artefakt, a nie jako metryka.
  • Metoda jest eksperymentalnamlflow.log_dict.

Rejestrowanie macierzy pomyłek

Zestaw SDK w wersji 1

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

Zestaw SDK w wersji 2 z biblioteką 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')
  • Metryki nie są renderowane jako macierz pomyłek w usłudze Azure Machine Edukacja Studio.
  • Zarejestrowane jako artefakt, a nie jako metryka.
  • Metoda jest eksperymentalnamlflow.log_dict.

Przewidywania dzienników

Zestaw SDK w wersji 1

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

Zestaw SDK w wersji 2 z biblioteką 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')
  • Metryki nie są renderowane jako macierz pomyłek w usłudze Azure Machine Edukacja Studio.
  • Zarejestrowane jako artefakt, a nie jako metryka.
  • Metoda jest eksperymentalnamlflow.log_dict.

Reszty dziennika

Zestaw SDK w wersji 1

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

Zestaw SDK w wersji 2 z biblioteką 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')
  • Metryki nie są renderowane jako macierz pomyłek w usłudze Azure Machine Edukacja Studio.
  • Zarejestrowane jako artefakt, a nie jako metryka.
  • Metoda jest eksperymentalnamlflow.log_dict.

Wyświetlanie informacji o przebiegu i danych

Dostęp do informacji o przebiegu można uzyskać przy użyciu właściwości data i info obiektu MLflow run (mlflow.entities.Run).

Napiwek

Eksperymenty i przebiegi informacji śledzenia w usłudze Azure Machine Edukacja można wykonywać zapytania przy użyciu biblioteki MLflow, która udostępnia kompleksowy interfejs API wyszukiwania do wykonywania zapytań i wyszukiwania eksperymentów oraz łatwego uruchamiania i szybkiego porównywania wyników. Aby uzyskać więcej informacji o wszystkich możliwościach platformy MLflow w tym wymiarze, zobacz Zapytania i porównywanie eksperymentów i przebiegów za pomocą biblioteki MLflow

W poniższym przykładzie pokazano, jak pobrać ukończony przebieg:

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

W poniższym przykładzie pokazano, jak wyświetlić element metrics, tagsi params:

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

Uwaga

Parametr metrics będzie miał tylko ostatnio zarejestrowaną wartość dla danej metryki. Jeśli na przykład logujesz się w kolejności wartości 1, , 32, i na koniec 4 do metryki o nazwie sample_metric, tylko 4 będą obecne w słownikumetrics. Aby pobrać wszystkie metryki zarejestrowane dla określonej nazwanej metryki, użyj 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"))

Aby uzyskać więcej informacji, zobacz dokumentację klasy MlFlowClient .

Pole info zawiera ogólne informacje o przebiegu, takie jak czas rozpoczęcia, identyfikator przebiegu, identyfikator eksperymentu itp.:

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

Wyświetlanie artefaktów uruchamiania

Aby wyświetlić artefakty przebiegu, użyj MlFlowClient.list_artifacts:

client.list_artifacts(finished_mlflow_run.info.run_id)

Aby pobrać artefakt, użyj mlflow.artifacts.download_artifacts:

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

Następne kroki