中文翻译暂不可用,显示俄语原文。
Какие методы 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-tuning | Full 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, если модель большая).
Причины
- Качество 95–98% от full fine-tuning на большинстве задач.
- Эффективность Обучается за часы на одной GPU.
- Гибкость Можно быстро переключаться между задачами, храня только адаптеры.
- Простота Единый API (Hugging Face PEFT), легко комбинировать с другими техниками (например, DeepSpeed для ускорения).
- Совместимость Работает с любой моделью трансформера.
Когда я отхожу от LoRA
- Если задача требует максимального качества и есть ресурсы — full fine-tuning.
- Если нужно очень быстро протестировать гипотезу — Prompt-tuning (ещё быстрее).
- Если модель очень большая и нет GPU — QLoRA.
10. Практические рекомендации по выбору метода
| Ситуация | Рекомендуемый метод |
|---|---|
| Есть одна GPU 24GB, модель 7B | LoRA (r=16, target_modules=["q_proj","v_proj","o_proj"]) |
| Есть одна GPU 24GB, модель 70B | QLoRA (4-bit, r=8, target_modules=["q_proj","v_proj"]) |
| Есть кластер GPU, датасет 100k+ примеров | Full fine-tuning (с Deepspeed 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, чтобы она научилась следовать инструкциям.
Инструменты
- Python, PyTorch, Transformers, PEFT, Datasets, Accelerate.
- Google Colab (бесплатный GPU T4).
Шаги:
- Загрузить модель и токенизатор (
TinyLlama/TinyLlama-1.1B-Chat-v1.0). - Загрузить датасет
yahma/alpaca-cleaned. - Настроить LoRA (r=8, target_modules=["q_proj","v_proj"]).
- Обучить 3 эпохи с learning rate 2e-4.
- Сохранить адаптер и протестировать на нескольких промптах.
- Сравнить ответы до и после fine-tuning.
Ожидаемый результат Модель начнёт лучше следовать инструкциям, давать более структурированные ответы. Вы увидите, как LoRA меняет поведение при минимальных затратах.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 21 | Что такое fine-tuning и чем отличается от RAG? |
| 23 | Как выбрать гиперпараметры для fine-tuning? |
| 24 | Как избежать переобучения при fine-tuning? |
| 25 | Как оценить качество fine-tuned модели? |
| 30 | Что такое RLHF и как он связан с fine-tuning? |
| 35 | Какие бывают стратегии обучения (full, PEFT, distillation)? |
Навигация
- Предыдущий: 21
- Следующий: 23
- Индекс: 00. Индекс разборов