English translation is not available yet. Showing Russian content.
Что такое 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-rank | LoRA, 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, слишком большой → переобучение и лишняя память.
QLoRA – Quantized 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 состоит из:
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. Сравнительная таблица методов
| Метод | % обуч. параметров | Производительность | Сложность внедрения | Популярность |
|---|---|---|---|---|
| LoRA | 0.1–2% | отличная | низкая (huggingface peft) | ⭐⭐⭐⭐⭐ |
| QLoRA | 0.1–2% | отличная (с квантизацией) | низкая | ⭐⭐⭐⭐⭐ |
| Prefix-tuning | 0.1–1% | хорошая | средняя | ⭐⭐⭐ |
| P-tuning v2 | 0.5–3% | очень хорошая | средняя | ⭐⭐⭐ |
| Adapters | 2–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 LoRA – LoRA в распределённом обучении, обмен адаптерами между клиентами.
Пет-проект для закрепления
Задача: Дообучить модель distilgpt2 (82M параметров) на датасете инструкций (datasets – Alpaca или маленький Dolly) с помощью LoRA и сравнить результат с full fine-tuning по метрикам (perplexity, качество ответов) и потреблению памяти.
Инструменты: Python, transformers, peft, datasets, wandb, torch, nvidia-smi (замер VRAM).
Шаги:
- Загрузить модель и токенизатор.
- Подготовить датасет: форматировать как
"<instruction>: ... <response>: ...". - Заморозить все веса модели.
- Применить
LoraConfig(r=8, lora_alpha=32, lora_dropout=0.05, target_modules=['c_attn', 'c_proj']). - Обучить с помощью
Trainer(batch size 4, 1-3 эпохи). - Написать аналогичный скрипт full fine-tuning (разморозить все веса).
- Замерить пиковое использование VRAM (с помощью
torch.cuda.max_memory_allocated()). - Оценить 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 решает проблему стабильности обучения? |
Навигация
- Предыдущий: 30
- Следующий: 32
- Индекс: 00. Индекс разборов