"모델 크기 4배 줄이고, 추론 속도는 2배 이상 높인다?"
Quantization은 weight와 activation을 저비트로 변환해 모델을 경량화하는 핵심 기법입니다.

Quantization이란?
Quantization은 모델의 weight와 activation 값을 낮은 정밀도(bit) 로 표현하는 기법입니다.
- 일반적으로 학습된 모델은 FP32 (32-bit float)
- 양자화 시 → FP16, INT8, INT4 등으로 변환
- 메모리 차지 공간이 줄고, 정수 연산을 사용해 추론 속도가 빨라짐
왜 중요한가?
- 모델 크기 줄이기: 저장 공간 & 메모리 사용량 감소
- 추론 속도 향상: INT 연산은 float 연산보다 빠르고 에너지 효율 높음
- 엣지/모바일 배포 가능: 작은 디바이스에서도 대형 모델 구동 가능
Quantization 방식
| Post-Training Quantization (PTQ) | 학습 끝난 모델 → 후처리로 양자화 | 간단, 재학습 불필요 | 정확도 소폭 하락 가능 |
| Quantization-Aware Training (QAT) | 학습 단계에서 quantization 시뮬레이션 | 정확도 손실 최소화 | 추가 학습 필요 |
| Dynamic Quantization | 추론 시 실시간 quantization (weight만 정수화) | 간단, 빠름 | activation은 여전히 FP |
| Static Quantization | weight + activation 둘 다 INT8 | 최대 성능 | calibration dataset 필요 |
동작 원리 (간단)
Weight quantization:
- scale : weight 분포를 [0, 255] (INT8) 범위로 매핑
- q : 정수값 (0~255)
- 역양자화 시 scale * q로 복원
장점
1. 모델 사이즈 4배↓ (FP32 → INT8)
2. 추론 속도 1.5~3배 ↑ (하드웨어 최적화 시 더 커짐)
3. 메모리 대역폭 절약 → GPU/CPU 캐시 효율 ↑
4. 전력 효율 개선 → 모바일/엣지 배터리 소모 감소
단점 & 고려 사항
Quantization 시 정밀도 손실 → accuracy drop 가능
outlier value가 많으면 scale factor 커져서 효과 감소
calibration dataset 품질 중요 (특히 static quantization)
PyTorch 예시 (Post-Training Dynamic Quantization)
import torch
import torch.quantization
model = get_pretrained_model()
model.eval()
quantized_model = torch.quantization.quantize_dynamic(
model, {torch.nn.Linear}, dtype=torch.qint8
)
print("Before:", model.state_dict()['fc.weight'].dtype)
print("After:", quantized_model.state_dict()['fc.weight'].dtype)
실제 효과 (실험 데이터)
| ResNet-50 | 97 MB | 25 MB | 75% ↓ | 1.7× ↑ |
| BERT-base | 420 MB | 105 MB | 75% ↓ | 1.5× ↑ |
| LLaMA-7B (4-bit) | 28 GB | 7 GB | 75% ↓ | GPU VRAM 절약 극대화 |
실무 적용 팁
- PTQ로 먼저 시도 → 정확도 drop 심하면 QAT로 재학습
- Calibration dataset은 실제 배포 데이터 분포와 비슷해야 함
- INT8 지원 하드웨어 (TensorRT, OpenVINO, FBGEMM) 사용 시 효과 극대화
- weight만 quantization → dynamic; activation까지 → static
결론
Quantization은 모델 배포 시 가장 간단하면서도 효과적인 최적화 기법입니다.
특히 INT8, INT4 quantization은 모델 크기를 획기적으로 줄이고,
추론 속도를 크게 높이면서도 정확도를 거의 유지할 수 있습니다.
다음 편은 아래에 있습니다!
https://machineindeep.tistory.com/69
모델 압축·배포 최적화 시리즈 3편: Pruning (가중치 가지치기)
"신경망에서 정말 모든 weight가 필요할까?"Pruning은 중요도가 낮은 weight, 뉴런, 채널을 제거해 모델을 가볍게 만드는 기법입니다.Pruning이란?Pruning(가지치기)은 신경망의 불필요한 파라미터를 제거
machineindeep.tistory.com
'ML | DL > 딥러닝 방법론|실습' 카테고리의 다른 글
| 모델 압축·배포 최적화 시리즈 4편: Weight Clustering / Sharing (0) | 2025.09.14 |
|---|---|
| 모델 압축·배포 최적화 시리즈 3편: Pruning (가중치 가지치기) (1) | 2025.09.14 |
| 모델 압축·배포 최적화 시리즈 1편: Knowledge Distillation (0) | 2025.09.14 |
| AI 모델 경량화 시리즈 5편: QLoRA (Quantized LoRA) (0) | 2025.09.14 |
| AI 모델 경량화 시리즈 4편: BitFit (Bias-Only Fine-Tuning) (0) | 2025.09.14 |