Тонкая настройка LLM с помощью Training Hub
Содержание
ВведениеSFT vs OSFTТребованияФормат данныхЗагрузка ноутбуков и примеры запускаШаг 1 — Установка зависимостейШаг 2 — Загрузка или подготовка данныхШаг 3 — Открытие и настройка ноутбукаШаг 4 — Запуск обученияКлючевые параметрыОбщие параметры (SFT и OSFT)Параметры, специфичные для OSFTОбучение в многозадачной средеВведение
training_hub — это библиотека на Python, предоставляющая единый высокоуровневый API для запуска Supervised Fine-Tuning (SFT) и Orthogonal Subspace Fine-Tuning (OSFT) на больших языковых моделях. Она абстрагирует сложность настройки распределённого обучения, управления памятью и оркестрации бэкенда, позволяя сосредоточиться на параметрах эксперимента.
Основные преимущества:
- Единый API: один вызов функции (
sft(...)илиosft(...)) поддерживает обучение на одной GPU, нескольких GPU и в многозадачной среде без изменения кода. - Автоматическое управление памятью: параметр
max_tokens_per_gpuограничивает использование памяти GPU и автоматически вычисляет размер микробатча и накопление градиентов для поддержания заданногоeffective_batch_size. - OSFT для непрерывного обучения: функция
osftреализует Nayak et al. (2025), arXiv:2504 .07097, которая ограничивает обновления весов ортогональными подпространствами — предотвращая катастрофическое забывание без использования буферов повторного воспроизведения или дополнительных датасетов. - Готовность к промышленному использованию: встроенное сохранение контрольных точек, отслеживание экспериментов и поддержка ядра Liger для повышения пропускной способности.
SFT vs OSFT
Требования
- В вашем кластере должны быть установлены Alauda AI и Alauda AI Workbench.
- Инстанс Workbench (Notebook) с:
- Доступом к установке Python-пакетов из интернета (или настроенным внутренним зеркалом PyPI).
- Подключёнными GPU-ресурсами (минимум одна NVIDIA GPU).
- Достаточным общим хранилищем для контрольных точек модели.
- Модель HuggingFace (локальный путь или имя модели, доступное из инстанса).
- Данные для обучения в формате JSONL (см. раздел Формат данных ниже).
Формат данных
Данные для обучения должны быть в формате JSON Lines (.jsonl), где каждая строка — это диалог:
Поддерживаемые значения role: system, user, assistant, pretraining.
Поведение маскировки:
- SFT (по умолчанию) — в функцию потерь включаются только ответы ассистента. Добавьте
"unmask": trueв пример, чтобы включить весь контент, кроме system (стиль pretraining). - OSFT — контролируется параметром
unmask_messages(по умолчаниюFalse; установите вTrueдля стиля pretraining).
Также поддерживаются предварительно обработанные датасеты с полями input_ids и labels через use_processed_dataset=True.
Загрузка ноутбуков и примеры запуска
Предоставлены два подробных учебных ноутбука. Скачайте их в ваш инстанс Workbench и выполняйте по ячейкам.
Шаг 1 — Установка зависимостей
Откройте терминал в вашем инстансе Workbench и установите training-hub:
Шаг 2 — Загрузка или подготовка данных
Поместите ваш .jsonl файл с данными для обучения в путь, доступный ноутбуку, например /data/train.jsonl.
Шаг 3 — Открытие и настройка ноутбука
Откройте скачанный ноутбук в вашем инстансе Workbench. Основные ячейки для настройки:
Выбор модели (в обоих ноутбуках):
В комплекте есть пресеты моделей Qwen 2.5 7B, Llama 3.1 8B, Phi 4 Mini и универсальные модели 7B/малые.
Укажите необходимые пути (в обоих ноутбуках):
Только для OSFT — настройка коэффициента ортогональности:
Выбор распределённой конфигурации:
Шаг 4 — Запуск обучения
Выполните все ячейки последовательно. Финальная ячейка запускает либо:
Контрольные точки сохраняются в ckpt_output_dir после каждой эпохи (настраивается параметром checkpoint_at_epoch).
Ключевые параметры
Общие параметры (SFT и OSFT)
Параметры, специфичные для OSFT
Обучение в многозадачной среде
Для многозадачных заданий запускайте ноутбук (или эквивалентный скрипт) на каждом узле одновременно с одинаковыми rdzv_id и rdzv_endpoint, меняя только node_rank для каждого узла:
Все узлы должны иметь сетевое соединение с rdzv_endpoint до начала обучения.