본문 바로가기
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를 모두 바꾸는 대신 낮은 rank의 두 행렬 B와 A를 학습해 ΔW = BA를 만들어. 원본 W는 고정하고 작은 행렬만 갱신하므로 학습 파라미터가 전체 미세조정의 0.1~1%로 줄어. 추론에서는 adapter를 따로 적용하거나 W에 합칠 수 있어.

  • 7B 모델도 24GB GPU 한 장에서 학습할 수 있는 경우가 많아.
  • base 모델을 다시 읽지 않고 요청별 adapter를 바꿀 수 있어.
  • adapter는 수십 MB 수준이라 전체 가중치보다 저장과 배포가 가벼워.

rank와 대상 계층이 학습 용량을 정해

r은 보통 8~64에서 고르고 lora_alpha는 변화량의 크기를 조절해. target_modules에는 attention의 q·k·v·o projection이나 MLP의 gate·up·down projection을 지정하며, all-linear로 모든 선형 계층을 고를 수도 있어. 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 런타임 비용 없음):
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

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

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