lora дообучение

LoRA (Low-Rank Adaptation) — это метод parameter-efficient fine-tuning (PEFT), позволяющий дообучать большие языковые модели с минимальными вычислительными затратами. LoRA дообучение основано на идее, что изменения весов модели во время адаптации имеют низкий внутренний ранг — то есть их можно представить как произведение двух небольших матриц вместо обновления всей матрицы весов.

Математическая идея LoRA

В обычном full fine-tuning каждый слой трансформера обновляет свои весовые матрицы W размерности d×d. При LoRA исходная матрица W замораживается, а вместо неё обучаются две маленькие матрицы A (d×r) и B (r×d), где r — ранг адаптера, обычно от 4 до 64. Итоговое обновление весов: ΔW = BA.

Поскольку r ≪ d, количество обучаемых параметров сокращается драматически. Для модели LLaMA 7B вместо обновления 7 миллиардов параметров обучаются лишь несколько миллионов — снижение на два порядка. При инференсе матрицы A и B сворачиваются с исходными весами: W' = W + BA, что не добавляет задержки.

Преимущества LoRA перед full fine-tuning

  • Низкие требования к памяти GPU — модель 7B можно дообучить на одном GPU с 16 ГБ VRAM
  • Скорость обучения — меньше параметров обновляется на каждом шаге
  • Модульность — адаптеры LoRA хранятся отдельно от базовой модели и легко подключаются/отключаются
  • Отсутствие задержки при инференсе — после слияния весов производительность идентична базовой модели
  • Множественные адаптеры — одна базовая модель может иметь десятки LoRA-адаптеров для разных задач

QLoRA: квантизация + LoRA

QLoRA (Quantized LoRA) — дальнейшее развитие метода, предложенное Тимом Детмерсом в 2023 году. Базовая модель квантизируется до 4-битного представления (NF4 — Normal Float 4), что сокращает потребление памяти ещё в 4 раза, а LoRA-адаптеры обучаются в bfloat16. Это позволяет дообучать модели 70B на одном GPU A100 80 ГБ — ранее такое было немыслимо без кластера.

QLoRA использует несколько дополнительных трюков: double quantization (квантизация констант квантизации) и paged optimizers для управления пиками памяти.

Гиперпараметры LoRA

Основные параметры, которые нужно настроить:

  • r (rank) — ранг матриц; чем выше, тем больше выразительности, но больше памяти. Типичные значения: 8, 16, 32, 64.
  • alpha — коэффициент масштабирования обновлений, обычно равен r или 2r.
  • target_modules — к каким слоям применять LoRA. Стандартно: q_proj, v_proj, k_proj, o_proj в слоях self-attention.
  • dropout — регуляризация адаптеров, обычно 0.05–0.1.

Практический стек для LoRA дообучения

Библиотека Hugging Face PEFT реализует LoRA и QLoRA. Axolotl и LLaMA-Factory предоставляют удобные конфигурационные файлы для запуска. Unsloth оптимизирует вычисления LoRA через кастомные CUDA-ядра, достигая 2–5× ускорения при вдвое меньшем потреблении памяти.

Типичный процесс: загрузить базовую модель с Hub → обернуть в LoraConfig → подготовить датасет в формате instruction-response → запустить SFTTrainer из библиотеки TRL → сохранить адаптер отдельно от базовой модели.

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

LoRA — оптимальный выбор, когда нужно адаптировать большую модель при ограниченных GPU-ресурсах, когда требуется быстрая смена адаптеров для разных задач, или когда нужно поддерживать несколько специализаций одной базовой модели. Для задач, требующих глубокого изменения фундаментальных знаний модели, может потребоваться полноценный fine-tuning или предобучение.

Публикация и обмен LoRA-адаптерами

Одно из преимуществ LoRA — компактность адаптеров. Для модели LLaMA 7B адаптер с r=16 занимает около 50–100 МБ вместо 14 ГБ полной модели. Это делает обмен адаптерами практичным: Hugging Face Hub содержит тысячи публичных LoRA-адаптеров для разных задач и языков. При публикации важно указывать базовую модель, ранг, целевые модули, датасет и условия использования в model card. OpenPEFT и PEFT-совместимые фреймворки гарантируют воспроизводимость: любой может скачать адаптер и применить его к правильной базовой модели без дополнительной настройки.

Частые вопросы

  • Что такое ранг в LoRA и как его выбирать?

    Ранг r определяет размерность адаптерных матриц. Чем выше ранг, тем больше выразительности, но выше потребление памяти. Начинайте с r=16 и экспериментируйте. Для большинства задач r=8..32 достаточно.

  • Можно ли комбинировать несколько LoRA-адаптеров?

    Да, с помощью методов LoRA merging (LoRAHub, TIES-Merging) несколько адаптеров можно объединить в один. Также существует механизм dynamic adapter switching для переключения адаптеров без перезагрузки модели.

  • Сохраняет ли модель после LoRA исходные способности?

    LoRA значительно снижает catastrophic forgetting по сравнению с full fine-tuning, так как базовые веса заморожены. Однако при высоких learning rate и большом количестве эпох деградация исходных способностей всё равно возможна.

Не хватает деталей?

Напишите, что уточнить по теме «lora дообучение» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).

Поделиться