Конфигурация всех компонентов для запуска обучения и инференса:
Данные, используемые для обучения и тестирования
Логи экспериментов для каждого запуска:
Ноутбуки для демонстрации отдельных компонентов:
Код для отдельных компонентов пайплайна обучения:
Скрипты для запуска обучения и инференса
Настройки python проекта:
Описание проекта:
seed: 42 trainer: _target_: lightning.Trainer accelerator: cpu max_epochs: 10
import hydra from omegaconf import DictConfig @hydra.main(config_path="config") def train(cfg: DictConfig): trainer = hydra.utils.instantiate(cfg.trainer) trainer.fit(...)
python train.py trainer.max_epochs=20
Объекты создаются из конфига через _target_
Сборка единого конфигурационного файла из частей
defaults: - model: gru seed: 42 trainer: _target_: lightning.Trainer max_epochs: 10
_target_: torch.nn.GRU input_size: 8 hidden_size: 64
_target_: torch.nn.LSTM input_size: 8 hidden_size: 64
# использовать lstm вместо gru $ python train.py model=lstm
# запустить обучение для обеих моделей последовательно $ python train.py --multirun model=gru,lstm # можно комбинировать несколько осей поиска $ python train.py --multirun model=gru,lstm seed=42,123
logs/ для каждого запуска
hparams.yaml
--multirun
import mlflow mlflow.pytorch.autolog() # Вот и всё! 🎉 # Существующий код работает без изменений for epoch in range(num_epochs): model.train() # ... цикл обучения остаётся прежним
Хранение в файловой системе, удобно для экспериментов
Удалённый сервер трекинга с базой данных
# Initialize and track data $ dvc init $ dvc add data/train.csv # Setup remote storage $ dvc remote add -d storage s3://bucket/store # Sync data $ dvc push # Upload to remote $ dvc pull # Download from remote
Основано на Google Deep Learning Tuning Playbook — практическом руководстве по систематической оптимизации нейронных сетей.
Разумная начальная конфигурация: архитектура, оптимизатор, размер батча. Фиксируются до начала улучшений.
Научный подход к настройке гиперпараметров и анализу экспериментов
Воспроизведите её как отправную точку, затем переключайтесь на собственные варианты. Если такой базы не существует — используйте популярную архитектуру.
optimizer: _target_: torch.optim.SGD lr: 0.1 momentum: 0.9 weight_decay: 1e-4
✓ Меньше гиперпараметров
optimizer: _target_: torch.optim.Adam lr: 3e-4 betas: [0.9, 0.999] eps: 1e-8
⚠ Больше гиперпараметров — настраивать позже
Больший батч → меньше шагов → быстрее обучение
Смена батча требует перенастройки большинства гиперпараметров
Фиксировать на весь раунд экспериментов
Нюанс: малые батчи устойчивее к выбору гиперпараметров
Marek et al. (2025) показали, что batch size 1 допускает гораздо более широкий диапазон learning rate и β₁, чем batch size 512.
Параметры, чей эффект вы изучаете — то, что вы пытаетесь понять.
Нужно оптимизировать для честного сравнения исследуемых параметров.
Не меняются в текущем раунде. Любые выводы справедливы только при зафиксированных значениях — это оговорка к результатам.
Достаточно исследуемых значений
Шире охват — больше выводов из экспериментов
Достаточно широкое пространство для мешающих
Где-то в пространстве должны существовать хорошие значения
Достаточно плотная выборка
Высокая вероятность найти хорошие настройки, если они есть
Чётко сформулировать задачу. Проверять одно изменение за раз.
Разделить гиперпараметры на исследуемые, мешающие и фиксированные
Проверить пространство поиска, изучить кривые обучения, валидировать результаты
Принимать изменения на основе убедительных свидетельств, а не удачных запусков
Больше времени на исследование, меньше — на немедленную оптимизацию метрики.
Совет: автоматизируйте построение графиков для всех запусков — чем сложнее их получить, тем реже вы будете на них смотреть. Каждый новый график — новое знание.
Главное: не сводите эксперимент к одному числу — смотрите на всю кривую целиком.
Слишком высокий learning rate → gradient clipping (1.0)
Learning rate слишком низкий, неправильная функция потерь или проблема с данными
Проверить загрузку данных, метки, архитектуру модели, градиенты
Переобучите модель на одном батче — если не получается, проблема в коде, а не в гиперпараметрах. Затем масштабируйте. Большинство проблем — в пайплайне данных или learning rate.
Правильная организация, управление конфигурацией, версионирование
Автоматическое построение графиков, воспроизводимое окружение
Логируйте всё: метрики, конфиги, артефакты — с первого дня
Задокументированные бейзлайны, устоявшиеся архитектуры, сложность — постепенно
Одно изменение за раз
Больше исследования, меньше погони за немедленным результатом