Обучение моделей
18 просмотров
LoRA
Low-Rank Adaptation
LoRA (Low-Rank Adaptation) — метод эффективной дообучения (fine-tuning) больших моделей, который обновляет только малые матрицы-адаптеры (0.1-1% параметров), сохраняя исходные веса замороженными.
Что такое LoRA
LoRA (Low-Rank Adaptation) — метод параметрически-эффективного fine-tuning (PEFT), предложенный Microsoft (2021). Вместо обновления всех весов модели, LoRA добавляет пару малых матриц (A и B) к каждому слою и обучает только их.
Принцип работы
Для весовой матрицы W ∈ R^{d×k}:
W' = W + ΔW = W + B × A
Где:
- W (d×k) — замороженные исходные веса
- A (d×r) — обучаемая матрица (понижение ранга)
- B (r×k) — обучаемая матрица (повышение ранга)
- r << min(d, k) — ранг (обычно 8, 16, 32, 64)
Экономия ресурсов
| Метод | Обучаемые параметры | VRAM (7B) | Качество |
|---|---|---|---|
| Full fine-tune | 100% | ~120 GB | Лучшее |
| LoRA (r=16) | 0.1-0.5% | ~16 GB | ~Full FT |
| QLoRA | 0.1-0.5% | ~6 GB | ~LoRA |
Ключевые гиперпараметры
- rank (r) — ранг адаптера. Больше r = больше ёмкость, но больше VRAM
- alpha — коэффициент масштабирования (обычно alpha = 2×rank)
- target_modules — к каким слоям применять (q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj)
Пример с Hugging Face PEFT
from peft import LoraConfig, get_peft_model
config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
lora_dropout=0.05,
task_type="CAUSAL_LM",
)
model = get_peft_model(base_model, config)
model.print_trainable_parameters()
# trainable params: 13M || all params: 7B || trainable%: 0.19%
QLoRA
QLoRA = квантизованная модель (4-bit NF4) + LoRA-адаптеры. Позволяет дообучать 70B модель на одной GPU с 24 GB VRAM.