QLoRA는 큰 AI 모델을 아주 작은 메모리로 학습시킬 수 있게 해주는 기술입니다. LoRA가 "학습할 파라미터를 줄이자"는 아이디어라면, QLoRA는 여기에 "모델 자체를 압축팩에 담자"는 아이디어를 결합한 것입니다.
진공 압축팩 비유를 들면 이해하기 쉽습니다. 두꺼운 이불을 보관할 때 진공 압축팩을 쓰면 부피가 8분의 1로 줄어듭니다. QLoRA도 마찬가지로, 65B 크기의 거대 모델을 4비트로 압축하면 메모리를 약 4배 이상 줄일 수 있습니다. 이 압축된 모델을 기반으로 LoRA 방식으로 학습하면, 소비자용 GPU 하나(예: RTX 3090 24GB)로도 65B 모델을 파인튜닝할 수 있습니다.
QLoRA가 등장하기 전에는 65B 파라미터 모델을 학습하려면 A100 80GB GPU가 8개 이상 필요했습니다. 이는 수억 원짜리 장비를 갖춘 대기업이나 연구소만 가능한 일이었습니다. QLoRA는 이 장벽을 낮춰서 개인 연구자, 스타트업도 대형 모델을 파인튜닝할 수 있게 했습니다.
Hugging Face의 Guanaco 모델이 QLoRA로 학습한 대표 사례로, LLaMA-65B를 단일 GPU로 24시간 안에 파인튜닝하여 ChatGPT와 유사한 성능을 보여 큰 주목을 받았습니다.
📚 선수학습: LoRA 핵심 수학 구조와 양자화(quantization) 기초 개념을 먼저 숙지하세요.
QLoRA는 세 가지 핵심 기술을 결합하여 메모리 효율을 극대화한다:
1. 4비트 NormalFloat (NF4) 양자화
정보 이론적으로 최적인 새로운 데이터 타입이다. 사전학습 가중치가 정규분포 를 따른다는 관찰에서 출발하여, **분위수(quantile)**를 이용해 각 값이 동일한 비율로 분포하도록 양자화 격자를 설계한다:
여기서 은 표준 정규분포의 역 CDF(분위 함수), 이면 16개의 격자점을 생성한다. 기존 4-bit 정수(INT4)보다 정규분포 데이터 표현에 더 정보 효율적이다.
2. 이중 양자화(Double Quantization)
양자화 상수(scaling factor) 자체를 다시 양자화한다. 블록 크기 64의 경우 파라미터당 양자화 상수 메모리가 16비트 기준 비트이지만, 이를 8비트로 재양자화하면 비트로 줄어 파라미터당 약 0.37비트 추가 절약이 가능하다.
3. 페이지드 옵티마이저(Paged Optimizer)
GPU 메모리 부족(OOM) 시 옵티마이저 상태를 CPU RAM으로 페이징한다. NVIDIA의 통합 메모리(Unified Memory) 기능을 활용하여, 메모리 급등 시 자동으로 CPU-GPU 간 데이터를 교환한다.
65B 모델 기준: fp16 전체 학습 ~130GB vs QLoRA ~40GB. LoRA 어댑터는 bf16으로 유지되어 학습 정밀도를 보장한다.
| 설정 | 파라미터 비율 | 성능(MMLU) | 권장 용도 |
|---|---|---|---|
| r=4 | ~0.01% | 기준 대비 -1~2% | 경량 특화 |
| r=16 | ~0.04% | 기준에 근접 | 일반 권장 |
| r=64 | ~0.16% | 기준과 동등 | 복잡한 도메인 |
Dettmers et al. 원논문에서 QLoRA r=64, 모든 linear 레이어 적용 시 전체 파인튜닝과 통계적으로 구분 불가능한 성능을 보였다.