Поделиться через


Перенос журнала из пакета SDK версии 1 в пакет SDK версии 2

Машинное обучение Azure использует отслеживание MLflow для регистрации метрик и хранения артефактов для экспериментов, созданных любым способом: с помощью пакета SDK Python Машинного обучения Azure, интерфейса командной строки Машинного обучения Azure или Студии машинного обучения Azure. Мы рекомендуем использовать MLflow для отслеживания экспериментов.

Если вы переносите пакет SDK версии 1 в пакет SDK версии 2, используйте сведения в этом разделе, чтобы понять эквиваленты MLflow API ведения журнала версии 1 пакета SDK версии 1.

Почему MLflow?

MLflow с более чем 13 миллионами ежемесячных скачиваемых файлов стала стандартной платформой для сквозного mlOps, позволяя командам всех размеров отслеживать, делиться, упаковывать и развертывать любую модель для вывода пакетной службы или в режиме реального времени. Машинное обучение Azure интегрируется с MLflow, что позволяет обучающий код достичь истинной переносимости и простой интеграции с другими платформами, так как он не содержит никаких Машинное обучение Azure конкретных инструкций.

Подготовка к миграции в MLflow

Чтобы использовать отслеживание MLflow, необходимо установить пакет mlflow SDK Mlflow и Машинное обучение Azure подключаемый модуль для MLflowazureml-mlflow. Все среды Машинное обучение Azure уже доступны для этих пакетов, но их необходимо включить при создании собственной среды.

pip install mlflow azureml-mlflow

Подключение к рабочей области

Машинное обучение Azure позволяет пользователям выполнять отслеживание заданий обучения, выполняемых в рабочей области или удаленно выполняющихся (эксперименты отслеживания, выполняемые вне Машинное обучение Azure). При выполнении удаленного отслеживания необходимо указать рабочую область, к которой требуется подключить MLflow.

Вы уже подключены к рабочей области при выполнении Машинное обучение Azure вычислений.

Эксперименты и выполнения

Пакет SDK версии 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()

Пакет SDK версии 2 с MLflow

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

Сравнение API-интерфейсов для ведения журнала

Ведение журнала целого числа или числа с плавающей точкой

Пакет SDK версии 1

azureml_run.log("sample_int_metric", 1)

Пакет SDK версии 2 с MLflow

mlflow.log_metric("sample_int_metric", 1)

Ведение журнала логического значения

Пакет SDK версии 1

azureml_run.log("sample_boolean_metric", True)

Пакет SDK версии 2 с MLflow

mlflow.log_metric("sample_boolean_metric", 1)

Ведение журнала строковой метрики

Пакет SDK версии 1

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

Пакет SDK версии 2 с MLflow

mlflow.log_text("sample_string_text", "string.txt")
  • Строка регистрируется как артефакт, а не как метрика. В Студия машинного обучения Azure значение отображается на вкладке "Выходные данные и журналы".

Запись изображения в PNG или JPEG-файл

Пакет SDK версии 1

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

Пакет SDK версии 2 с MLflow

mlflow.log_artifact("Azure.png")

Изображение регистрируется как артефакт и отображается на вкладке "Изображения" в Машинное обучение Azure Studio.

Регистрация matplotlib.pyplot

Пакет SDK версии 1

import matplotlib.pyplot as plt

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

Пакет SDK версии 2 с 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")
  • Изображение регистрируется как артефакт и отображается на вкладке "Изображения" в Машинное обучение Azure Studio.

Ведение журнала списка метрик

Пакет SDK версии 1

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

Пакет SDK версии 2 с 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)
  • Метрики отображаются на вкладке метрик в студии машинного обучения Azure.
  • Текстовые значения не поддерживаются.

Ведения журнала строки метрик

Пакет SDK версии 1

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

Пакет SDK версии 2 с MLflow

metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
  • Метрики не отображаются в виде таблицы в студии машинного обучения Azure.
  • Текстовые значения не поддерживаются.
  • Регистрируется как артефакт, а не как метрика.

Ведение журнала таблицы

Пакет SDK версии 1

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

Пакет SDK версии 2 с 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")
  • Регистрирует метрики для каждого столбца.
  • Метрики не отображаются в виде таблицы в студии машинного обучения Azure.
  • Текстовые значения не поддерживаются.
  • Регистрируется как артефакт, а не как метрика.

Ведение журнала таблицы поправок

Пакет SDK версии 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)

Пакет SDK версии 2 с 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')
  • Метрики не отображаются в виде таблицы поправок в студии машинного обучения Azure.
  • Регистрируется как артефакт, а не как метрика.
  • Этот mlflow.log_dict метод экспериментальный.

Ведение журнала матрицы неточностей

Пакет SDK версии 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))

Пакет SDK версии 2 с 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')
  • Метрики не отображаются в виде матрицы неточностей в студии машинного обучения Azure.
  • Регистрируется как артефакт, а не как метрика.
  • Этот mlflow.log_dict метод экспериментальный.

Ведение журнала прогнозирования

Пакет SDK версии 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))

Пакет SDK версии 2 с 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')
  • Метрики не отображаются в виде матрицы неточностей в студии машинного обучения Azure.
  • Регистрируется как артефакт, а не как метрика.
  • Этот mlflow.log_dict метод экспериментальный.

Ведения журнала остатков

Пакет SDK версии 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))

Пакет SDK версии 2 с 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')
  • Метрики не отображаются в виде матрицы неточностей в студии машинного обучения Azure.
  • Регистрируется как артефакт, а не как метрика.
  • Этот mlflow.log_dict метод экспериментальный.

Просмотр сведений о выполнении и данных

Доступ к сведениям о выполнении можно получить с помощью свойств data и info объекта MLflow run (mlflow.entities.Run).

Совет

Эксперименты и запуски данных отслеживания в Машинное обучение Azure можно запрашивать с помощью MLflow, который предоставляет комплексный API поиска для запроса и поиска экспериментов и выполнения экспериментов и быстрого сравнения результатов. Дополнительные сведения обо всех возможностях MLflow в этом измерении см. в статье "Запрос и сравнение экспериментов и запусков с помощью MLflow"

В следующем примере показано, как получить законченный проход:

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

В следующем примере показано, как просмотреть metrics, tags, и params:

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

Примечание.

metrics будет иметь только самое последнее зарегистрированное значение для данной метрики. Например, если вы войдете в систему по порядку значения1, а затем 23 и 4 в метрику с именемsample_metric, будет присутствовать только 4 в словареmetrics. Чтобы получить все метрики, зарегистрированные для определенной именованной метрики, используйте 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"))

Дополнительные сведения см. в справочнике MlFlowClient.

Поле info содержит общие сведения о выполнении, такие как время начала, идентификатор выполнения, идентификатор эксперимента и т.д.:

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

Ведение журнала артефактов запуска

Для просмотра артефактов запуска, можно использовать MlFlowClient.list_artifacts:

client.list_artifacts(finished_mlflow_run.info.run_id)

Чтобы скачать артефакт, используйте mlflow.artifacts.download_artifacts:

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

Следующие шаги