C.W.K.
Stream
Lesson 06 of 08 · published

LoRA: Low-Rank Adaptation

~28 min · training, peft, lora

Level 0스카우트
0 XP0/50 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

LoRA 가 하는 일

거대한 모든 가중치 행렬 W 업데이트 대신, LoRA 가 low-rank delta ΔW = B A 학습 — B 는 d×r, A 는 r×k, 작은 r (보통 8-64). 원본 W frozen; B 와 A 만 학습. 학습 가능 파라미터 100-1000x 감소. 인퍼런스: W' = W + B A, 런타임 적용 또는 W 에 merge.

LoRA 가 이기는 이유

  • 학습 가능 params: 풀 fine-tune 의 0.1-1%.
  • VRAM: 7B LoRA 학습이 단일 24GB GPU fit; 풀 fine-tune 은 8x A100 필요.
  • Composability: 인퍼런스에 LoRA adapter swap 가능 (요청별 다른 스타일) — base 모델 재로드 X.
  • Storage: 7B 모델의 LoRA adapter ~50MB. 풀 fine-tune 은 14GB.

하이퍼파라미터

  • r (rank) — capacity. 매우 작은 adaptation 8, 디폴트 16, 어려운 task 32-64.
  • lora_alpha — scaling factor. Effective LR scaling = alpha / r. 흔함: alpha = 2*r.
  • target_modules — 어떤 레이어 adapt. attention 엔 q_proj, k_proj, v_proj, o_proj; MLP 엔 gate_proj, up_proj, down_proj. "all-linear" 가 모델의 모든 Linear 타겟.
  • lora_dropout — 보통 0.05-0.1.

Code

PEFT 로 LoRA fine-tuning·python
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments
import torch

base = "Qwen/Qwen2.5-1.5B-Instruct"
tok = AutoTokenizer.from_pretrained(base)
model = AutoModelForCausalLM.from_pretrained(base, torch_dtype=torch.bfloat16)

lora_cfg = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules="all-linear",
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM",
)

model = get_peft_model(model, lora_cfg)
model.print_trainable_parameters()
# trainable params: ~5M / 1.5B  (~0.3%)

# 보통대로 Trainer 학습 — 0번 레슨 참조
Adapter 만 저장, serving 위해 merge·python
# 학습 후:
model.save_pretrained("./qwen-lora-adapter")

# Base 위 adapter 인퍼런스
from peft import AutoPeftModelForCausalLM
inf = AutoPeftModelForCausalLM.from_pretrained("./qwen-lora-adapter")

# 프로덕션 serving 위해 base 가중치에 adapter merge (PEFT 런타임 비용 X):
merged = inf.merge_and_unload()
merged.save_pretrained("./qwen-merged")

External links

Exercise

1B-3B instruct 모델을 작은 instruction 데이터셋 (~500-2000 example) 에 LoRA fine-tune. 비교: 학습 가능 param, peak GPU 메모리, 최종 eval loss vs 너 baseline. Adapter 저장, merge 후 unmerged adapter 인퍼런스와 generation quality 매치 검증.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.