딥러닝 모델은 학습이 끝난 뒤 실제 서비스 환경(서버, 모바일, 임베디드 시스템 등)에서 빠르게 추론해야 한다. 하지만 학습된 모델은 일반적으로 FP32(32-bit floating point)형태로 저장되어 크기가 크고 연산량이 많다. 이를 해결하기 위해 모델 변환(Model Conversion)과 양자화(Quantization)같은 경량화 기법을 사용한다.
학습은 보통 PyTorch나 TensorFlow에서 진행하지만, 실제 서비스 환경에서는 더 빠른 추론 엔진이 필요하다. 특히 PyTorch 모델의 경우, Python 환경이 필요하고, PyTorch 라이브러리 의존성 문제가 존재하며, GPU 최적화가 제한적이어서 모바일/임베디드 시스템에 배포가 어렵다.
ONNX(Open Neural Network Exchange)는 다양한 프레임워크 간 모델 교환을 위한 표준 포맷이다. ONNX의 장점은 다음과 같다.
TensorRT는 NVIDIA GPU 전용 추론 최적화 엔진이다. Layer Fusion, Kernal 최적화, Mixed Precision(FP16), INT8 Quantization 등을 자동 적용하여 추론속도가 2~5배 이상 빨라지도록 최적화한다.
양자화는 높은 정밀도의 숫자를 낮은 정밀도로 표현하는 과정이다. FP32 형태로 저장된 모델에 INT8 적용 시, 모델 크기 75% 감소, 메모리 사용량 감소, 추론속도 증가 효과를 얻을 수 있다.
Post-Training Quantization(PTQ)은 모델 학습 완료 이후 추가 학습 없이 모델을 변환하는 것이다. PTQ는 구현이 간단하고 빠르며, 데이터셋이 거의 필요없다는 장점이 있지만 정확도 손실이라는 단점이 존재한다. Post-Training Quantization 적용 사례로는 TensorRT INT8 Calibration, ONNX Runtime Quantization, OpenVINO Quantization이 있다.
Quantization-Aware Training(QAT)는 학습 과정에서 양자화를 미리 고려하는 방식이다. 모델 학습 과정에 Fake Quantization을 삽입하여 Forward과정에서는 INT8처럼 동작하고 Backward과정에서는 FP32로 학습한다. Fake Quantization은 정확도 유지가 뛰어나다는 장점이 있지만, 재학습이 필요하여 학습시간이 증가하고 구현이 복잡하다는 단점이 있다.
| 항목 | PTQ | QAT |
|---|---|---|
| 추가 학습 | 없음 | 필요 |
| 구현 난이도 | 쉬움 | 어려움 |
| 속도 | 빠름 | 느림 |
| 정확도 유지 | 보통 | 우수 |
| 데이터 필요 | 적음 | 많음 |
| 추천 상황 | 일반 서비스 | 정확도 중요 서비스 |
양자화 이후, 실제 서비스에 모델을 적용하기 위해서는 모델 크기 감소, 추론 성공 여부 뿐만 아니라 정확도 비교 과정이 필수로 진행되어야 한다. 보통 Classification은 1~2% 이내, Detection은 mAP 1~3% 이내를 목표로 하며 특정 클래스가 망가지지는 않았는지 클래스별 성능 확인이 반드시 필요하다. 또한 실제 추론속도(Latency, Throughput, GPU Utilization, CPU Usage)를 확인하여 실제 성능이 향상되었는지 확인해보아야 한다. 이외에도 실제 서비스에 적용하기 위해서 Edge Case 테스트, 운영 환경 테스트를 추가로 진행하여 요구사항에 맞춰 모델 재검증 후 배포하여야 한다.