Fine-tuning языковых моделей: когда, зачем и как дообучать LLM

Практическое руководство по fine-tuning LLM: LoRA, QLoRA, полное дообучение. Подготовка данных, выбор метода, оценка результатов.

Fine-tuning языковых моделей: когда, зачем и как дообучать LLM

Промпт-инжиниринг решает 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

ПровайдерМоделиСтоимость обученияСтоимость инференса
OpenAIGPT-4o mini, GPT-3.5$25/1M обуч. токенов2x базовой цены
AnthropicClaude (enterprise)ДоговорнаяДоговорная
Together AILlama, Mistral, и др.$3–$20/1M токеновот $0.2/1M
ReplicateLlama, Mistral, и др.По времени GPUПо времени GPU

Типичные задачи, где fine-tuning оправдан

  • Корпоративный стиль общения — модель всегда отвечает в формате вашей компании
  • Классификация в специфическом домене — медицинские коды, юридические категории
  • Извлечение данных из документов — конкретный формат JSON из счетов/договоров
  • Снижение стоимости — дообученная маленькая модель заменяет дорогую большую
  • Низкая латентность — 7B дообученная vs 70B общая при той же задаче

Главная ошибка при fine-tuning

Приступать к fine-tuning не исчерпав промпт-инженерию. 80% задач решаются хорошим системным промптом + few-shot примерами. Fine-tuning требует затрат на подготовку данных, обучение, оценку и поддержку обновлений модели. Начните с промпта — добавьте fine-tuning только если уперлись в потолок.


Читайте также

Подробнее: Полный гайд по LLM для разработчиков