요약
QLoRA(Quantized LoRA)는 기본 모델을 4-bit로 양자화하고, 그 위에 LoRA 어댑터를 학습시키는 방식이다. 이를 통해 65B 파라미터 모델도 단일 48GB GPU에서 fine-tuning할 수 있다.
본문
QLoRA의 핵심 기술
-
4-bit NormalFloat (NF4)
- 정규분포를 가정한 양자화 방식
- INT4보다 neural network 가중치에 최적화
-
Double Quantization
- 양자화 상수(quantization constants)도 양자화
- 추가 메모리 절약
-
Paged Optimizers
- GPU 메모리 부족 시 CPU로 오프로딩
- Out-of-memory 방지
메모리 비교 (65B 모델 기준)
| 방법 | 필요 메모리 |
|---|---|
| Full fine-tuning (fp16) | ~780GB |
| LoRA (fp16) | ~130GB |
| QLoRA (4-bit) | ~48GB |
코드 예시
from transformers import BitsAndBytesConfig
from peft import prepare_model_for_kbit_training
# 4-bit 양자화 설정
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
# 모델 로드 및 준비
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config
)
model = prepare_model_for_kbit_training(model)
성능
- Full fine-tuning 대비 97% 수준의 성능 달성 (논문 기준)
- ChatGPT 수준의 Vicuna chatbot을 단일 GPU로 학습 가능