ONNX(Open Neural Network Exchange)는 ML 모델의 표준 중간 표현(IR) 형식으로, 서로 다른 프레임워크 간 모델 이동과 다양한 런타임에서의 추론을 가능하게 한다. Microsoft와 Facebook이 2017년 공동 개발했다.
생태계
[학습 프레임워크] [ONNX] [추론 런타임]
PyTorch ─→ ─→ ONNX Runtime (CPU/GPU)
TensorFlow ─→ .onnx 파일 ─→ TensorRT (NVIDIA)
scikit-learn ─→ ─→ OpenVINO (Intel)
PaddlePaddle ─→ ─→ CoreML (Apple)
─→ TVM, DirectML
python
import torch
import torch.onnx
# 모델 정의 및 로드
model = MyModel()
model.eval()
dummy_input = torch.randn(1, 3, 224, 224)
# ONNX 내보내기
torch.onnx.export(
model,
dummy_input,
"model.onnx",
export_params=True,
opset_version=17,
input_names=["input"],
output_names=["output"],
dynamic_axes={"input": {0: "batch"}, "output": {0: "batch"}}
)
print("ONNX 모델 저장 완료")
ONNX Runtime으로 추론
python
import onnxruntime as ort
import numpy as np
# 세션 생성 (GPU 사용 시 CUDAExecutionProvider)
sess = ort.InferenceSession("model.onnx",
providers=["CUDAExecutionProvider", "CPUExecutionProvider"])
# 추론
input_name = sess.get_inputs()[0].name
output = sess.run(None, {input_name: np.random.randn(1, 3, 224, 224).astype(np.float32)})
print(output[0].shape)
성능 이점
| 프레임워크 | 추론 지연 | ONNX Runtime 대비 |
|---|
| PyTorch (eager) | 100% | 기준 |
| TorchScript | ~85% | 15% 빠름 |
| ONNX Runtime | ~60% | 40% 빠름 |
| TensorRT | ~30% | 70% 빠름 |
(모델/하드웨어에 따라 상이)
관련 개념