Отслеживание экспериментов и наблюдаемость

Это важно

Эта функция доступна в общедоступной предварительной версии.

Отслеживание экспериментов и наблюдаемость встроены в AI Runtime. MLflow — это единое место для параметров, метрик, метрик системы GPU, логов и артефактов запуска. Каждый запуск реализуется в эксперименте MLflow, которым вы можете поделиться с командой, а встроенная панель ресурсов GPU показывает реальное использование GPU, память и температуру во время запуска кода.

Tip

  • MLflow — это унифицированный интерфейс для экспериментов с AI Runtime: метрики, параметры, системные метрики, журналы и артефакты.
  • Рабочие нагрузки, поданные с помощью CLI Databricks, автоматически запускают MLflow. В блокнотах и скриптах вызовите mlflow.start_run() или mlflow.autolog().
  • Встроенная панель ресурсов GPU показывает использование, память и температуру.

Что MLflow предоставляет для глубокого обучения

  • Метрики и параметры: логировать потери обучения, метрики оценки, скорость обучения и гиперпараметры, а также сравнивать их между запусками в интерфейсе MLflow.
  • Системные метрики: использование GPU, CPU и памяти, записываемое вместе с метриками обучения на вкладке Системные метрики запуска.
  • Logs: Вывод драйвера из задания, выполненного на вкладке Logs .
  • Артефакты и модели: храните файлы моделей, конфигурации и другие результаты в рамках запуска. Артефакты могут храниться в томе Unity Catalog.
  • Общий доступ и совместная работа: эксперименты являются объектами рабочего пространства. Дайте товарищем по команде доступ к эксперименту для обмена забегами и сравнения результатов. См. статью «Организация учебных запусков с использованием экспериментов MLflow».
  • Интеграции фреймворков: Hugging Face Transformers, PyTorch Lightning и другие библиотеки напрямую входят в MLflow.

О схемах глубокого обучения в MLflow 3 см. Рабочий процесс глубокого обучения в MLflow 3.

Нужно ли добавлять код MLflow?

Всё зависит от того, как вы подаёте нагрузку:

Как ты бегаешь Запуск MLflow создается автоматически? Что вы добавите
Databricks CLI (databricks air run) Yes. experiment_name в рабочей нагрузке YAML задаёт эксперимент, а системные метрики и логи фиксируются без кода. Optional. Логируйте пользовательские метрики для запуска MLFLOW_RUN_ID. См. Отслеживание запусков с помощью MLflow и страницу запусков заданий.
Бессерверный GPU API (@distributed) Yes. Каждый .distributed() вызов создаёт забег. Optional. Логируйте пользовательские метрики изнутри функции.
Блокнот или скрипт на одном узле No. Автологирование не включено автоматически на бессерверных вычислительных ресурсах. Звоните mlflow.start_run() и ведите метрики, или позвоните mlflow.autolog().

Начало работы

Используйте MLflow 3.7 и выше. Следующие примеры можно скопировать в ячейку ноутбука или в Python-скрипт.

Логарифмические метрики из тренировочного цикла

import mlflow

mlflow.set_experiment("/Users/<username>/my-experiment")

with mlflow.start_run(run_name="baseline-lr3e-4"):
    mlflow.log_params({"learning_rate": 3e-4, "batch_size": 32, "epochs": 3})
    for epoch in range(3):
        train_loss = train_one_epoch(model, train_loader, optimizer)  # your training code
        val_loss = evaluate(model, val_loader)
        mlflow.log_metrics({"train_loss": train_loss, "val_loss": val_loss}, step=epoch)

Используйте автологирование

Для PyTorch Lightning вызовите mlflow.pytorch.autolog() перед обучением. Для других поддерживаемых библиотек обращайтесь к mlflow.autolog().

import mlflow

mlflow.pytorch.autolog()

with mlflow.start_run(run_name="lightning-baseline"):
    trainer.fit(model, datamodule=datamodule)

Лог от Hugging Face Transformers

Задайте report_to="mlflow". Аргумент run_name задаёт имя запуска MLflow.

from transformers import TrainingArguments

args = TrainingArguments(
    output_dir="/Volumes/<catalog>/<schema>/<volume>/checkpoints",
    report_to="mlflow",
    run_name="llama7b-sft-lr3e5",
    logging_steps=50,
)

Лог с нескольких GPU

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

import os

import mlflow

if int(os.environ.get("RANK", "0")) == 0:
    mlflow.log_metric("train_loss", loss, step=step)

Лучшие практики

  • Установите step значимое значение, например, глобальную партию или эпоху, и ведите лог с интервалом (например, каждые 50 шагов) вместо каждой партии. MLflow ограничивает количество шагов метрик для одного запуска. См. Ограничения ресурсов.
  • Используйте абсолютные экспериментальные пути, такие как /Users/<username>/my-experiment или /Workspace/Shared/<team>/my-experiment. Поместите эксперименты, которыми хотите поделиться, в общую папку.
  • Чтобы возобновить предыдущий запуск, передайте его ID: mlflow.start_run(run_id="<previous-run-id>").

Бессерверный GPU API

Когда вы используете Serverless GPU API, каждый вызов .distributed() автоматически создаёт запуск MLflow. Эксперимент по умолчанию — /Users/{WORKSPACE_USER}/{notebook-name}.

  • Если вызвать .distributed() внутри активного запуска MLflow, будет создан вложенный дочерний запуск в рамках этого запуска:

    import mlflow
    
    with mlflow.start_run() as outer_run:
        run_train.distributed()  # creates a nested child run under outer_run
    
  • Чтобы использовать другой эксперимент, вызовите mlflow.set_experiment() перед .distributed(), или установите MLFLOW_EXPERIMENT_NAME переменную среды. Всегда используйте абсолютные пути.

    import os
    
    import mlflow
    
    mlflow.set_experiment("/Users/<username>/my-experiment")
    # or: os.environ["MLFLOW_EXPERIMENT_NAME"] = "/Users/<username>/my-experiment"
    run_train.distributed()
    
  • Чтобы возобновить предыдущий запуск, установите MLFLOW_RUN_ID перед вызовом .distributed():

    os.environ["MLFLOW_RUN_ID"] = "<previous-run-id>"
    run_train.distributed()
    

Просмотр журналов

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

Если вы не можете просмотреть логи

Вкладка «Журналы» на странице запуска MLflow потоково отображает журналы из запуска задания Databricks, связанного с этим запуском MLflow, поэтому доступ к ней определяется разрешениями этого задания. Если вкладка показывает : У вас нет доступа к этим логам, значит, у вас недостаточно разрешений.

Доступ к запуску в MLflow не означает доступ к этому заданию. Вы можете иметь разрешение на доступ к эксперименту MLflow, но при этом не иметь доступа к журналам. Чтобы получить доступ, попросите пользователя с правами Can Manage или администратора рабочего пространства предоставить вам хотя бы Can View на работе. См. раздел Управление доступом к заданию, где описано, как предоставляются разрешения для задания.

Мониторинг ресурсов GPU

Панель ресурсов GPU — это функция удобства для сессий в ноутбуке. Он показывает состояние и использование видеокарты в реальном времени без какой-либо настройки MLflow, поэтому особенно удобно, когда сессия в ноутбуке не создаёт эксперимент MLflow. Для постоянного записи метрик GPU, CPU и памяти, связанных с запуском, используйте вкладку MLflow System метрики. Панель поддерживает как одиночные, так и многоузловые рабочие нагрузки.

Чтобы открыть панель, подключите блокнот к AI Runtime, затем нажмите значок чипаРесурсы GPU на правой боковой панели.

Область ресурсов GPU, показывающая метрики использования, памяти и температуры для каждого GPU.

На панели отображаются следующие метрики для каждого GPU:

  • Процент использования GPU
  • Использование памяти GPU
  • Температура

Панель опрашивает метрики каждые 10 секунд и хранит историю за период до 2 часов. Щелкните значок Обновите, чтобы немедленно получить последние значения. Через 5 минут бездействия панель приостанавливается; повторно откройте его для возобновления мониторинга.

Глобальные ограничения в Azure Databricks

См. Ограничения ресурсов.