Ответ
LoRA — это метод параметр-эффективного дообучения (fine-tuning) больших моделей, особенно трансформеров. Вместо обновления всех миллиардов параметров исходной модели, LoRA обучает небольшие низкоранговые матрицы, которые добавляются к весам определенных слоев (обычно attention-механизмов). Эти адаптеры затем можно "включить" для конкретной задачи.
Зачем это нужно:
- Резкое снижение вычислительных затрат и потребления памяти. Можно дообучать большие LLM (например, LLaMA 7B) на одном GPU с 24 ГБ памяти.
- Возможность быстрого переключения задач. Обученные адаптеры для разных доменов (медицина, код, юридические тексты) весят несколько мегабайт и подгружаются поверх замороженной базовой модели.
- Снижение риска катастрофического забывания. Так как основные веса заморожены, модель не забывает свои исходные знания.
Техническая суть: Для весового слоя W (размерности d x k) LoRA представляет его обновление как произведение двух низкоранговых матриц: ΔW = B * A, где B (d x r), A (r x k), и ранг r << min(d, k). В прямом проходе используется h = Wx + ΔWx = Wx + BAx.
Пример дообучения модели для генерации кода с использованием библиотеки PEFT:
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, TaskType
import torch
# Загрузка базовой модели (например, CodeGen)
model_name = "Salesforce/codegen-350M-mono"
tokenizer = AutoTokenizer.from_pretrained(model_name)
base_model = AutoModelForCausalLM.from_pretrained(model_name, load_in_8bit=True, device_map='auto') # Используем 8-битную квантизацию
# Конфигурация LoRA
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=8, # Ранг адаптеров
lora_alpha=32, # Коэффициент масштабирования
lora_dropout=0.1,
target_modules=["q_proj", "v_proj"], # К каким слоям attention добавлять адаптеры
bias="none",
)
# Обертывание модели
model = get_peft_model(base_model, lora_config)
model.print_trainable_parameters() # Выведет: trainable params: 8,388,608 || all params: 350,000,000 || 0.24%
# Далее следует стандартный цикл обучения.
# Будет обновляться менее 1% параметров!
Итог: LoRA — это стандартный де-факто метод для адаптации LLM под конкретные задачи или домены с ограниченными ресурсами, широко используемый в индустрии и research.