Fine-tuning — это контролируемое дообучение уже предобученной модели (LLM/мультимодальной) на дополнительных данных и/или под конкретную задачу. Цель — приблизить поведение модели к требованиям продукта: доменный язык, формат вывода, инструменты, политика безопасности, многошаговые инструкции.
Связанные материалы: RAG: хаб, LoRA (Low-Rank Adaptation), Evals (оценка качества), Контекстное окно, Guardrails.
Когда действительно нужен fine-tuning (дообучение LLM)
Дообучение — не «серебряная пуля». Во многих кейсах достаточно промптинга и/или RAG. Быстрые ориентиры:
| Ситуация | Хватит ли промптов/RAG | Нужен ли fine-tuning |
|---|---|---|
| Требуется вставить факты из вашей базы | Да, через RAG | Обычно нет |
| Нужен стабильный стиль/формат (шаблоны ответов) | Иногда хватает промптов | Часто да (SFT) |
| Инструментальные действия (API, калькуляторы, цепочки) | Частично (toolformer/функции) | Да, SFT + preference |
| Другой язык/жаргон домена | Часто RAG + глоссарии | Да (DAPT/TAPT) при сильной специфике |
| Жёсткие политики (безопасность/комплаенс) | Частично через guardrails | Да, alignment-тюнинг |
| Код / пасс@k | Зависит от тестов | Часто да (SFT) |
Коротко: факты — в RAG, поведение — в fine-tuning.
Виды дообучения (карта подходов)
1) DAPT/TAPT (continued pretraining). Продолжение предобучения на доменных/корпоративных текстах без разметки. Цель — «впитать» лексику и статистику языка. Полезно перед SFT, если у вас большой корпус (от миллионов токенов).
2) SFT (Supervised Fine-Tuning). Дообучение на парах «инструкция → желательный ответ». Это база для: стиля, структуры, соответствия формату, использования инструментов (через размеченные примеры).
3) Preference/Alignment-тюнинг. Калибровка «что такое хороший ответ» — через пары «A лучше B». Исторически: RLHF; в последнее время популярны DPO/IPO/ORPO/KTO (обучение по предпочтениям без сложного RL). Применяется после SFT.
4) PEFT (Parameter-Efficient Fine-Tuning). Дообучение не всей модели, а малых адаптеров: LoRA/QLoRA/IA³/Adapters. Это резко снижает VRAM/стоимость, упрощает версионирование и даёт модульность (одна база — много адаптеров по задачам). См. LoRA.
5) Мультимодальный FT. Если продукт требует изображений/аудио/таблиц, дообучают соответствующие «головы» и коннекторы; методология похожа: SFT + предпочтения + PEFT.
Как спланировать проект дообучения
Шаг 1. Скоп приоритета. Определите 2–3 конкретных юзкейса (не всё сразу): «ответы по базе знаний», «формальные письма», «инструментальные расчёты».
Шаг 2. Golden-набор и метрики. Соберите golden-сет из реальных запросов/ответов (обезличенных) и решите, чем мерить успех: EM/F1, pass@k, pairwise-win-rate, faithfulness при RAG (см. evals).
Шаг 3. Выбор модели и бюджета. 7B/13B подойдут для большинства ru/en-ассистентов; 34B/70B — если важны сложные рассуждения. При ограниченном железе — QLoRA.
Шаг 4. Данные. Размеченные пары для SFT (минимум 10–20k), корпус для DAPT (по возможности), и пары предпочтений для alignment.
Шаг 5. Безопасность/политики. Определите «красные зоны» (PII, юриспруденция, медицина, джейлбрейки). Политики реализуются и данными, и guardrails.
Шаг 6. План деплоя. Где и как жить адаптерам: онлайн-подмешивание ΔW, merge-in-place, версияция, rollback, A/B-эксперименты.
Подготовка данных: качество важнее объёма
Источники. Логи чатов, базовые документы, мануалы, код-репозитории, корпоративные шаблоны, публичные доменные тексты (с лицензиями).
Очистка и нормализация.
- удаление дубликатов и «копипастных ковров»;
- вынос PII/секретов (маскирование, синтетические значения);
- нормализация формата (заголовки, списки, таблицы → единая разметка);
- баланс языков (ru/en) и тематик, чтобы не «перекосить» стиль.
Разметка SFT. Шаблонная схема: instruction, input (если нужно), output (канонический ответ) + обязательные критерии (цитировать источник? давать ссылки? формат JSON?). Для инструментов — примеры вызовов с корректной схемой I/O.
Пары предпочтений (alignment). Берите реальные альтернативы («вариант A корректнее B»), не забывая про «ничья/оба плохи». Для DPO/IPO важно 5–30k пар — уже видно улучшение.
Сплиты. train/dev/test без протечки: одинаковые вопросы/документы не должны попадать в train и test одновременно.
Конфигурации обучения (практика)
Бюджеты VRAM (ориентиры).
- 7B + QLoRA (r=8–16) — 1×24–48 ГБ GPU.
- 13B + QLoRA — 2×24–48 ГБ или облако.
- 34B/70B — только кластер/облако; чаще PEFT.
Гиперпараметры SFT (стартовые).
- lr 1e-4…3e-4 для адаптеров; AdamW; cosine/linear decay;
- seq len по задаче; grad-accumulation для крупного batch;
- 1–3 эпохи (смотрите на переобучение и метрики dev);
- lora_dropout 0,05–0,2, rank r=16…32 (для 7B/13B).
Alignment (DPO/IPO).
- lr меньше, чем в SFT (1e-5…5e-5), 1–2 эпохи;
- важно не разрушить навыки SFT — контролируйте метрики и «красные линии» (toxicity, jailbreak-rate).
DAPT/TAPT.
- unlabeled-корпус; небольшой lr; длиннее шаги; мониторьте перплексию на доменных вал-наборах.
RAG + fine-tuning: дружим, не конкурируем
RAG решает извлечение фактов, fine-tuning — поведение и формат. Схема:
- RAG готовит короткий, чистый контекст (без воды/дубликатов);
- SFT обучает «подчиняться» контексту: цитировать источники, различать answerable/unanswerable;
- evals включают faithfulness (ответ только на базе контекста) и citation-precision.
Метрики и evals (что мерить)
- Факты/QA — EM/F1; при RAG — ещё faithfulness и цитаты (см. evals).
- Открытая генерация — LLM-as-a-Judge (pairwise win-rate).
- Код — pass@k на закрытом тест-наборе.
- Длинный контекст — устойчивость к «иголкам» и «lost-in-the-middle» (см. контекстное окно).
- Безопасность — jailbreak-проходимость, токс-скоры, ложные блоки (см. guardrails).
В проде добавляйте онлайн-сигналы: отказ-rate, жалобы, «не нашёл/непонятно», latency/cost.
Безопасность и комплаенс
Данные. Лицензии, права, PII. Маскируйте/анонимизируйте; храните «карты происхождения» примеров.
Политики. Определите «нельзя/можно/с предупреждением». Часть вшивается в SFT и alignment-данные, часть — в guardrails.
Регрессии. После каждой итерации дообучения — PR-evals на маленьком наборе (50–200 задач) + «глубокий слой» еженедельно.
Частые ошибки и как их избежать
- «Залили всё подряд». Плохие/дубликатные данные «учат» модель мусору. Делайте дедуп/нормализацию.
- Смешение задач в один датасет. Разделяйте стилевые/форматные и фактологические примеры.
- Нет тестов на безопасность. Любой прирост «умности» может повышать jailbreak-уязвимость.
- Гигантские промпты в SFT. Учите краткости и структуре — длинные подсказки плохо обобщаются.
- Отсутствие versioning. Храните версии адаптеров и наборов (v1, v2…) и логи гиперпараметров.
- Оценка «на глаз». Введите формальные метрики и слепые pairwise-сравнения.
Практические рецепты (шаблоны)
Рецепт A: «Официозный деловой стиль RU/EN».
- Сбор 15k пар SFT из корпоративных шаблонов и писем (обезличено).
- QLoRA r=16 на 7B, 2 эпохи; затем DPO на 10k пар предпочтений.
- Evals: pairwise-win-rate, длина, формальность, отсутствие PII.
- Деплой: адаптер онлайн, версия v1.0; A/B-тест с контрольной моделью.
Рецепт B: «Ассистент по базе статей с цитатами».
- Индекс для RAG (чистые чанки, citation-friendly).
- SFT на 10k парах «вопрос → ответ с цитатами».
- DPO по критериям faithfulness/полнота.
- Evals: EM/F1 + citation-precision; онлайн: answerable-rate, latency.
Рецепт C: «Кодовый помощник (pass@k)».
- Датасет из внутренних репозиториев + открытых задач с тестами.
- SFT на 50–100k примеров; QLoRA r=32; max-seq для кода выше.
- Evals: pass@1/5/10, время компиляции; защита от утечек ключей/секретов.
Инфраструктура и деплой
Артефакты. Храните: базовую модель (sha/версия), адаптеры (LoRA-веса), конфиги HP, датасеты (id/дата), логи обучения.
Стратегии подключения адаптеров.
- Online merge (runtime). Гибко переключать адаптеры под юзкейс/язык.
- Merge-in-place. Удобно для продов без «онлайн-LoRA», но теряете гибкость.
Версияция и выпуск. Именуйте по принципу base-X.Y + sft-A + dpo-B (пример: 7B-bf16 + sft-v3 + dpo-v2). Все релизы проходят PR-evals и «глубокий слой».
Мониторинг. Latency, cost, доля ретраев инструментов, доля «answerable», доля пустых/слишком длинных ответов, безопасность.
FAQ
Чем fine-tuning отличается от «сильного промпта»?
Промпт — внешняя инструкция наInference; fine-tuning — изменение параметров модели (полностью или через адаптеры). FT делает поведение стабильнее и переносимее между задачами.
Можно ли обойтись без DAPT и сразу делать SFT?
Да, если у вас нет огромного доменного корпуса и задача — формат/стиль/инструменты. DAPT полезен для «языкового погружения» (жаргон, редкие термины).
Что выбрать: RLHF или DPO?
DPO/IPO проще по инфраструктуре и даёт схожий эффект «предпочтений». RLHF остаётся уместным для сложных ограничений и «тонкой» калибровки поведения.
Сколько данных нужно для SFT?
Стартуют от 10–20k качественных пар; 100k+ даёт заметный запас. Для узких задач достаточно и 3–5k, если данные чистые.
Когда использовать LoRA/QLoRA, а когда — полный FT?
Почти всегда начинайте с PEFT (LoRA/QLoRA): дешевле, быстрее, модульнее. Полный FT оправдан для критичных задач на мощной инфраструктуре.
Не «затрёт» ли FT базовые знания модели?
Риск есть при маленьком и «узком» датасете. Помогают: смешивание общих примеров, регуляризация, ранняя остановка, контроль метрик на общих задачах.
Мини-глоссарий
- DAPT/TAPT — продолжение предобучения на доменном/таск-корпусе.
- SFT — супервизорное дообучение на размеченных парах.
- RLHF / DPO / IPO / ORPO / KTO — методы preference-обучения.
- PEFT — параметро-эффективное дообучение (LoRA/QLoRA/IA³/Adapters).
- Faithfulness — соответствие ответа контексту/источнику в RAG.
- pass@k — шанс, что хотя бы один из k образцов кода проходит тесты.
