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 eksperymentalna
mlflow.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 eksperymentalna
mlflow.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 eksperymentalna
mlflow.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 eksperymentalna
mlflow.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
, tags
i 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
, , 3
2
, 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
- Śledzenie eksperymentów i modeli uczenia maszynowego za pomocą biblioteki MLflow.
- Metryki dziennika, parametry i pliki za pomocą biblioteki MLflow.
- Rejestrowanie modeli MLflow.
- Wykonywanie zapytań i porównywanie eksperymentów i przebiegów za pomocą biblioteki MLflow.
- Zarządzanie rejestrami modeli w usłudze Azure Machine Learning przy użyciu biblioteki MLflow.