Fine-tuning и LoRA

Материал из llmdocs — справочник разработчика
Fine-tuning и LoRA
Видыполное дообучение, PEFT (LoRA, QLoRA, адаптеры), дообучение по предпочтениям
LoRAHu et al., Microsoft, 2021
QLoRADettmers et al., 2023
Этапы для LLMSFT → выравнивание по предпочтениям (RLHF, DPO)
ИнструментыHugging Face PEFT и TRL, Unsloth, Axolotl, LLaMA-Factory, torchtune

Fine-tuning (дообучение, файнтюнинг) — продолжение обучения уже готовой, предобученной модели на небольшом наборе своих данных, чтобы адаптировать её к задаче, стилю или формату ответов. LoRA (Low-Rank Adaptation) — самый популярный способ сделать это дёшево: вместо изменения всех миллиардов весов обучаются небольшие добавочные матрицы, составляющие доли процента от размера модели. Благодаря LoRA и её квантованному варианту QLoRA дообучить большую языковую модель можно на одной видеокарте.[1]

Когда дообучать

Дообучение — не первый инструмент. Сначала пробуют:

  1. Промпт-инжиниринг — инструкции и примеры в промпте.
  2. RAG — если модели не хватает знаний (документации, базы фактов). Дообучение плохо «вкладывает» новые факты и не обновляется так легко, как индекс.
  3. Дообучение — когда нужно устойчиво менять поведение: строгий формат ответа, стиль и тон, узкая классификация, специфический жаргон, или когда нужно заменить большую дорогую модель маленькой и быстрой (дистилляция).[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]
  • Ослабление защитных механизмов — даже безобидное дообучение может снизить отказ от вредных запросов.
  • Лицензия базовой модели определяет, можно ли распространять результат.

См. также

Источники

  1. Hu et al. — LoRA: Low-Rank Adaptation of Large Language Models (2021)
  2. Dettmers et al. — QLoRA: Efficient Finetuning of Quantized LLMs (2023)
  3. Rafailov et al. — Direct Preference Optimization (2023)
  4. Hugging Face — PEFT
  5. Hugging Face — TRL
  6. Biderman et al. — LoRA Learns Less and Forgets Less (2024)
  7. OpenAI — Fine-tuning best practices