Training

LoRA

Low-Rank Adaptation — техника fine-tuning, обновляющая только матрицы малого ранга вместо всех весов.

Что такое LoRA

LoRA (Low-Rank Adaptation) — метод параметрически эффективного fine-tuning (PEFT), предложенный Hu et al. (2021). Вместо обновления всех весов модели LoRA добавляет к каждому весовому слою две матрицы малого ранга: A (d×r) и B (r×k), где r << min(d, k). Только эти матрицы обучаются, исходные веса «заморожены».

При инференсе адаптер можно либо держать отдельно (удобно для смены задачи), либо «слить» с основными весами (нет overhead).

Экономия VRAM: 7B-модель с LoRA r=8 обновляет ~4M параметров вместо 7B — это 0.06% от общего числа. Потребность в VRAM снижается с ~80 ГБ (full fine-tuning) до ~16–20 ГБ.

Ключевые гиперпараметры

Параметр Описание Типичное значение
r (rank) Размерность LoRA-матриц 8, 16, 64
alpha Масштабирующий коэффициент (LoRA_scale = alpha/r) 16, 32
target_modules Какие модули адаптировать q_proj, v_proj, k_proj, o_proj
dropout Dropout в LoRA-слоях 0.05

Быстрый старт с PEFT

from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B",
    torch_dtype="bfloat16",
    device_map="auto"
)

lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM",
)

model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: 20,971,520 || all params: 8,051,036,160 || trainable%: 0.26

Слияние адаптера с базой

# После обучения — слить LoRA с базовой моделью
merged_model = model.merge_and_unload()
merged_model.save_pretrained("./merged-llama-3-finetuned")

LoRA vs QLoRA

LoRA — обучает адаптеры поверх полноформатной (BF16) базы. QLoRA — поверх квантизованной (INT4) базы, что ещё больше снижает VRAM.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер