[LLM 추론 최적화] Day 2: 양자화 - INT8, GPTQ, AWQ
서론: 가중치를 줄이면 무엇이 달라지나
LLaMA-3 70B 모델의 FP16 가중치는 약 140GB다. A100 80GB GPU 2장이 필요하다. 이를 INT4로 양자화하면 약 35GB, A100 1장에 들어간다. 메모리가 절반으로 줄면 GPU 수가 줄고 비용도 줄어든다.
양자화는 고정밀도 부동소수점 가중치를 낮은 비트 정수로 변환하는 기술이다.
1. 양자화의 원리
1
2
3
4
5
6
FP32 (32비트) → INT8 (8비트): 4배 압축
FP16 (16비트) → INT4 (4비트): 4배 압축
변환 공식:
quantized = round(value / scale) + zero_point
dequantized = (quantized - zero_point) × scale
scale과 zero_point를 얼마나 정밀하게 결정하느냐가 정확도 손실을 결정한다.
2. 양자화 방식 비교
2.1 Post-Training Quantization (PTQ)
학습 이후 가중치를 그대로 양자화한다. 캘리브레이션 데이터셋을 소량 사용해 스케일을 결정한다.
1
2
장점: 재학습 불필요, 빠른 적용
단점: 낮은 비트(INT4 이하)에서 정확도 손실 가능
LLM.int8(): Hugging Face bitsandbytes 라이브러리. 이상값(outlier) 행에는 FP16, 나머지는 INT8을 적용하는 혼합 방식.
2.2 GPTQ
그래디언트 기반 2차 최적화로 각 레이어의 양자화 오차를 최소화한다.
1
2
3
4
특징:
- 레이어별로 순서대로 최적화
- GPU에서 직접 실행 (빠른 양자화 속도)
- INT4에서도 FP16 대비 약 1-2% 정확도 손실
GPTQ는 추론 시 가중치를 실시간으로 역양자화해 연산한다. 별도의 양자화 커널 지원이 필요하다.
2.3 AWQ (Activation-aware Weight Quantization)
활성값(activation) 분포를 분석해 중요한 가중치 채널을 보호한다.
1
2
3
4
핵심 아이디어:
- 활성값이 큰 채널 = 중요한 채널
- 중요한 채널의 가중치는 스케일을 키워 양자화 오차 최소화
- 나머지는 INT4로 공격적으로 압축
GPTQ 대비 동등하거나 더 나은 정확도를 보이면서 추론 속도가 빠른 경향이 있다.
3. FP8: 새로운 선택지
NVIDIA H100부터 FP8(8비트 부동소수점) 하드웨어 가속을 지원한다.
| 형식 | 비트 | 표현 범위 | 특징 |
|---|---|---|---|
| FP16 | 16 | ±65504 | 기준 |
| INT8 | 8 | -128~127 | 정수 연산 |
| FP8 | 8 | FP16보다 좁음 | 부동소수점, H100+ 전용 |
FP8은 INT8 대비 정확도 손실이 적고, 하드웨어 가속으로 INT8과 비슷한 속도를 낸다. H100 환경에서는 FP8이 점점 표준이 되고 있다.
4. 실무 선택 가이드
1
2
3
4
5
6
7
8
9
10
11
GPU 메모리 여유 있음 (< 4비트 불필요)
→ INT8 PTQ 또는 FP8 (H100+)
GPU 메모리 부족, 정확도 우선
→ GPTQ INT4 또는 AWQ INT4
추론 속도 최우선
→ AWQ + 전용 커널 (AutoAWQ, vLLM 통합)
H100 환경
→ FP8 우선 검토
5. 정확도 손실 평가
양자화 후 반드시 정확도를 평가해야 한다.
1
2
3
4
5
6
7
8
평가 지표:
- Perplexity: 언어 모델링 기본 지표 (낮을수록 좋음)
- 태스크별 벤치마크: MMLU, HellaSwag 등
- 도메인 특화 골든 셋: 실제 서비스 시나리오
허용 기준 예시:
FP16 대비 Perplexity 증가 < 2%
태스크 정확도 하락 < 1%p
6. Day 2 체크리스트
- 현재 모델의 GPU 메모리 점유율을 측정하고 양자화 필요성을 판단했다.
- 사용 환경(GPU 세대)에 따라 INT8/INT4/FP8 중 적합한 형식을 선택했다.
- 양자화 후 Perplexity 및 태스크 벤치마크로 정확도를 검증했다.
- 양자화 커널을 지원하는 추론 프레임워크(vLLM, AutoAWQ)를 확인했다.
다음 글 예고
Day 3에서는 KV 캐시와 Continuous Batching을 다룬다. PagedAttention이 KV 캐시 단편화를 어떻게 해결하는지, 연속 배치가 GPU 활용률을 어떻게 높이는지 살펴본다.