
PagedAdamW 특집: GPU 메모리가 부족해도 LLM을 파인튜닝하는 법
650억 파라미터 모델을 48GB GPU 하나로 파인튜닝한다? QLoRA의 세 번째 비밀 무기 — PagedAdamW는 CUDA 통합 메모리로 옵티마이저 상태를 GPU↔CPU 사이에 자동으로 페이징한다. 8비트 옵티마이저부터 QLoRA까지, Tim Dettmers가 열어젖힌 효율적 파인튜닝의 역사를 추적한다.

650억 파라미터 모델을 48GB GPU 하나로 파인튜닝한다? QLoRA의 세 번째 비밀 무기 — PagedAdamW는 CUDA 통합 메모리로 옵티마이저 상태를 GPU↔CPU 사이에 자동으로 페이징한다. 8비트 옵티마이저부터 QLoRA까지, Tim Dettmers가 열어젖힌 효율적 파인튜닝의 역사를 추적한다.

LLaMA-2 7B 모델을 파인튜닝하고 싶다. 모델 가중치는 FP16으로 ~14GB. 48GB GPU면 충분할까?
아니다. AdamW 옵티마이저의 상태(m + v + FP32 마스터 가중치)만 ~84GB를 차지한다. 모델 자체보다 옵티마이저가 6배 더 크다. 여기에 활성화 메모리, 기울기까지 더하면 100GB를 훌쩍 넘긴다.
이것이 LLM 시대의 근본적 문제다: GPU 메모리의 절벽. 모델은 점점 커지는데, GPU 메모리는 이를 따라잡지 못한다.
PagedAdamW는 이 절벽을 우회하는 영리한 해법이다 — 옵티마이저 상태가 GPU에 다 안 들어가면, CUDA 통합 메모리를 이용해 자동으로 CPU RAM에 페이징한다. QLoRA, 8비트 양자화와 결합하면, 48GB GPU 하나로 650억 파라미터 모델을 파인튜닝할 수 있다.

7B 모델을 혼합 정밀도(FP16/BF16)로 학습할 때:
옵티마이저 상태(마스터 가중치 + m + v)가 ~84GB — 전체 메모리의 60% 이상을 차지한다. 이것이 병목이다.
2022년, Dettmers 등은 ICLR에서 "8-bit Optimizers via Block-wise Quantization"을 발표했다 (Spotlight). 핵심 아이디어:
결과: 옵티마이저 상태 메모리 75% 절감, 32비트와 동일한 학습 품질, 오히려 약간 더 빠른 속도.
이어서 "LLM.int8()"을 발표 — 추론 시 가중치를 8비트로 양자화하되, 이상값이 많은 "비정상(emergent)" 차원만 FP16으로 유지하는 혼합 정밀도 분해. 이것이 QLoRA로 가는 디딤돌이 되었다.
QLoRA의 세 가지 기술 혁신:
세 번째 무기가 바로 PagedAdamW다.
PagedAdamW는 NVIDIA의 CUDA 통합 메모리(Unified Memory) 를 활용한다. cudaMallocManaged()로 할당된 메모리는 GPU와 CPU가 같은 가상 주소 공간을 공유한다.
핵심: GPU 메모리가 충분하면 오버헤드가 0이다. 페이징은 메모리가 넘칠 때만 발생한다. 이것이 DeepSpeed ZeRO-Offload(항상 전송)과의 결정적 차이다.
학습의 각 단계에서 옵티마이저 상태가 실제로 필요한 시점은 극히 짧다:
| 단계 | 옵티마이저 상태 필요? |
|---|---|
| 순전파 (Forward) | 불필요 — 가중치만 사용 |
| 역전파 (Backward) | 불필요 — 기울기만 계산 |
| 옵티마이저 스텝 | 필요 — m, v 읽고 업데이트 |
| 다음 스텝 대기 | 불필요 — CPU에 있어도 무방 |
전체 학습 루프에서 옵티마이저 상태가 GPU에 있어야 하는 시간은 극히 일부다. 나머지 시간에는 CPU RAM에 있어도 된다 — 이것이 페이징이 효율적인 이유다.
PagedAdamW8bit가 QLoRA에서 가장 많이 쓰이는 이유: 8비트 양자화로 메모리를 75% 줄이고, 남은 메모리조차 넘칠 때 자동으로 CPU에 페이징한다. 이중 안전망이다.
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="./output",
optim="paged_adamw_8bit", # 핵심 설정
learning_rate=2e-4,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
bf16=True,
)
| 프레임워크 | PagedAdamW 지원 | 비고 |
|---|---|---|
| Hugging Face Transformers | optim="paged_adamw_8bit" | 기본 통합 |
| Hugging Face PEFT | QLoRA 공식 지원 | LoraConfig + BitsAndBytesConfig |
| Hugging Face TRL | RLHF + QLoRA | SFTTrainer, DPOTrainer |
| Axolotl | 네이티브 지원 | YAML 설정 |
| LLaMA-Factory | CLI + Web UI | 100+ 모델 |
| Unsloth | 최적화 QLoRA | 2배 빠른 학습 주장 |
| bitsandbytes 직접 | bnb.optim.PagedAdamW8bit() | 저수준 API |
QLoRA + PagedAdamW8bit의 등장 전후를 비교하면:
| 설정 | QLoRA 이전 | QLoRA 이후 |
|---|---|---|
| 65B 모델 파인튜닝 | 780+ GB (멀티 GPU 필수) | 48 GB (단일 GPU) |
| 7B 모델 파인튜닝 | ~120 GB | ~6-8 GB (소비자 GPU 가능) |
| 필요 장비 | A100 80GB × 여러 대 | RTX 4090 1대 또는 RTX 4060 8GB |
2024~2025년 연구에 따르면, NVIDIA RTX 4060 (8GB)에서도 배치 크기 2, 시퀀스 길이 2048으로 LoRA/QLoRA 파인튜닝이 가능하다.
QLoRA GitHub 저장소가 명시하는 목표: "LLM 연구에 대한 접근을 민주화하려는 노력."
| 특성 | PagedAdamW | ZeRO-Offload |
|---|---|---|
| 전송 방식 | 온디맨드 (필요할 때만) | 매 스텝 항상 전송 |
| 메모리 충분 시 | 오버헤드 0 | 고정 오버헤드 발생 |
| 설계 대상 | 단일 GPU | 멀티 GPU 분산 |
| 구현 복잡도 | 낮음 (bitsandbytes) | 높음 (DeepSpeed 설정) |
GaLore (Zhao et al., ICML 2024)는 LoRA처럼 어댑터를 붙이는 대신, 기울기 자체를 저랭크로 투영하여 옵티마이저 상태 메모리를 줄인다. 전체 파라미터를 학습하면서도 메모리를 ~82.5% 절감한다. RTX 4090 24GB로 7B 사전학습이 가능 — QLoRA가 파인튜닝에 특화된 반면, GaLore는 사전학습에도 적용 가능하다.
PagedAdamW 자체는 화려한 알고리즘이 아니다. CUDA 통합 메모리를 옵티마이저 상태에 적용한 것 — 운영체제의 가상 메모리 페이징을 GPU 세계에 가져온 것에 불과하다.
하지만 이 단순한 기술이 QLoRA의 세 번째 퍼즐 조각이 되어, 세상을 바꿨다.
QLoRA 이전에는 65B 모델을 파인튜닝하려면 수십 대의 A100이 필요했다. 대기업만 가능한 일이었다. QLoRA 이후에는 노트북 GPU 하나로 가능해졌다. 개인 연구자, 학생, 스타트업이 최첨단 LLM을 자기 데이터에 맞출 수 있게 된 것이다.
Tim Dettmers의 연구 철학 — "모든 사람이 AI를 만지작거리고, 배우고, 자기 일에 통합할 수 있게 만든다" — 이 PagedAdamW와 QLoRA를 통해 현실이 되었다.
| 연도 | 기여 | 논문 |
|---|---|---|
| 2022 | 8비트 옵티마이저 (메모리 75%↓) | ICLR 2022 Spotlight |
| 2022 | LLM.int8() (추론 양자화) | NeurIPS 2022 |
| 2023 | QLoRA + PagedAdamW (65B→48GB) | NeurIPS 2023 Oral |
효율성은 단순히 비용 절감이 아니다. 효율성은 접근성이고, 접근성은 민주주의다. PagedAdamW는 GPU 메모리의 벽을 허물어, AI 연구의 문턱을 낮추었다.