Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#953

Как выбрать rank (r) в LoRA? Что будет при слишком маленьком или слишком большом r?

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

Ранг (rank, r) в Low-Rank Adaptation — ключевой гиперпараметр, определяющий количество обучаемых параметров и, соответственно, ёмкость адаптера. Выбор r — это классический компромисс между underfitting (слишком маленький r) и overfitting / избыточной ресурсоёмкостью (слишком большой r). На практике типичный диапазон — r ∈ [4, 64], а оптимальное значение зависит от размера базовой модели, объёма данных и сложности задачи. Эксперименты показывают, что для многих downstream-задач r = 8..16 даёт наилучшее отношение точности к числу параметров.

2. Большой r: больше параметров, риск переобучения

При r > 64 (например, r = 128, 256) количество обучаемых параметров растёт линейно.

  • Увеличение ёмкости — адаптер может «запомнить» шум и специфику тренировочного датасета, особенно если данных мало.
  • Риск overfitting: высокое качество на train, сильное падение на validation / test; может наблюдаться также катастрофическое забывание исходных знаний модели.
  • Память и скорость: больше параметров в адаптере → больше памяти на хранение оптимизатора и градиентов; forward/backward незначительно замедляется, но суммарно растёт потребление VRAM.
  • Практические соображения: при r > 128 часто наблюдается плато качества — дальнейшее увеличение r не даёт прироста метрик, а только расходует ресурсы.

Кроме того, при очень большом r (сравнимом с min(d, k)) LoRA практически вырождается в полное обновление весов, теряя преимущества PEFT — экономия памяти становится минимальной.


3. Типично r = 4..64

Эмпирически установлено, что для большинства LLM (от 1B до 70B) и задач (классификация, QA, summarisation, code generation) оптимальный r лежит в интервале [4, 64].

  • r = 4..8 — экономичный режим, часто достаточен для простых адаптаций (смена стиля ответа, дообучение на однотипных запросах).
  • r = 16..32 — «золотая середина»: хорошее качество на большинстве downstream-задач без избыточного потребления VRAM.
  • r = 64 — верхняя граница, целесообразна для сложных задач с большими размеченными датасетами (например, instruction tuning на 100k+ примеров).

Значение r напрямую связано с alpha — масштабирующим коэффициентом: обычно alpha = 2r или alpha = 1r (без scaling), в зависимости от реализации PEFT. При alpha = 2r обновление ΔW = (alpha / r) * BA, что стабилизирует обучение.


4. Сравнение экспериментов (r = 8 vs r = 32)

Рассмотрим типовые результаты для fine-tuning модели Llama-3-8B на датасете Alpaca (52k инструкций).

Гиперпараметрr = 8r = 32
Обучаемые параметры4.2M (0.05% от 8B)16.8M (0.21%)
VRAM (на batch=4)~28 GB~36 GB
Loss (validation)1.521.49
ROUGE-L (summarisation)0.430.45
Время обучения (1 epoch)45 мин1 ч 20 мин

Вывод: при r = 32 качество незначительно выше (+0.02 ROUGE-L), но стоимость обучения (память, время) почти вдвое больше. Для большинства проектов r = 8 даёт приемлемый trade-off.

При r = 8 и small dataset (10% от Alpaca) наблюдалось:

  • r = 8 → ROUGE-L 0.37 (недобор до 0.43)
  • r = 32 → ROUGE-L 0.36 (overfitting, падение относительно 0.45)

Таким образом, на малых данных увеличение r не только не помогает, но и вредит.


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

Задача: провести sweep-эксперимент на модели GPT-2 (124M) и датасете IMDB (классификация тональности отзывов).

Инструменты:

  • Python 3.10+
  • transformers, peft, datasets, torch
  • Weights & Biases (или простой CSV-логирование)

Шаги:

  1. Загрузить base model (gpt2) с AutoModelForSequenceClassification (num_labels=2).
  2. Применить LoRA к c_attn, c_proj, c_fc для всех QKV.
  3. Перебрать r ∈ [1, 2, 4, 8, 16, 32, 64, 128] (используя, например, config.lora_rank = r из LoraConfig).
  4. Зафиксировать alpha = 2 * r, dropout = 0.1, target_modules = ['q_proj','v_proj'] (типично для GPT-2).
  5. Обучить каждый вариант на 3 эпохи, batch_size=8, learning_rate=5e-4.
  6. Сохранить для каждого r:
    • train loss (per epoch)
    • validation accuracy
    • peak VRAM (через nvidia-smi или torch.cuda.max_memory_allocated)
    • количество обучаемых параметров.

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

  • Для r ≤ 2 — accuracy ниже 80% (underfitting).
  • Для r = 4..16 — accuracy 90-92% (оптимум).
  • Для r ≥ 64 — accuracy ≤ 91% с ростом VRAM; возможен перегруз (если dataset мал — надёжной перепроверить).
  • График «accuracy vs r» покажет плато, начиная с r=8.

Дополнительно можно варьировать alpha и количество целевых модулей, чтобы понять взаимодействие.


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

ВопросТема
952Основы LoRA: низкоранговое разложение
954Влияние масштабирующего коэффициента
955Выбор слоёв для адаптации

Навигация

  • Предыдущий: 952
  • Следующий: 954
  • Индекс: 00. Индекс разборов