Fine-tuning и LoRA
| Виды | полное дообучение, PEFT (LoRA, QLoRA, адаптеры), дообучение по предпочтениям |
|---|---|
| LoRA | Hu et al., Microsoft, 2021 |
| QLoRA | Dettmers et al., 2023 |
| Этапы для LLM | SFT → выравнивание по предпочтениям (RLHF, DPO) |
| Инструменты | Hugging Face PEFT и TRL, Unsloth, Axolotl, LLaMA-Factory, torchtune |
Fine-tuning (дообучение, файнтюнинг) — продолжение обучения уже готовой, предобученной модели на небольшом наборе своих данных, чтобы адаптировать её к задаче, стилю или формату ответов. LoRA (Low-Rank Adaptation) — самый популярный способ сделать это дёшево: вместо изменения всех миллиардов весов обучаются небольшие добавочные матрицы, составляющие доли процента от размера модели. Благодаря LoRA и её квантованному варианту QLoRA дообучить большую языковую модель можно на одной видеокарте.[1]
Когда дообучать
Дообучение — не первый инструмент. Сначала пробуют:
- Промпт-инжиниринг — инструкции и примеры в промпте.
- RAG — если модели не хватает знаний (документации, базы фактов). Дообучение плохо «вкладывает» новые факты и не обновляется так легко, как индекс.
- Дообучение — когда нужно устойчиво менять поведение: строгий формат ответа, стиль и тон, узкая классификация, специфический жаргон, или когда нужно заменить большую дорогую модель маленькой и быстрой (дистилляция).[7]
Виды дообучения
- Полное — обновляются все веса. Требует памяти под веса, градиенты и состояние оптимизатора — в 3–4 раза больше самой модели; для моделей в десятки миллиардов параметров нужен кластер.
- Параметро-эффективное (PEFT) — замораживается основная модель, обучается малая добавка: LoRA, адаптеры, prefix tuning.[4]
- Инструктивное дообучение (SFT, supervised fine-tuning) — на парах «запрос → желаемый ответ»; см. Обучение с учителем и без.
- Выравнивание по предпочтениям — модель учится выбирать лучший из двух ответов: RLHF с моделью вознаграждения или более простой DPO, обучающийся прямо на парах «лучше / хуже».[3]
Как работает LoRA
Обновление матрицы весов $W$ размером $d \times k$ представляется произведением двух узких матриц: $W' = W + \frac{\alpha}{r} BA$, где $B$ имеет размер $d \times r$, $A$ — $r \times k$, а ранг $r$ мал (4–64). Исходные веса заморожены, обучаются только $A$ и $B$. Для слоя 4096×4096 это 65 тысяч параметров при $r=8$ вместо 16,7 миллиона.[1]
Преимущества:
- память и время обучения сокращаются в разы, состояние оптимизатора крошечное;
- адаптер весит мегабайты — можно хранить много адаптеров для одной базовой модели и переключать их на лету (инференс-серверы вроде vLLM обслуживают сотни адаптеров одновременно);
- адаптер можно «влить» в веса, и тогда инференс не замедляется.
QLoRA хранит замороженную базовую модель в 4-битном формате NF4 (см. Квантизация моделей), а адаптеры обучает в 16 битах; так модель на 65 млрд параметров дообучили на одном GPU с 48 ГБ.[2]
from peft import LoraConfig
from trl import SFTConfig, SFTTrainer
peft_cfg = LoraConfig(r=16, lora_alpha=32, lora_dropout=0.05,
target_modules="all-linear", task_type="CAUSAL_LM")
trainer = SFTTrainer(
model="Qwen/Qwen3-4B",
train_dataset=dataset, # колонка messages в формате чата
peft_config=peft_cfg,
args=SFTConfig(output_dir="out", num_train_epochs=2, learning_rate=2e-4),
)
trainer.train()
Библиотеки Hugging Face PEFT и TRL — стандарт; Unsloth ускоряет обучение на одной карте, Axolotl и LLaMA-Factory позволяют описать всё конфигом.[5]
Данные
Качество данных важнее их количества: несколько сотен — пара тысяч чистых, разнообразных и согласованных примеров часто дают больше, чем десятки тысяч шумных. Примеры должны быть в том же формате чата, что и при использовании, включая системный промпт. Обязательно отложить часть данных для проверки и сравнивать дообученную модель с исходной на своих задачах (см. Оценка LLM (evals)).
Риски
- Переобучение — модель заучивает примеры; помогают 1–3 эпохи и малый темп обучения.
- Катастрофическое забывание — потеря общих навыков. LoRA забывает меньше полного дообучения, но и усваивает меньше нового.[6]
- Ослабление защитных механизмов — даже безобидное дообучение может снизить отказ от вредных запросов.
- Лицензия базовой модели определяет, можно ли распространять результат.
См. также
- Квантизация моделей
- Hugging Face
- RAG (генерация с дополнением поиском)
- Промпт-инжиниринг
- Оценка LLM (evals)
Источники
- Hu et al. — LoRA: Low-Rank Adaptation of Large Language Models (2021)
- Dettmers et al. — QLoRA: Efficient Finetuning of Quantized LLMs (2023)
- Rafailov et al. — Direct Preference Optimization (2023)
- Hugging Face — PEFT
- Hugging Face — TRL
- Biderman et al. — LoRA Learns Less and Forgets Less (2024)
- OpenAI — Fine-tuning best practices