개요

**LoRA(Low-Rank Adaptation)**는 대형 언어 모델을 효율적으로 파인튜닝하는 기법. 원본 모델 가중치는 고정하고, 저순위(Low-Rank) 행렬만 학습해 파라미터 수와 메모리를 대폭 절감.

  • 논문: “LoRA: Low-Rank Adaptation of Large Language Models” (2021, Microsoft)
  • 핵심 아이디어: 전체 가중치 업데이트 ΔW를 두 개의 작은 행렬 A·B의 곱으로 근사

작동 원리

기존 파인튜닝:  W' = W + ΔW         (W 전체 업데이트)
LoRA:          W' = W + B × A       (B, A만 학습)

W: d×d 원본 가중치 (고정)
A: d×r 행렬 (학습)
B: r×d 행렬 (학습)
r: rank (하이퍼파라미터, 보통 4~64)

→ r ≪ d 이므로 학습 파라미터 수가 극적으로 감소


장점

항목Full Fine-tuningLoRA
학습 파라미터전체0.1~1%
GPU 메모리많이 필요대폭 절감
학습 속도느림빠름
원본 모델 보존❌ (덮어씀)✅ (고정)
멀티 어댑터불가여러 LoRA 교체 가능

주요 변형

기법설명
QLoRALoRA + 4bit 양자화, 소비자용 GPU에서 70B 모델 파인튜닝 가능
LoRA+Learning rate 분리 적용으로 성능 향상
DoRA크기·방향 분리 학습
AdaLoRArank를 레이어별로 적응적으로 배분
LongLoRA긴 컨텍스트 파인튜닝 특화

실전 사용 (PEFT 라이브러리)

from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
 
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")
 
lora_config = LoraConfig(
    r=16,                    # rank
    lora_alpha=32,           # 스케일링 계수
    target_modules=["q_proj", "v_proj"],  # 적용할 레이어
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)
 
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: 4,194,304 || all params: 8,034,000,000 || trainable%: 0.05

관련 항목