Experiment Tracking
Отслеживание экспериментов фиксирует параметры, версии кода и данных, метрики и артефакты каждого запуска обучения ML-модели, чтобы сравнивать и воспроизводить запуски.
Отслеживание экспериментов — это практика записи в единое хранилище с возможностью поиска всех сведений о каждом запуске машинного обучения, включая версии кода и данных, настройки, среду, метрики с течением времени и выходные файлы, такие как веса и графики. В проекте с десятками вариантов скорости обучения, настроек аугментации и размеров моделей запуски на диске выглядят похоже, а отслеживание связывает каждый результат с его конфигурацией. Благодаря этому лучший запуск можно сравнить, воспроизвести и отследить даже спустя несколько месяцев. TensorBoard, выпущенный вместе с TensorFlow в 2015 году, сделал графики обучения в реальном времени стандартом, а Databricks открыла исходный код MLflow в 2018 году, включив отслеживание в число трёх исходных компонентов. Среди других широко используемых систем отслеживания — Weights & Biases, Comet, ClearML и DVC.
Что записывает система отслеживания#
Каждому запуску присваивается уникальный идентификатор, а сам он относится к эксперименту — именованной группе связанных запусков. Типичная запись о запуске содержит:
- Гиперпараметры: скорость обучения, размер батча, оптимизатор, архитектура модели, начальное случайное значение и все остальные настройки, влияющие на обучение.
- Метрики: потери и оценки на обучающих и проверочных данных, зарегистрированные на каждом шаге или эпохе, а также системные метрики, например использование памяти GPU и загрузка GPU.
- Артефакты: контрольные точки, матрицы ошибок, примеры предсказаний и файлы конфигурации.
- Происхождение: коммит Git, версия набора данных, версии пакетов, оборудование и автор, отвечающие за результат запуска.
Данные регистрируются вызовом клиента для каждого значения либо автоматически с помощью интеграций автологирования, которые без дополнительного кода собирают параметры и метрики фреймворка. Общий сервер отслеживания собирает запуски со всех ноутбуков, облачных машин и заданий CI команды. На его панели отображаются графики функции потерь для выбранных запусков, а запуски можно отфильтровать по любому параметру или метрике. Благодаря этому проблемы, например переобучение, сразу становятся заметными.
При обучении Ultralytics YOLO аргументы каждого запуска записываются в args.yaml, а потери и метрики по эпохам — в results.csv. Встроенные интеграции отправляют те же значения в MLflow, Comet, ClearML или DVC сразу после установки соответствующего пакета. TensorBoard и Weights & Biases включаются через yolo settings. Аргументы обучения project и name становятся названиями эксперимента и запуска в MLflow, поэтому серия экспериментов YOLO26 сразу попадает в систему отслеживания в упорядоченном виде.
Сравнение и воспроизведение запусков#
На дашбордах метрику сопоставляют с параметром в нескольких запусках или строят диаграммы параллельных координат, соединяющие настройки каждого запуска с его оценкой, чтобы показать, какие настройки важны при переборе. В Ultralytics Platform проект сравнивает свои модели с помощью наложенных кривых метрик и потерь и таблицы с результатами рядом; урок «Сравнение запусков и выбор лучшего» превращает сравнение в автоматизированное условие допуска к развёртыванию. Для воспроизведения запуска одних гиперпараметров недостаточно: запись должна включать также коммит кода, точный снимок данных, версии пакетов и случайное начальное значение, поскольку ядра GPU и порядок загрузки данных могут немного менять результаты даже в прочих одинаковых запусках.
Этот скрипт MLflow обучает дерево решений четырёх глубин на рукописных цифрах из scikit-learn, записывает глубину как параметр, а точность на проверочных данных — как метрику, а затем запрашивает эксперимент в виде таблицы:
import mlflow
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# Store runs in a local SQLite file and group them under one experiment
mlflow.set_tracking_uri("sqlite:///mlflow.db")
mlflow.set_experiment("digits-tree-depth")
X_train, X_val, y_train, y_val = train_test_split(*load_digits(return_X_y=True), random_state=0)
# One tracked run per setting: the parameter goes in, the metric comes out
for depth in [2, 4, 8, 16]:
with mlflow.start_run(run_name=f"depth-{depth}"):
model = DecisionTreeClassifier(max_depth=depth, random_state=0).fit(X_train, y_train)
mlflow.log_param("max_depth", depth)
mlflow.log_metric("val_accuracy", model.score(X_val, y_val))
# Query the experiment like a table, best run first
runs = mlflow.search_runs(order_by=["metrics.val_accuracy DESC"])
print(runs[["params.max_depth", "metrics.val_accuracy"]])В новой базе данных таблица выводит сначала глубину 16 с точностью на проверочных данных 0.838, затем глубину 8 с результатом 0.818, глубину 4 с результатом 0.533 и глубину 2 с результатом 0.318. Запуск mlflow ui в той же папке с --backend-store-uri sqlite:///mlflow.db открывает те же запуски в браузере.
Отслеживание экспериментов и смежные практики#
Отслеживание экспериментов — один из этапов эксплуатации машинного обучения (MLOps), наряду с тремя практиками, которые часто с ним путают:
- Реестр моделей: Хранит несколько обученных моделей, подходящих для развёртывания, и связывает каждую их версию с запуском, в котором она была создана и который отслеживался.
- Мониторинг моделей: Отслеживает входные и выходные данные развёрнутой модели, а также её точность в производственной среде — уже после завершения отслеживания на этапе разработки.
- Настройка гиперпараметров: Инструменты поиска, например Optuna и Ray Tune, автоматически запускают множество экспериментов, а система отслеживания сохраняет и ранжирует каждый из них.










