Fine-tuning языковых моделей: когда, зачем и как дообучать LLM
Практическое руководство по fine-tuning LLM: LoRA, QLoRA, полное дообучение. Подготовка данных, выбор метода, оценка результатов.
Промпт-инжиниринг решает 80% задач адаптации языковой модели. RAG добавляет знания. Но иногда нужно изменить само поведение модели — стиль ответов, формат, специализацию. Для этого существует fine-tuning: дообучение предварительно обученной модели на ваших данных.
Когда fine-tuning оправдан
Fine-tuning стоит денег, времени и экспертизы. Перед тем как начинать, убедитесь, что задача не решается проще:
Fine-tuning нужен, если:
- Модель должна следовать специфическому формату ответов, который сложно описать в промпте
- Нужна устойчивая специализация: модель для медицинского кодирования, юридического анализа, технической поддержки на определённом продукте
- Качество промпт-инжиниринга недостаточно при любых формулировках
- Стоимость длинного системного промпта (тысячи токенов при каждом запросе) делает дообучение экономически выгоднее
Fine-tuning не нужен, если:
- Задача решается правильным промптом — попробуйте сначала
- Нужны актуальные данные — используйте RAG
- Нужно научить модель фактам — модель «запоминает» паттерны поведения, а не факты
Методы fine-tuning
Полное дообучение (Full Fine-tuning)
Обновляются все параметры модели. Требует GPU-памяти, сопоставимой с размером модели (в 2–4 раза больше из-за градиентов и оптимизатора). Для модели на 7B параметров — 60–80 ГБ VRAM. Для 70B — 500+ ГБ. Практически доступно только для компаний с серьёзной GPU-инфраструктурой.
LoRA (Low-Rank Adaptation)
LoRA — метод, который изменил экономику fine-tuning. Вместо обновления всех параметров LoRA добавляет маленькие обучаемые матрицы (адаптеры) к каждому слою трансформера. Основные веса модели заморожены, обучаются только адаптеры — обычно 0.1–1% от общего числа параметров.
Результат: fine-tuning модели 7B на одном GPU с 24 ГБ VRAM за 1–4 часа. Качество при правильной настройке — близко к полному дообучению.
Ключевые параметры LoRA:
- rank (r) — размерность адаптера. Типичные значения: 8, 16, 32, 64. Больше rank — больше обучаемых параметров — лучше адаптация — дольше обучение. r=16 — хорошая отправная точка.
- alpha — коэффициент масштабирования. Обычно устанавливается равным rank или в 2 раза больше.
- target modules — к каким слоям применять LoRA. Стандартный набор: q_proj, v_proj (attention layers). Добавление k_proj, o_proj, gate_proj, up_proj, down_proj увеличивает количество обучаемых параметров и часто улучшает качество.
QLoRA
QLoRA комбинирует квантизацию и LoRA: базовая модель загружается в 4-битной квантизации (NF4), а адаптеры обучаются в fp16. Это позволяет дообучить модель 70B на одном GPU с 48 ГБ VRAM — задача, для которой полное дообучение потребовало бы кластер из 8+ GPU.
Потеря качества от квантизации компенсируется адаптерами. По бенчмаркам QLoRA достигает 95–99% качества полного fine-tuning при десятикратном сокращении потребления памяти.
Подготовка данных
Качество fine-tuning определяется качеством данных. Формат зависит от задачи:
Instruction-tuning — обучение следованию инструкциям:
{"messages": [
{"role": "system", "content": "Ты — ассистент техподдержки продукта X."},
{"role": "user", "content": "Как сбросить пароль?"},
{"role": "assistant", "content": "Откройте настройки → Безопасность → Сменить пароль. Введите текущий пароль и новый дважды."}
]}Сколько данных нужно:
- Минимум: 50–100 качественных примеров (для LoRA с чёткой задачей)
- Оптимально: 500–5 000 примеров
- Максимум полезного: 10 000–50 000 (после этого marginal returns)
Правила подготовки данных:
- Каждый пример должен быть эталоном — именно такой ответ вы хотите от модели
- Разнообразие важнее объёма: 500 разнообразных примеров лучше 5 000 однотипных
- Чистота: удалите ошибки, дубликаты, некорректные примеры. Одна ошибка на 100 примеров может испортить поведение модели
- Длина ответов: если хотите короткие ответы — все примеры должны быть короткими. Модель подхватывает паттерн длины
Практика: fine-tuning с Unsloth
Unsloth — библиотека, оптимизирующая обучение LoRA/QLoRA. Ускоряет fine-tuning в 2–5 раз по сравнению со стандартным Hugging Face Trainer.
from unsloth import FastLanguageModel
# Загрузка модели в 4-bit
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/llama-3-8b-bnb-4bit",
max_seq_length=2048,
load_in_4bit=True,
)
# Настройка LoRA
model = FastLanguageModel.get_peft_model(
model,
r=16,
target_modules=["q_proj", "k_proj", "v_proj",
"o_proj", "gate_proj", "up_proj", "down_proj"],
lora_alpha=16,
lora_dropout=0,
use_gradient_checkpointing="unsloth",
)
# Обучение
from trl import SFTTrainer
from transformers import TrainingArguments
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=dataset,
args=TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
warmup_steps=5,
max_steps=100,
learning_rate=2e-4,
output_dir="outputs",
),
)
trainer.train()Оценка результатов
Как понять, что fine-tuning улучшил модель, а не испортил:
Loss на валидации. Разделите данные 90/10. Если loss на валидации растёт, а на обучении падает — переобучение. Остановите раньше.
A/B тестирование. Отправьте одинаковые промпты в базовую и дообученную модель. Оценивайте вслепую — не зная, какой ответ от какой модели. Это единственный надёжный способ оценки качества.
Regression testing. Проверьте, что модель не потеряла общие способности. Задайте вопросы вне области fine-tuning — модель должна отвечать адекватно.
Сервисы fine-tuning
Не обязательно иметь GPU для fine-tuning:
- OpenAI Fine-tuning API — загрузите JSONL, получите дообученную GPT-4o-mini или GPT-3.5-turbo. Просто, но дорого для больших датасетов.
- Together AI — fine-tuning open-source моделей в облаке. Поддерживает Llama, Mistral, Qwen.
- Hugging Face AutoTrain — no-code fine-tuning через веб-интерфейс.
- Google Vertex AI — fine-tuning Gemini и open-source моделей.
Fine-tuning — это инструмент, а не цель
Дообучение — мощный инструмент, но не серебряная пуля. Лучший подход: начать с промпт-инжиниринга, добавить RAG при необходимости, и дообучать только когда первые два подхода исчерпаны. Каждый уровень добавляет сложности и стоимости, но и расширяет возможности.
Когда нужен fine-tuning, а когда достаточно промпт-инженерии
| Подход | Когда использовать | Стоимость | Время |
|---|---|---|---|
| Промпт-инженерия | Всегда начинать с неё | $0 | Часы |
| Few-shot prompting | Нужен конкретный формат/стиль | Доп. токены | Минуты |
| RAG | Нужны актуальные/приватные данные | Векторная БД | Дни |
| Fine-tuning | Нужен особый стиль / специализация | $50–$5000 | Дни–недели |
| Pre-training | Специфический домен (медицина, юрис.) | $100K+ | Месяцы |
Методы fine-tuning: обзор
Full fine-tuning — обновление всех весов модели. Максимальное качество, но требует огромной VRAM (70B модель = 140GB только для хранения весов в fp16) и рискует catastrophic forgetting.
LoRA (Low-Rank Adaptation) — добавляет малые адаптивные матрицы к замороженным весам. ~0.1% обучаемых параметров. Стандарт для большинства задач дообучения.
QLoRA — LoRA + 4-bit квантизация базовой модели. Позволяет обучать 7B модель на RTX 3090 (24GB VRAM) вместо A100.
PEFT (Parameter-Efficient Fine-Tuning) — семейство методов: LoRA, Prefix Tuning, Adapter Layers, Prompt Tuning. Все направлены на минимизацию числа обучаемых параметров.
Managed fine-tuning: OpenAI и Anthropic
| Провайдер | Модели | Стоимость обучения | Стоимость инференса |
|---|---|---|---|
| OpenAI | GPT-4o mini, GPT-3.5 | $25/1M обуч. токенов | 2x базовой цены |
| Anthropic | Claude (enterprise) | Договорная | Договорная |
| Together AI | Llama, Mistral, и др. | $3–$20/1M токенов | от $0.2/1M |
| Replicate | Llama, Mistral, и др. | По времени GPU | По времени GPU |
Типичные задачи, где fine-tuning оправдан
- Корпоративный стиль общения — модель всегда отвечает в формате вашей компании
- Классификация в специфическом домене — медицинские коды, юридические категории
- Извлечение данных из документов — конкретный формат JSON из счетов/договоров
- Снижение стоимости — дообученная маленькая модель заменяет дорогую большую
- Низкая латентность — 7B дообученная vs 70B общая при той же задаче
Главная ошибка при fine-tuning
Приступать к fine-tuning не исчерпав промпт-инженерию. 80% задач решаются хорошим системным промптом + few-shot примерами. Fine-tuning требует затрат на подготовку данных, обучение, оценку и поддержку обновлений модели. Начните с промпта — добавьте fine-tuning только если уперлись в потолок.
Читайте также
- Как обучить LoRA-адаптер для своей задачи
- RAG: как подключить документы к модели
- Что такое LLM и как работают языковые модели
Подробнее: Полный гайд по LLM для разработчиков