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

Что такое Parameter-Efficient Fine-Tuning (PEFT) и какие методы вы знаете?

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

Parameter-Efficient Fine-Tuning (PEFT) — это подход, при котором мы обучаем лишь малую часть параметров модели (обычно 1–5%), а остальные замораживаем. Это позволяет адаптировать гигантские языковые модели (LLM) под конкретные задачи с минимальными вычислительными затратами и объёмом памяти. Наиболее популярный и универсальный метод — LoRA, который в 99% случаев практики выбирают как базовое решение. Другие методы, такие как Prefix-tuning, P-tuning v2, Adapters и IA3, применяются в специфических сценариях, например, при мультизадачности или ограничениях на задержку инференса.


1. Мотивация PEFT: почему не full fine-tuning?

Full fine-tuning (дообучение всех параметров модели) требует колоссальных ресурсов:

  • Память GPU – нужно хранить градиенты, оптимизатор (Adam) и состояния для каждой из миллиардов переменных.
  • Время – каждая эпоха прогоняет весь объём параметров через обратное распространение.
  • Хранение копий – для каждой задачи приходится держать отдельную копию модели (десятки гигабайт).

PEFT решает эти проблемы, вводя дополнительные обучаемые модули или выбирая подмножество весов для обновления. Основные термины:

  • Заморозка (freeze) – фиксация весов модели, они не участвуют в обратном распространении.
  • Обучаемые параметры – обычно добавляются как адаптеры, префиксы или low-rank матрицы.
  • Адаптация – процесс настройки модели под новую задачу без потери знаний на исходном корпусе.

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

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

ГруппаПримерыИдея
АдаптерыAdapterFusion, AdapterDrop, IA3Вставка небольших модулей между слоями
ПрефиксныеPrefix-tuning, P-tuning v2Обучение виртуальных токенов, добавляемых ко входу или к слоям
Low-rankLoRA, QLoRA, DoRAРазложение матриц весов на произведение двух низкоранговых матриц

Ниже разберём каждую группу подробно.


3. LoRA (Low-Rank Adaptation) – самый популярный метод

Идея

LoRA (Hu et al., 2021) исходит из гипотезы, что изменение весов после fine-tuning имеет низкий ранг. Вместо обновления всей матрицы весов W (размерности d×k) LoRA аппроксимирует её изменение как произведение двух матриц:

ΔW = A B,   где A ∈ R^{d×r}, B ∈ R^{r×k}, r << min(d,k)

Обучаются только матрицы A и B (размерность r – ранг, обычно 4–64). Исходные веса W заморожены.

Математика

После адаптации выход линейного слоя вычисляется как:

h = W x + ΔW x = W x + A B x

Параметров для обучения: r * (d + k) вместо d * k. Например, для LLAMA-7B с d=4096, k=4096, r=8: 8*(4096+4096)=65536 параметров вместо 16,7 млн – экономия в 256 раз.

Выбор ранга

  • r=8 – хорошее начало для большинства задач.
  • r=64 – если нужно больше ёмкости (больше данных, сложная задача).
  • Слишком маленький r → underfitting, слишком большой → переобучение и лишняя память.

QLoRAQuantized LoRA

QLoRA (Dettmers et al., 2023) комбинирует LoRA с 4-битной квантизацией замороженных весов:

  • Используется NF4 (NormalFloat4) – информационно-оптимальный формат для нормальных распределений.
  • Double quantization – квантизация констант шкалирования.
  • Paged optimizers – сброс градиентов на CPU при нехватке VRAM.

Результат: fine-tuning модели 65B на одной 48GB GPU без потери качества.


4. Prefix-tuning

Prefix-tuning (Li & Liang, 2021) предлагает добавлять к скрытым состояниям всех слоёв обучаемые векторы-префиксы. Для каждого слоя transformer создаётся матрица P_l размерностью (l_pref, d), где l_pref – длина префикса (например, 10–100 токенов).

Как это работает

  • При forward pass префикс конкатенируется с обычными скрытыми состояниями.
  • Обучаются только префиксы, основная модель заморожена.
  • Префиксы влияют на вычисление ключей и значений в механизме внимания.

Отличие от prompt tuning: Prefix-tuning вставляет параметры во все слои, а не только в embeddings.

Преимущество: высокая эффективность при малом объёме данных. Недостаток: необходимость определять длину префикса заранее.


5. P-tuning v2

P-tuning v2 (Liu et al., 2022) – эволюция Prefix-tuning, где префиксы генерируются не напрямую, а через небольшую нейросеть (например, LSTM или двухслойный MLP). Это повышает стабильность обучения и качество, особенно на задачах NLU (понимания языка). Часто достигает результатов, сопоставимых с full fine-tuning на моделях среднего размера (до 1B параметров).


6. Adapters

Adapter (Houlsby et al., 2019) – это небольшой модуль с bottleneck структурой, вставляемый после каждого transformer-блока (после feed-forward или после multi-head attention). Типичный adapter состоит из:

  • down-projection (d → d_bottleneck),
  • нелинейность (ReLU/GELU),
  • up-projection (d_bottleneck → d).

AdapterFusion – расширение для мультизадачности: несколько адаптеров, обученных на разных задачах, комбинируются через механизм внимания. AdapterDrop – метод для ускорения инференса путём отбрасывания части адаптеров.

Преимущество – лёгкое добавление новых задач без повторной заморозки.


7. IA3 (Infused Adapter by Inhibiting and Amplifying Inner Activations)

IA3 (Liu et al., 2022) – один из самых лёгких методов. Обучаются три скалярных вектора (l_k, l_v, l_ff) для каждого слоя, которые поточечно умножаются на:

  • ключи и значения в механизме внимания,
  • выходы внутренней FFN.

Количество обучаемых параметров крайне мало (например, для T5-base ~0.01% от полных весов). При этом качество сравнимо с LoRA на задачах summarization и вопросно-ответных системах.


8. Сравнительная таблица методов

Метод% обуч. параметровПроизводительностьСложность внедренияПопулярность
LoRA0.1–2%отличнаянизкая (huggingface peft)⭐⭐⭐⭐⭐
QLoRA0.1–2%отличная (с квантизацией)низкая⭐⭐⭐⭐⭐
Prefix-tuning0.1–1%хорошаясредняя⭐⭐⭐
P-tuning v20.5–3%очень хорошаясредняя⭐⭐⭐
Adapters2–5%хорошаявысокая (модификация кода)⭐⭐⭐
IA3<0.1%хорошаясредняя⭐⭐

9. Когда какой метод выбирать?

  • LoRA / QLoRA – универсальный выбор для 99% задач: от генерации до классификации. Особенно хорош, когда нужно быстро экспериментировать и деплоить. Используйте peft от Hugging Face.
  • Prefix-tuning / P-tuning v2 – если задача требует особого стиля генерации или вы работаете с очень большим контекстом (префикс может быть длинным).
  • Adapters – при необходимости одновременной поддержки десятков задач на одном сервере (с мультизадачным роутером).
  • IA3 – когда критична задержка инференса (например, real-time приложения), и вы готовы пожертвовать небольшим качеством.

10. Плюсы и минусы PEFT

Плюсы

  • Снижение памяти: можно дообучать 7B модель на одной 24GB GPU.
  • Скорость обучения: в 2–10 раз быстрее full fine-tuning.
  • Лёгкое переключение между задачами: хранить только маленькие адаптеры (megabytes) вместо целых моделей.
  • Защита от катастрофического забывания: замороженные веса сохраняют исходные знания.

Минусы

  • На очень маленьких датасетах (сотни примеров) может уступать full fine-tuning, так как ограничения ранга не дают «выучить» редкие паттерны.
  • Чувствительность к гиперпараметрам (ранг R, альфа‑коэффициент в LoRA).
  • Часть методов (Prefix-tuning) требует ручного подбора длины префикса.

11. Тренды и современные вариации

  • DoRA (Weight-Decomposed Low-Rank Adaptation) – разложение весов на величину и направление, улучшает качество при том же ранге.
  • LoRA-FA (Frozen-A) – заморозка матрицы A, обновление только B, позволяет сохранить ещё больше параметров без деградации.
  • VeRA (Vector-based Random Adaptation) – случайная инициализация A и B, обучение только скалярных гейтов.
  • Federated LoRALoRA в распределённом обучении, обмен адаптерами между клиентами.

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

Задача: Дообучить модель distilgpt2 (82M параметров) на датасете инструкций (datasetsAlpaca или маленький Dolly) с помощью LoRA и сравнить результат с full fine-tuning по метрикам (perplexity, качество ответов) и потреблению памяти.

Инструменты: Python, transformers, peft, datasets, wandb, torch, nvidia-smi (замер VRAM).

Шаги:

  1. Загрузить модель и токенизатор.
  2. Подготовить датасет: форматировать как "<instruction>: ... <response>: ...".
  3. Заморозить все веса модели.
  4. Применить LoraConfig (r=8, lora_alpha=32, lora_dropout=0.05, target_modules=['c_attn', 'c_proj']).
  5. Обучить с помощью Trainer (batch size 4, 1-3 эпохи).
  6. Написать аналогичный скрипт full fine-tuning (разморозить все веса).
  7. Замерить пиковое использование VRAM (с помощью torch.cuda.max_memory_allocated()).
  8. Оценить perplexity на тестовом split и по 5 заданным инструкциям вручную (субъективно).

Ожидаемый результат:

  • LoRA использует ~1.5–2 ГБ VRAM против ~8–10 ГБ при full fine-tuning.
  • Перплексия различается не более чем на 5–10%.
  • Ответы на инструкции – сопоставимого качества.

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

ВопросТема
29Что такое fine-tuning и чем отличается от prompt engineering?
30Как работает LoRA и как выбрать ранг?
32В чём разница между LoRA и AdaLoRA?
34Что такое Prefix Tuning и чем он отличается от Prompt Tuning?
35Как P-tuning v2 решает проблему стабильности обучения?

Навигация