中文翻译暂不可用,显示俄语原文。

Какие методы fine-tuning вы знаете и какой используете чаще всего?

Краткий тезис

Fine-tuning — это дообучение предобученной LLM на специфическом датасете для улучшения её производительности на целевой задаче. Существует несколько подходов: от полного обновления всех весов (full fine-tuning) до параметро-эффективных методов (PEFT), таких как LoRA, QLoRA, Prefix-tuning и Adapter layers. На практике я чаще всего использую LoRA/QLoRA, так как они обеспечивают 95–98% качества full fine-tuning при обучении всего 1–2% параметров и работают на одной GPU.


1. Термин: Fine-tuning (дообучение)

Fine-tuning — это процесс взятия предобученной модели (например, LLaMA, GPT, BERT) и её дальнейшего обучения на небольшом, размеченном датасете, специфичном для задачи. Цель — адаптировать общие знания модели к конкретному домену, стилю или формату ответа.

Зачем нужен fine-tuning

  • Улучшение качества на узкой задаче (например, суммаризация медицинских текстов).
  • Контроль стиля и тона ответов (например, формальный или дружелюбный).
  • Обучение новым форматам (инструкции, диалоги).
  • Повышение factuality (фактологической точности) на корпоративных данных.

Важно Fine-tuning отличается от RAG (Retrieval-Augmented Generation) — RAG добавляет внешние знания на этапе инференса, а fine-tuning встраивает знания в веса модели.


2. Классификация методов fine-tuning

Все методы можно разделить на две большие группы:

КатегорияМетодыСуть
Полный fine-tuningFull fine-tuningОбновляются все параметры модели
Параметро-эффективные (PEFT)LoRA, QLoRA, Prefix-tuning, Adapter layers, IA³Обновляется лишь малая часть параметров (адаптеры, префиксы, промпты)

PEFT (Fine-Tuning|Parameter-Efficient Fine-Tuning) — семейство методов, которые добавляют или модифицируют небольшое количество дополнительных параметров, оставляя исходные веса замороженными.


3. Full fine-tuning (полное дообучение)

Что меняет Все веса модели (миллиарды параметров).

Ресурсы Огромные — требуется несколько GPU (например, 8×A100 для 70B модели) и много памяти (для хранения градиентов, оптимизатора, активаций).

Когда использовать

  • Есть достаточно вычислительных ресурсов (GPU cluster).
  • Датасет очень большой (сотни тысяч примеров) и разнообразный.
  • Требуется максимальное качество (например, для соревнований или фундаментальных моделей).

Недостатки

  • Высокая стоимость (обучение LLaMA 70B может стоить десятки тысяч долларов).
  • Риск catastrophic forgetting (катастрофического забывания) — модель может потерять общие знания.
  • Сложность хранения и развёртывания: для каждой задачи нужна отдельная копия модели.

4. LoRA (Low-Rank Adaptation)

LoRA — самый популярный PEFT-метод. Идея: вместо обновления всей матрицы весов W (размерности d×k) мы обучаем две маленькие матрицы A и B (ранг r), так что W' = W + BA. Ранг r обычно 8–64, что составляет 0.1–2% от исходных параметров.

Что меняет Только адаптеры (матрицы A и B), исходные веса заморожены.

Ресурсы Очень маленькие — одна GPU (например, RTX 4090 24GB) достаточно для 7B модели, для 70B можно использовать QLoRA (4-битная квантизация).

Когда использовать Default choice для 90% задач LoRA даёт 95–98% качества full fine-tuning при доле обучаемых параметров 1–2%.

Пример кода (Hugging Face PEFT):

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, TaskType

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")

lora_config = LoraConfig(
    r=16,               # ранг
    lora_alpha=32,      # масштабирующий коэффициент
    target_modules=["q_proj", "v_proj"],  # модули для адаптации
    lora_dropout=0.05,
    bias="none",
    task_type=TaskType.CAUSAL_LM
)

peft_model = get_peft_model(model, lora_config)
print(f"Обучаемых параметров: {peft_model.num_parameters(only_trainable=True)}")

Преимущества LoRA

  • Быстрое обучение (часы вместо дней).
  • Лёгкое переключение между задачами (храним только адаптеры ~10–100 MB).
  • Можно комбинировать несколько LoRA-адаптеров (слияние или переключение).

5. QLoRA (Quantized LoRA)

QLoRA — расширение LoRA, где исходная модель загружается в 4-битной квантизации (NormalFloat4). Это позволяет дообучать модели размером 70B на одной GPU с 24GB памяти.

Что меняет Те же LoRA-адаптеры, но веса модели квантизованы.

Ресурсы Ещё меньше — одна потребительская GPU.

Когда использовать Когда нет доступа к большим GPU, но нужно дообучить большую модель (например, LLaMA 70B на RTX 4090).

Недостаток Небольшая потеря качества (1–2% относительно LoRA), но часто незаметна.


6. Prefix-tuning (настройка префиксов)

Prefix-tuning — метод, при котором к каждому слою модели добавляется небольшой набор обучаемых векторов (префикс). Эти векторы вставляются в начало последовательности ключей/значений в self-attention.

Что меняет Только префиксные токены (обычно 10–200 токенов на слой).

Ресурсы Маленькие.

Когда использовать Генерация с заданным стилем или контролируемая генерация. Например, сделать модель более формальной или креативной.

Сравнение с LoRA Prefix-tuning менее стабилен и часто уступает LoRA по качеству, поэтому используется реже.


7. Adapter layers (адаптерные слои)

Adapter layers — добавление небольших полносвязных слоёв (bottleneck) между слоями трансформера. Исходные веса заморожены, обучаются только адаптеры.

Что меняет Дополнительные слои (обычно с размером скрытого слоя 64–256).

Ресурсы Маленькие.

Когда использовать Исторически первый PEFT-метод, но сейчас устаревает, так как LoRA проще и эффективнее. Адаптеры добавляют latency на инференсе, а LoRA — нет (после слияния адаптеров).


8. Другие PEFT-методы

МетодСутьОсобенность
IA³ (Infused Adapter by Inhibiting and Amplifying Inner Activations)Обучает векторы масштабирования для ключей, значений и FFNОчень мало параметров, но качество ниже LoRA
Prompt-tuningОбучает только soft prompts (несколько токенов на входе)Не меняет слои, работает только для задач с фиксированным форматом
AdaLoRAАвтоматически выбирает ранг для каждого слояБолее эффективное распределение параметров

9. Какой метод я использую чаще всего и почему

Ответ: LoRA (или QLoRA, если модель большая).

Причины

  1. Качество 95–98% от full fine-tuning на большинстве задач.
  2. Эффективность Обучается за часы на одной GPU.
  3. Гибкость Можно быстро переключаться между задачами, храня только адаптеры.
  4. Простота Единый API (Hugging Face PEFT), легко комбинировать с другими техниками (например, DeepSpeed для ускорения).
  5. Совместимость Работает с любой моделью трансформера.

Когда я отхожу от LoRA

  • Если задача требует максимального качества и есть ресурсы — full fine-tuning.
  • Если нужно очень быстро протестировать гипотезу — Prompt-tuning (ещё быстрее).
  • Если модель очень большая и нет GPUQLoRA.

10. Практические рекомендации по выбору метода

СитуацияРекомендуемый метод
Есть одна GPU 24GB, модель 7BLoRA (r=16, target_modules=["q_proj","v_proj","o_proj"])
Есть одна GPU 24GB, модель 70BQLoRA (4-bit, r=8, target_modules=["q_proj","v_proj"])
Есть кластер GPU, датасет 100k+ примеровFull fine-tuningDeepspeed ZeRO-3)
Нужно быстро прототипироватьPrompt-tuning или IA³
Много разных задач, частая сменаLoRA с отдельными адаптерами

11. Типичные ошибки при fine-tuning

  • Переобучение на маленьком датасете → используйте LoRA с регуляризацией (dropout, weight decay).
  • Игнорирование форматирования данных → fine-tuning чувствителен к шаблону промпта.
  • Слишком высокий ранг LoRA → r=8–32 достаточно для большинства задач.
  • Обучение всех модулей → лучше выбирать только проекции внимания (q, v).
  • Отсутствие валидации → всегда держите hold-out сет.

Пет-проект для закрепления

Задача Дообудить небольшую модель (например, TinyLlama-1.1B) на датасете Alpaca (инструкции) с помощью LoRA, чтобы она научилась следовать инструкциям.

Инструменты

Шаги:

  1. Загрузить модель и токенизатор (TinyLlama/TinyLlama-1.1B-Chat-v1.0).
  2. Загрузить датасет yahma/alpaca-cleaned.
  3. Настроить LoRA (r=8, target_modules=["q_proj","v_proj"]).
  4. Обучить 3 эпохи с learning rate 2e-4.
  5. Сохранить адаптер и протестировать на нескольких промптах.
  6. Сравнить ответы до и после fine-tuning.

Ожидаемый результат Модель начнёт лучше следовать инструкциям, давать более структурированные ответы. Вы увидите, как LoRA меняет поведение при минимальных затратах.


Связь с другими вопросами

ВопросТема
21Что такое fine-tuning и чем отличается от RAG?
23Как выбрать гиперпараметры для fine-tuning?
24Как избежать переобучения при fine-tuning?
25Как оценить качество fine-tuned модели?
30Что такое RLHF и как он связан с fine-tuning?
35Какие бывают стратегии обучения (full, PEFT, distillation)?

Навигация