PART 9 · 강의 2/3

LoRA와 QLoRA

파라미터 효율적 파인튜닝 (PEFT) 기법

01

PEFT란?

Parameter-Efficient Fine-Tuning

PEFT는 모델의 전체 파라미터를 학습하는 대신 소수의 파라미터만 학습하여 파인튜닝하는 기법입니다. GPU 메모리를 대폭 절감하면서도 Full Fine-tuning에 가까운 성능을 냅니다.

100%
Full Fine-tuning
모든 파라미터
0.1-1%
LoRA
추가 파라미터만
💡 왜 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%)
03

LoRA 핵심 파라미터

Rank와 Target Modules

Rank (r)

4-8
낮은 Rank
메모리 최소, 간단한 적응
간단한 스타일 변경
16-32
중간 Rank
균형 잡힌 선택
대부분의 작업에 적합
64-128
높은 Rank
더 복잡한 학습
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 방지
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% 성능 달성 가능