Перенос журнала из пакета 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
, а затем 2
3
и 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")