ML | DL/딥러닝 방법론|실습

모델 압축·배포 최적화 시리즈 2편: Quantization (양자화)

Leeys 2025. 9. 14. 22:43
반응형

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


Quantization

 

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:

 
q = round((w - min) / scale) w_quant = q * scale + min
  • 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)

실제 효과 (실험 데이터)

모델양자화 전 (FP32)INT8 양자화 후크기 감소속도 향상
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

 

반응형