"모델을 한 번만 학습하고, 모든 디바이스에서 돌리고 싶다!"
ONNX, TensorRT, TFLite는 모델을 효율적으로 배포하기 위한 핵심 툴입니다.

모델 배포의 문제점
- 학습은 보통 PyTorch / TensorFlow에서 하지만
배포 환경은 서버, 모바일, 임베디드, 브라우저 등 다양 - 프레임워크 종속적 모델은 호환성 문제 발생 →
프레임워크 독립적인 포맷으로 변환 필요
ONNX (Open Neural Network Exchange)
ONNX는 프레임워크 독립 모델 표현(IR)
- PyTorch, TensorFlow, scikit-learn 등에서 export 가능
- ONNX Runtime, OpenVINO, TensorRT 등 다양한 런타임에서 추론 가능
- Graph Optimization (Constant Folding, Fusion) 자동 수행
PyTorch → ONNX 변환 예시
import torch
model = get_trained_model()
model.eval()
dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(
model, dummy_input, "model.onnx",
input_names=["input"], output_names=["output"],
opset_version=17, dynamic_axes={"input": {0: "batch"}}
)
TensorRT
TensorRT는 NVIDIA GPU용 고성능 추론 최적화 엔진
- FP16, INT8, FP8 연산 최적화
- Layer Fusion, Kernel Auto-Tuning, Tensor Core 활용
- Batch별 최적화 프로파일 생성 가능
변환 과정
PyTorch → ONNX → TensorRT 엔진(.plan) 생성
trtexec --onnx=model.onnx --saveEngine=model.plan --fp16
TFLite (TensorFlow Lite)
모바일/엣지 디바이스 배포 최적화 모델
- Weight Quantization (INT8) + Edge TPU 가속
- Microcontroller(MCU)에서도 동작 가능한 Micro TFLite 지원
- iOS/Android에서 바로 실행 가능 (NNAPI, Metal 지원)
변환 예시
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model("saved_model")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
with open("model.tflite", "wb") as f:
f.write(tflite_model)
장점
1. 배포 호환성 극대화
2. 추론 속도 최적화 (커널 fusion, quantization, graph simplification)
3. 모바일·엣지 지원 (TFLite, CoreML)
4. FP16/INT8 가속 지원 (GPU inference 속도 ↑)
단점 & 주의점
변환 시 일부 연산자가 지원되지 않을 수 있음 → Custom Op 필요
Dynamic shape, Control Flow 등은 변환 난이도 ↑
TensorRT INT8은 Calibration 데이터 필요
실무 적용 팁
- ONNX Opset 최신 버전 (≥17) 사용 → 호환성↑
- 변환 전 torch.onnx.export 시 dynamic_axes 지정 → 다양한 배치 지원
- TensorRT 엔진 프로파일 여러 개 생성 → 배치별 최적 성능
- TFLite는 quantization-aware training(QAT)으로 정확도 보존
실제 효과
| 모델 | 변환 전 (FP32) | TensorRT FP16 | TensorRT INT8 |
| ResNet-50 | 15 ms | 8 ms | 6 ms |
| BERT-base | 22 ms | 12 ms | 9 ms |
ONNX + TensorRT 최적화로 최대 2~3배 속도 향상 가능
결론
ONNX, TensorRT, TFLite는 모델 배포 필수 툴체인입니다.
한 번 학습한 모델을 여러 환경에 호환되게 배포하고,
하드웨어별 최적 성능을 자동으로 뽑아낼 수 있습니다.
다음 시리즈는 아래에 있습니다!
https://machineindeep.tistory.com/72
대규모 모델 학습·추론 최적화 시리즈 1편: Mixed Precision Training (AMP)
"학습 속도를 2배 이상 올리고, VRAM도 절약할 수 있다?"Mixed Precision Training은 FP16/BF16과 FP32를 적절히 섞어 쓰는 학습 기법입니다.Mixed Precision Training이란?기존 딥러닝 학습은 모든 연산을 FP32(32-bit fl
machineindeep.tistory.com
'ML | DL > 딥러닝 방법론|실습' 카테고리의 다른 글
| 대규모 모델 학습·추론 최적화 시리즈 2편: Gradient Accumulation (1) | 2025.09.14 |
|---|---|
| 대규모 모델 학습·추론 최적화 시리즈 1편: Mixed Precision Training (AMP) (1) | 2025.09.14 |
| 모델 압축·배포 최적화 시리즈 4편: Weight Clustering / Sharing (0) | 2025.09.14 |
| 모델 압축·배포 최적화 시리즈 3편: Pruning (가중치 가지치기) (1) | 2025.09.14 |
| 모델 압축·배포 최적화 시리즈 2편: Quantization (양자화) (1) | 2025.09.14 |