PART 9 · 강의 2/3
LoRA와 QLoRA
파라미터 효율적 파인튜닝 (PEFT) 기법
01
PEFT란?
Parameter-Efficient Fine-Tuning
PEFT는 모델의 전체 파라미터를 학습하는 대신 소수의 파라미터만 학습하여 파인튜닝하는 기법입니다. GPU 메모리를 대폭 절감하면서도 Full Fine-tuning에 가까운 성능을 냅니다.
💡 왜 PEFT가 필요한가?
- 7B 모델 Full FT: 최소 80GB GPU 메모리 필요
- LoRA 적용 시: 16-24GB로 가능
- 저장 용량도 GB → MB 수준으로 감소
02
LoRA (Low-Rank Adaptation)
저랭크 행렬 분해
LoRA는 가중치 업데이트를 두 개의 작은 행렬의 곱으로 분해합니다. 원본 가중치는 동결(freeze)하고, 작은 행렬만 학습합니다.
LoRA 핵심 아이디어: W' = W + BA
W (원본, 동결)
d x d
+
B (학습)
d x r
x
A (학습)
r x d
=
W' (업데이트된)
d x d
r (rank) = 8, 16, 32 등 작은 값 (보통 d의 1% 미만)
학습 파라미터: 2 x d x r (원본의 ~0.1%)
학습 파라미터: 2 x d x r (원본의 ~0.1%)
03
LoRA 핵심 파라미터
Rank와 Target Modules
Rank (r)
4-8
낮은 Rank
메모리 최소, 간단한 적응
간단한 스타일 변경
간단한 스타일 변경
16-32
중간 Rank
균형 잡힌 선택
대부분의 작업에 적합
대부분의 작업에 적합
64-128
높은 Rank
더 복잡한 학습
Full FT에 가까운 성능
Full FT에 가까운 성능
Target Modules
LoRA를 적용할 레이어를 선택합니다. 일반적으로 Attention 레이어에 적용합니다.
q_proj
k_proj
v_proj
o_proj
gate_proj
up_proj
down_proj
# PEFT LoRA 설정 예시
from peft import LoraConfig
config = LoraConfig(
r=16, # rank
lora_alpha=32, # 스케일링 (보통 r의 2배)
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05, # 과적합 방지
bias="none",
)
04
QLoRA (Quantized LoRA)
양자화 + LoRA
QLoRA는 기본 모델을 4bit로 양자화하고 LoRA 어댑터만 학습합니다. 메모리 사용량을 더욱 줄여 소비자급 GPU에서도 대형 모델 파인튜닝이 가능합니다.
4-bit 양자화
NF4 (NormalFloat4) 형식으로
기본 모델 가중치 압축
기본 모델 가중치 압축
1
Double Quantization
양자화 상수도 양자화하여
추가 메모리 절감
추가 메모리 절감
2
Paged Optimizers
GPU - CPU 메모리 자동 관리로
OOM 방지
OOM 방지
3
# QLoRA 설정 예시 (bitsandbytes)
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b",
quantization_config=bnb_config,
)
05
방법별 비교
Full FT vs LoRA vs QLoRA
Full Fine-tuning
전체 파라미터 학습
학습 파라미터
100%
7B 모델 메모리
~80GB
저장 용량
~14GB
성능
최고
LoRA
저랭크 어댑터
학습 파라미터
0.1-1%
7B 모델 메모리
~24GB
저장 용량
~50MB
성능
Full의 90-95%
QLoRA
양자화 + LoRA
학습 파라미터
0.1-1%
7B 모델 메모리
~6-8GB
저장 용량
~50MB
성능
Full의 85-95%
06
베스트 프랙티스
LoRA 사용 권장 사항
r = 16에서 시작
대부분의 경우 r=16이 좋은 균형점.
필요시 증가 또는 감소.
lora_alpha = 2 x r
스케일링 팩터는 보통 rank의 2배로 설정.
학습률과 함께 조정.
모든 Attention 레이어
q, k, v, o_proj 모두 적용하면
성능 향상. 메모리 여유 시 권장.
어댑터 병합 가능
학습 후 base 모델에 병합하여
추론 시 오버헤드 제거 가능.
SUMMARY
핵심 요약
- LoRA는 저랭크 행렬로 전체 파라미터의 0.1%만 학습
- QLoRA는 4bit 양자화로 추가 메모리 절감 (6-8GB로 7B 모델 학습 가능)
- Rank 선택 — 16-32가 일반적으로 좋은 시작점
- 어댑터만 저장하면 되므로 저장 효율이 뛰어남 (~50MB)
- Full Fine-tuning 대비 90-95% 성능 달성 가능