Hugging Face 4비트 양자화 및 QLoRA 출시
TL;DR
Hugging Face는 4비트 양자화(bitsandbytes)와 QLoRA 파인튜닝 기법을 통합하여 대부분의 Transformer 모델을 단일 소비자 등급 GPU에서 최소 메모리 오버헤드로 실행하고 적응시킬 수 있게 했습니다.
4비트 양자화 개요
- 4비트 양자화는 모델 가중치를 4비트로 압축하면서 연산은 더 높은 정밀도(보통 bfloat16 또는 float16)로 유지합니다.
bitsandbytes라이브러리는 두 가지 4비트 포맷을 제공합니다: NF4(Normalized Float‑4, 기본값)와 FP4(원시 4비트 부동소수점). NF4가 더 높은 정확도를 위해 권장됩니다.- 이중 양자화(
bnb_4bit_use_double_quant=True)는 두 번째 양자화 단계를 추가하여 파라미터당 약 0.4비트를 절감합니다. - 양자화된 가중치는 4비트로 저장되지만 행렬 곱셈은 16비트 또는 32비트로 수행되므로 특수 GPU 하드웨어가 필요하지 않으며 CUDA ≥ 11.2만 있으면 됩니다.
QLoRA: 양자화 모델의 효율적인 파인튜닝
- QLoRA는 4비트 양자화된 사전학습 모델을 고정하고 Low‑Rank Adapters(LoRA)를 유일한 학습 가능한 파라미터로 삽입합니다.
- 학습 중에는 그래디언트가 고정된 4비트 모델을 통해 LoRA 레이어로 흐르고, 해당 레이어는 16비트 bfloat16으로 업데이트됩니다.
- 메모리 사용량이 크게 감소하여 65 B 파라미터 모델을 단일 48 GB GPU에서 전체 16비트 성능과 동일하게 파인튜닝할 수 있습니다.
- 논문에서는 메모리 급증을 최소화하기 위해 NormalFloat‑4 (NF4), 이중 양자화, 페이지 기반 옵티마이저를 소개합니다.
- 결과적으로 Guanaco 모델군은 단일 GPU에서 24시간 파인튜닝 후 ChatGPT의 Vicuna 벤치마크 점수의 99.3 %에 도달합니다.
지원되는 모델 및 모달리티
accelerate의device_map인자로 로드할 수 있는 모든 모델은 4비트로 양자화할 수 있습니다.- 지원되는 아키텍처(출시 시점)는 LLaMA, OPT, GPT‑Neo, GPT‑NeoX, BLOOM, CodeGen, 비전 모델(예: BLIP‑2, ViT) 등이며 전체 목록은 블로그 게시물에 있습니다.
- 이 접근법은 텍스트, 비전, 멀티모달 모델에 모두 적용됩니다.
빠른 시작 가이드
pip install -U bitsandbytes
pip install -U git+https://github.com/huggingface/transformers.git
pip install -U git+https://github.com/huggingface/peft.git
pip install -U git+https://github.com/huggingface/accelerate.git
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch
config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4", # NF4 quantization
bnb_4bit_use_double_quant=True, # nested quantization
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
"facebook/opt-350m",
quantization_config=config,
device_map="auto"
)
load_in_4bit=True(또는 위에 보여진BitsAndBytesConfig)를 사용하여 모델을 로드합니다.- 로드 후 수동으로 디바이스를 지정하지 마세요;
device_map이 이를 처리합니다. - 더 빠른 학습을 위해
bnb_4bit_compute_dtype를 조정하세요(예:torch.bfloat16).
QLoRA로 훈련하기
- PEFT 라이브러리를 설치하고 고정된 4비트 모델 위에 LoRA 어댑터를 사용합니다.
- Hugging Face가 제공하는 예제 노트북은 무료 Google Colab 인스턴스에서 GPT‑Neo‑X(20 B)를 파인튜닝하는 방법을 보여줍니다.
- 벤치마킹에는 TRL 라이브러리의
SFTTrainer를 사용했으며, 스크립트는 연결된 GitHub gist에서 확인할 수 있습니다.
벤치마크 및 메모리 영향
| 모델 | FP16 크기 | GPU (VRAM) | 양자화 | 연산 dtype | Gradient 체크포인팅 | 시퀀스 길이 | OOM? |
|---|---|---|---|---|---|---|---|
| LLaMA‑7B | 14 GB | 1 × T4 (16 GB) | 4‑bit NF4 + bfloat16 | bfloat16 | No | 512 | ✅ OOM 없음 |
| LLaMA‑7B | 14 GB | 1 × T4 (16 GB) | 4‑bit NF4 + bfloat16 | bfloat16 | Yes | 1024 | ✅ OOM 없음 |
| LLaMA‑13B | 27 GB | 1 × T4 (16 GB) | 4‑bit NF4 + fp16 | fp16 | Yes | 512 | ✅ OOM 없음 |
| LLaMA‑13B | 27 GB | 1 × T4 (16 GB) | 4‑bit NF4 + fp16 | fp16 | Yes + Nested Quant | 1024 | ✅ OOM 없음 |
- 이 표는 이중 양자화와 선택적 Gradient 체크포인팅을 적용한 4‑bit NF4가 8‑bit 또는 FP16 기준에서 발생하는 메모리 초과(OOM) 오류를 방지한다는 것을 보여줍니다.
자주 묻는 질문
- 하드웨어 요구사항 – CUDA 호환 GPU만 필요하며, 4‑bit 추론에 대한 CPU 지원은 없습니다.
- 모델 지원 –
accelerate의device_map과 호환되는 모든 아키텍처를 양자화할 수 있습니다. - 훈련 – 순수 4‑bit 훈련은 지원되지 않으며, 파인튜닝은 QLoRA 논문에서 보여준 바와 같이 LoRA와 같은 PEFT 방식을 사용해야 합니다.
- 사용 사례 – 단일 4‑bit 기반 모델이 저사양 하드웨어에서도 여러 어댑터(보상 모델, 정책 등)를 호스팅할 수 있게 하여 RLHF 파이프라인을 가능하게 합니다.
리소스
- 논문: QLoRA (arXiv 2305.14314)
- 추론 노트북: Google Colab demo
- 파인튜닝 노트북: Google Colab fine‑tuning demo
- 코드: QLoRA GitHub repo
- 플레이그라운드: 블로그에 연결된 Hugging Face Space에서 Guanaco 33B 모델을 체험해 보세요.
시사점
- 추론 및 어댑터 파인튜닝에 필요한 하드웨어 요구사항을 낮춤으로써 대형 언어 모델에 대한 접근성을 민주화합니다.
- 대규모 GPU 클러스터가 없는 연구 그룹도 30 B 이상 모델을 실험할 수 있는 길을 엽니다.
- 소비자 기기나 저비용 클라우드 인스턴스에 강력한 챗봇을 배포할 실용적인 경로를 제공합니다.
감사의 말: 이번 릴리스는 워싱턴 대학교 팀, Pedro Cuenca(리뷰), Olivier Dehaene, Omar Sanseviero의 통합 지원에 대한 기여를 인정합니다.
SUMMARY: Hugging Face는 bitsandbytes를 통한 4비트 양자화 지원과 QLoRA 방식을 발표하여, 소비자용 GPU에서 대형 언어 모델의 추론 및 어댑터 파인튜닝을 가능하게 했습니다.
TITLE: Hugging Face 4비트 양자화 및 QLoRA 출시