Udostępnij za pośrednictwem


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

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

Jeśli uaktualniasz zestaw 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 Learning 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 specyficznych dla usługi Azure Machine Learning.

Przygotowanie do migracji do platformy MLflow

Aby korzystać ze śledzenia MLflow, należy zainstalować pakiet mlflow zestawu MLflow SDK i wtyczkę usługi Azure Machine Learning dla biblioteki MLflow azureml-mlflow. Wszystkie środowiska usługi Azure Machine Learning 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 Learning umożliwia użytkownikom śledzenie zadań szkoleniowych uruchomionych w obszarze roboczym lub zdalne uruchamianie (śledzenie eksperymentów uruchomionych poza usługą Azure Machine Learning). 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 w usłudze Azure Machine Learning Compute.

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

Zapytania dotyczące eksperymentów i przebiegów śledzenia w usłudze Azure Machine Learning można wykonywać przy użyciu biblioteki MLflow, która udostępnia kompleksowy interfejs API wyszukiwania do wykonywania zapytań i wyszukiwania eksperymentów oraz łatwego wykonywania 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