Метрики журналов, параметры и файлы с помощью MLflow

ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python azure-ai-ml версии 2 (current)

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

Внимание

В отличие от пакета SDK Машинное обучение Azure версии 1, в пакете SDK Машинное обучение Azure для Python (версия 2) нет функций ведения журнала. Если раньше вы использовали пакет SDK Машинное обучение Azure версии 1, рекомендуется использовать MLflow для отслеживания экспериментов. Дополнительные сведения см. в разделе Миграция ведения журналов из пакета SDK версии 1 в MLflow.

Журналы помогают вам диагностировать ошибки и предупреждения, а также отслеживать метрики производительности, например параметры и эффективность модели. В этой статье объясняется, как включить ведение журнала в следующих сценариях:

  • Метрики журналов, параметры и модели при отправке заданий.
  • Отслеживайте запуски при интерактивном обучении.
  • Просмотр диагностических сведений об обучении.

Совет

В этой статье демонстрируется, как обеспечить мониторинг для процесса обучения модели. Если вы заинтересованы в мониторинге использования ресурсов и событий из Машинное обучение Azure, таких как квоты, завершенные задания обучения или завершенные развертывания моделей, см. статью "Мониторинг Машинное обучение Azure".

Необходимые компоненты

  • У вас должна быть рабочая область Машинного обучения Azure. Если у вас нет ресурсов рабочей области, см. статью "Создание ресурсов рабочей области".

  • Необходимо установить mlflow и azureml-mlflow установить пакеты. Если этого не сделать, используйте следующую команду, чтобы установить их в среде разработки:

    pip install mlflow azureml-mlflow
    
  • Если вы выполняете удаленное отслеживание (отслеживание экспериментов, выполняемых за пределами Машинное обучение Azure), настройте MLflow для отслеживания экспериментов. Дополнительные сведения см. в разделе "Настройка MLflow для Машинное обучение Azure".

  • Чтобы регистрировать метрики, параметры, артефакты и модели в экспериментах в Машинное обучение Azure с помощью MLflow, просто импортируйте MLflow в скрипт:

    import mlflow
    

Настройка экспериментов

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

При интерактивном обучении, например в Jupyter Notebook, используйте следующий шаблон:

  1. Создайте или задайте активный эксперимент.
  2. Запустите задание.
  3. Используйте методы сбора данных для ведения журнала метрик и других сведений.
  4. Завершите задание.

Например, следующий фрагмент кода настраивает эксперимент, а затем регистрируется во время задания:

import mlflow
# Set the experiment
mlflow.set_experiment("mlflow-experiment")

# Start the run
mlflow_run = mlflow.start_run()
# Log metrics or other information
mlflow.log_metric('mymetric', 1)
# End run 
mlflow.end_run()

Совет

Технически вам не нужно start_run() вызывать, так как создается новый запуск, если он не существует, и вы вызываете API ведения журнала. В этом случае можно использовать mlflow.active_run() для получения используемого в данный момент выполнения. Дополнительные сведения см. в разделе mlflow.active_run().

Можно также использовать парадигму диспетчера контекста:

import mlflow
mlflow.set_experiment("mlflow-experiment")

# Start the run, log metrics, end the run
with mlflow.start_run() as run:
    # Run started when context manager is entered, and ended when context manager exits
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)
    pass

При запуске нового запуска mlflow.start_runможет быть полезно указать параметрrun_name, который затем преобразуется в имя запуска в пользовательском интерфейсе Машинное обучение Azure и помогает определить более быстрый запуск:

with mlflow.start_run(run_name="iris-classifier-random-forest") as run:
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)

Дополнительные сведения об API ведения журнала MLflow см. в справочнике по MLflow.

Параметры журнала

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

mlflow.log_param("num_epochs", 20)

MLflow также предоставляет удобный способ ведения журналов для нескольких параметров, указывая их с помощью словаря. Несколько платформ также могут передавать параметры моделям с помощью словарей, поэтому это удобный способ их регистрации в эксперименте.

params = {
    "num_epochs": 20,
    "dropout_rate": .6,
    "objective": "binary_crossentropy"
}

mlflow.log_params(params)

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

Метрики, в отличие от параметров, всегда являются числовыми. В следующей таблице описывается, как регистрировать определенные числовые типы:

Зарегистрированное значение Пример кода Примечания.
Регистрация числового значения (int или float) mlflow.log_metric("my_metric", 1)
Регистрация числового значения (int или float) во времени mlflow.log_metric("my_metric", 1, step=1) Используйте параметр step , чтобы указать шаг, на котором регистрируется значение метрики. Это может быть любое целое число. По умолчанию используется нулевое значение.
Регистрация логического значения mlflow.log_metric("my_metric", 0) 0 = истина, 1 = ложь

Внимание

Рекомендации по производительности. Если необходимо регистрировать несколько метрик (или несколько значений для одной и той же метрики), не выполняйте вызовы mlflow.log_metric в циклах. Повысить производительность можно путем ведения журнала пакета метрик. Используйте метод mlflow.log_metrics, который принимает словарь со всеми метриками, которые вы хотите отправить в журнал одновременно, либо используйте метод MLflowClient.log_batch, который принимает несколько типов элементов для регистрации. Пример см . в кривых журналах или списке значений .

Кривые журнала или список значений

Кривые (или список числовых значений) можно регистрировать с помощью 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

client = MlflowClient()
client.log_batch(mlflow.active_run().info.run_id, 
                 metrics=[Metric(key="sample_list", value=val, timestamp=int(time.time() * 1000), step=0) for val in list_to_log])

Образы журналов

MLflow поддерживает два способа ведения журнала образов. Оба способа сохраняют заданный образ в качестве артефакта внутри запуска.

Зарегистрированное значение Пример кода Примечания.
Регистрация метрик NumPy или объектов образа PIL mlflow.log_image(img, "figure.png") Объект img должен быть экземпляром numpy.ndarray или PIL.Image.Image. figure.png — это имя артефакта, созданного внутри запуска. Он не обязательно должен быть существующим файлом.
Регистрация графика matlotlib или файла изображения mlflow.log_figure(fig, "figure.png") figure.png — это имя артефакта, созданного внутри запуска. Он не обязательно должен быть существующим файлом.

Файлы журналов

Как правило, файлы в MLflow называются артефактами. Артефакты можно регистрить несколькими способами в Mlflow:

Зарегистрированное значение Пример кода Примечания.
Запись текста в текстовый файл mlflow.log_text("text string", "notes.txt") Текст сохраняется внутри запуска в текстовом файле с именем notes.txt.
Словари журналов в виде файлов JSON и YAML mlflow.log_dict(dictionary, "file.yaml" dictionary — это объект словаря, содержащий всю структуру, которую требуется сохранить в формате JSON или YAML-файла.
Запись уже существующего тривиального файла mlflow.log_artifact("path/to/file.pkl") Файлы всегда записываются в корне выполнения. Если указан параметр artifact_path, файл записывается в папку, заданную в этом параметре.
Запись всех артефактов в существующую папку mlflow.log_artifacts("path/to/folder") Структура папок копируется в выполнение, но указанная корневая папка не включена.

Совет

При регистрации больших файлов с log_artifact помощью или log_model, возможно, возникают ошибки времени ожидания перед завершением отправки файла. Рекомендуется увеличить значение времени ожидания, изменив переменную AZUREML_ARTIFACTS_DEFAULT_TIMEOUTсреды. Значение по умолчанию — 300 (в секундах).

Модели журналов

MLflow представляет концепцию моделей в качестве способа упаковки всех артефактов, необходимых для работы данной модели. Модели в MLflow всегда являются папкой с произвольным количеством файлов в зависимости от платформы, используемой для создания модели. Ведение журналов моделей имеет преимущество отслеживания всех элементов модели как единой сущности, которую можно зарегистрировать, а затем развернуть. Кроме того, модели MLflow обладают преимуществами развертывания без кода и могут использоваться с информационной панелью ответственного ИИ в студии. Дополнительные сведения см. в разделе "От артефактов до моделей в MLflow".

Чтобы сохранить модель из обучающего выполнения, используйте log_model() API для платформы, с которой вы работаете. Например, mlflow.sklearn.log_model(). Дополнительные сведения см. в разделе "Ведение журнала моделей MLflow". Сведения о переносе существующих моделей в MLflow см. в разделе "Преобразование пользовательских моделей в MLflow".

Совет

При регистрации больших моделей может возникнуть ошибка Failed to flush the queue within 300 seconds. Как правило, это означает, что операция истекает до завершения отправки артефактов модели. Рекомендуется увеличить значение времени ожидания, изменив переменную AZUREML_ARTIFACTS_DEFAULT_TIMEOUTсреды.

Автоматическое ведение журнала

С помощью Машинное обучение Azure и MLflow пользователи могут автоматически записывать метрики, параметры модели и артефакты модели при обучении модели. Каждая платформа решает, что нужно отслеживать автоматически. Поддерживаются различные популярные библиотеки машинного обучения. Дополнительные сведения об автоматическом ведении журнала с MLflow.

Чтобы включить автоматическое ведение журнала, вставьте следующий код перед учебным кодом:

mlflow.autolog()

Совет

Вы можете контролировать автоматическое ведение журнала с помощью автоматического журнала. Например, если вы указываете mlflow.autolog(log_models=False), MLflow регистрирует все, кроме моделей для вас. Такой контроль полезен в тех случаях, когда вы хотите регистрировать модели вручную, но по-прежнему пользоваться автоматическим журналированием метрик и параметров. Обратите внимание, что некоторые платформы могут отключить автоматическое ведение журнала моделей, если обученная модель выходит за пределы определенных границ. Такое поведение зависит от используемого вкуса, и мы рекомендуем просмотреть документацию, если это ваш вариант.

Просмотр информации о заданиях и запусках с помощью MLflow

Сведения, зарегистрированные в журнале, можно просмотреть, используя MLflow с помощью объекта MLflow.entities.Run:

import mlflow

run = mlflow.get_run(run_id="<RUN_ID>")

Метрики, параметры и теги для выполнения можно просмотреть в поле данных объекта выполнения.

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

Примечание.

Словарь метрик в mlflow.get_run или mlflow.search_runs возвращает только последнее зарегистрированное значение для заданного имени метрики. Например, если вы регистрируете метрику, вызываемую iteration несколько раз со значениями, 1, 2, то 3, то 4, возвращается только 4 при вызове run.data.metrics['iteration'].

Чтобы получить все метрики, зарегистрированные для определенного имени метрики, можно использовать MlFlowClient.get_metric_history(), как описано в примере получения параметров и метрик из запуска.

Совет

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

MLflow может запрашивать любой артефакт, записанный в журнал с помощью запуска. Доступ к артефактам с помощью самого объекта запуска невозможен. Вместо этого следует использовать клиент MLflow:

client = mlflow.tracking.MlflowClient()
client.list_artifacts("<RUN_ID>")

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

file_path = client.download_artifacts("<RUN_ID>", path="feature_importance_weight.png")

Дополнительные сведения см. в разделе "Получение метрик", параметров, артефактов и моделей.

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

В студии Машинного обучения Azure можно просматривать записи о завершенных заданиях, в том числе зарегистрированные метрики.

Перейдите на вкладку "Задания ". Чтобы просмотреть все задания в рабочей области в экспериментах, перейдите на вкладку "Все задания ". Вы можете детализировать задания для конкретных экспериментов, применяя фильтр "Эксперимент " в верхней строке меню. Выберите задание, интересующее вас, чтобы ввести представление сведений, а затем перейдите на вкладку "Метрики ".

Выберите зарегистрированные метрики для отрисовки диаграмм справа. Вы можете настроить диаграммы, применяя сглаживание, изменение цвета или отображение нескольких метрик на одном графе. Вы также сможете изменять размер и расположение макета по своему усмотрению. После создания нужного представления вы можете сохранить его для дальнейшего использования и поделиться им с коллегами с помощью прямой ссылки.

Снимок экрана: представление метрик.

Просмотр и загрузка журналов диагностики

Файлы журналов — это важный ресурс для отладки рабочих нагрузок Машинное обучение Azure. Отправив задание обучения, задайте детализацию до уровня конкретного запуска, чтобы просмотреть его журналы и выходные данные:

  1. Перейдите на вкладку Задания.
  2. Выберите идентификатор конкретного запуска.
  3. Выберите Выходные данные и журналы вверху страницы.
  4. Выберите Скачать все, чтобы скачать все журналы в ZIP-папку.
  5. Можно также скачать отдельные файлы журнала, выбрав нужный файл и нажав кнопку Скачать.

Снимок экрана, иллюстрирующий раздел выходных данных и журналов запуска.

Папка user_logs

Эта папка содержит сведения о журналах, созданных пользователем. По умолчанию эта папка открыта, и выбран журнал std_log.txt. В файле std_log.txt содержатся журналы вашего кода (например, инструкции печати). Этот файл содержит журналы stdout и stderr из скриптов управления и обучения (по одному на процесс). В большинстве случаев вы отслеживаете журналы здесь.

Папка system_logs

Эта папка содержит журналы, созданные Машинное обучение Azure, и по умолчанию она закрыта. Журналы, созданные системой, сгруппированы в разные папки в зависимости от стадии задания во время выполнения.

Другие папки

Для обучения заданий в кластерах с несколькими вычислительными ресурсами журналы представлены для каждого IP-узла. Структура для каждого узла такая же, как и в случае заданий с одним узлом. Предусмотрена еще одна дополнительная папка для журналов регистрации выполнения в целом, а также журналов stderr и stdout.

Во время машинного обучения Azure регистрируются данные из различных источников, например AutoML ML или контейнера Docker, выполняющего задание обучения. Многие такие журналы не документированы. Если возникают проблемы и обратитесь в службу поддержки Майкрософт, они могут использовать эти журналы во время устранения неполадок.

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