대상: Android, iOS, 라즈베리파이, 마이크로컨트롤러, Jetson, Edge TPU 등
장점:
적합 예: 실시간 객체 탐지 앱, 키오스크 음성 인식 등
대상: 특정 SoC(Snapdragon, Apple Bionic 등), NPU 내장 칩
장점:
대상: 웹 서비스, 데스크탑 앱, 일반 사용자용 소프트웨어
문제점:
대상: 의료 영상 분석, 금융 예측, 법률 문서 처리 등
문제점:
환경 유형 | 양자화 적합도 | 비고 |
---|---|---|
Android/iOS 앱 | ✅ 적극 추천 | TFLite, PyTorch Mobile 최적화 가능 |
Jetson, Edge TPU, 라즈베리파이 | ✅ 매우 유리 | 속도 및 전력 효율 극대화 |
다양한 데스크탑 유저 환경 | ⚠️ 제한적 사용 | 하드웨어별 성능 차이, float가 더 빠를 수도 있음 |
연구, 실험, 디버깅 목적 | ❌ 비추천 | float32가 더 직관적이고 안정적 |
의료/정밀한 결과가 필요한 산업 분야 | ❌ 비추천 | 미세한 정밀도 손실도 치명적일 수 있음 |
"양자화 연산을 실제로 실행하는 것은 하드웨어가 아니라 엔진(소프트웨어 런타임)입니다."
엔진 종류 | 예시 | 설명 |
---|---|---|
하드웨어 가속기 | ARM NEON, AVX2/512, Apple Neural Engine | 실제 int8 연산을 빠르게 수행하는 하드웨어 유닛 |
런타임 엔진 (소프트웨어) | QNNPACK (PyTorch), XNNPACK, TFLite | int8 연산을 하드웨어 위에서 실행시켜주는 소프트웨어 |
전용 NPU/DSP | Google Edge TPU, TensorRT, Movidius 등 | int8 추론만 전담하는 고속 특화 프로세서 (추론 전용 칩) |
import torch
print(torch.backends.quantized.supported_engines)
# ['qnnpack', 'fbgemm'] ← 지원되는 런타임
qnnpack
, xnnpack
, 또는 fbgemm
에 위임함조건 | 양자화 추론 가능 여부 | 이유 |
---|---|---|
QNNPACK/XNNPACK 포함됨 | ✅ 가능 | int8 연산자가 등록되고 실행 가능 |
포함되지 않음 + CPU가 AVX2/NEON 지원 | ❌ 불가능 | 연산자 정의 자체가 없음 (실행 시 에러 발생) |
다른 프레임워크 (TensorRT, TFLite) 사용 | ✅ 가능 | 자체 런타임 엔진 사용 |
아무리 CPU가 int8을 지원해도 QNNPACK이 없으면 PyTorch는 해당 연산을 실행할 수 없습니다.
cmake .. \
-DUSE_QNNPACK=ON \
-DUSE_PYTORCH_QNNPACK=ON \
-DUSE_XNNPACK=ON \
...
ls libtorch/lib | grep qnnpack
# libqnnpack.a, libpytorch_qnnpack.a 등 있으면 OK
양자화 모델은 다음과 같은 조건에서 효과를 극대화합니다:
❌ 하지만, 아래와 같은 경우엔 주의가 필요합니다:
“양자화는 모델이 아닌 하드웨어와 소프트웨어 환경 전체를 고려한 기술입니다.
단순히 모델만 int8로 바꿨다고 끝나는 게 아닙니다.”