# Fine-tuning и LoRA

> Дообучение готовой модели на своих данных — полное или параметро-эффективное через низкоранговые адаптеры LoRA и QLoRA; когда оно нужно и когда хватает промптов и RAG.

Источник: https://llmdocs.ru/wiki/fine-tuning-lora/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Виды**: полное дообучение, 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 дообучить [большую языковую модель](https://llmdocs.ru/wiki/llm.md) можно на одной видеокарте.[1]

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

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

1. **[Промпт-инжиниринг](https://llmdocs.ru/wiki/prompt-engineering.md)** — инструкции и примеры в промпте.
2. **[RAG](https://llmdocs.ru/wiki/rag.md)** — если модели не хватает знаний (документации, базы фактов). Дообучение плохо «вкладывает» новые факты и не обновляется так легко, как индекс.
3. **Дообучение** — когда нужно устойчиво менять *поведение*: строгий формат ответа, стиль и тон, узкая классификация, специфический жаргон, или когда нужно заменить большую дорогую модель маленькой и быстрой (дистилляция).[7]

## Виды дообучения

- **Полное** — обновляются все веса. Требует памяти под веса, градиенты и состояние оптимизатора — в 3–4 раза больше самой модели; для моделей в десятки миллиардов параметров нужен кластер.
- **Параметро-эффективное** (PEFT) — замораживается основная модель, обучается малая добавка: LoRA, адаптеры, prefix tuning.[4]
- **Инструктивное дообучение** (SFT, supervised fine-tuning) — на парах «запрос → желаемый ответ»; см. [Обучение с учителем и без](https://llmdocs.ru/wiki/supervised-unsupervised.md).
- **Выравнивание по предпочтениям** — модель учится выбирать лучший из двух ответов: 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](https://llmdocs.ru/wiki/vllm.md) обслуживают сотни адаптеров одновременно);
- адаптер можно «влить» в веса, и тогда инференс не замедляется.

**QLoRA** хранит замороженную базовую модель в 4-битном формате NF4 (см. [Квантизация моделей](https://llmdocs.ru/wiki/quantization.md)), а адаптеры обучает в 16 битах; так модель на 65 млрд параметров дообучили на одном GPU с 48 ГБ.[2]

```python
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](https://llmdocs.ru/wiki/hugging-face.md) PEFT и TRL — стандарт; Unsloth ускоряет обучение на одной карте, Axolotl и LLaMA-Factory позволяют описать всё конфигом.[5]

## Данные

Качество данных важнее их количества: несколько сотен — пара тысяч чистых, разнообразных и согласованных примеров часто дают больше, чем десятки тысяч шумных. Примеры должны быть в том же формате чата, что и при использовании, включая системный промпт. Обязательно отложить часть данных для проверки и сравнивать дообученную модель с исходной на своих задачах (см. [Оценка LLM (evals)](https://llmdocs.ru/wiki/llm-evals.md)).

## Риски

- **[Переобучение](https://llmdocs.ru/wiki/overfitting-regularization.md)** — модель заучивает примеры; помогают 1–3 эпохи и малый темп обучения.
- **Катастрофическое забывание** — потеря общих навыков. LoRA забывает меньше полного дообучения, но и усваивает меньше нового.[6]
- **Ослабление защитных механизмов** — даже безобидное дообучение может снизить отказ от вредных запросов.
- **Лицензия** базовой модели определяет, можно ли распространять результат.

## См. также

- [Квантизация моделей](https://llmdocs.ru/wiki/quantization.md)
- [Hugging Face](https://llmdocs.ru/wiki/hugging-face.md)
- [RAG (генерация с дополнением поиском)](https://llmdocs.ru/wiki/rag.md)
- [Промпт-инжиниринг](https://llmdocs.ru/wiki/prompt-engineering.md)
- [Оценка LLM (evals)](https://llmdocs.ru/wiki/llm-evals.md)

## Источники

1. [Hu et al. — LoRA: Low-Rank Adaptation of Large Language Models (2021)](https://arxiv.org/abs/2106.09685)
2. [Dettmers et al. — QLoRA: Efficient Finetuning of Quantized LLMs (2023)](https://arxiv.org/abs/2305.14314)
3. [Rafailov et al. — Direct Preference Optimization (2023)](https://arxiv.org/abs/2305.18290)
4. [Hugging Face — PEFT](https://huggingface.co/docs/peft/index)
5. [Hugging Face — TRL](https://huggingface.co/docs/trl/index)
6. [Biderman et al. — LoRA Learns Less and Forgets Less (2024)](https://arxiv.org/abs/2405.09673)
7. [OpenAI — Fine-tuning best practices](https://platform.openai.com/docs/guides/fine-tuning-best-practices)
