1ONNX란?
ONNX(Open Neural Network Exchange)는 딥러닝 모델의 표준 교환 포맷입니다. ONNX Runtime은 Microsoft가 개발한 고성능 추론 엔진으로, 다양한 하드웨어에서 ONNX 모델을 최적 실행합니다.
ONNX Ecosystem
Training Frameworks
PyTorch
TensorFlow
sklearn
→
ONNX Model
.onnx file
Standard Format
→
Execution Providers
TensorRT (NVIDIA)
CUDA (NVIDIA)
OpenVINO (Intel)
CPU (Default)
ONNX의 핵심 가치: "Train Once, Deploy Anywhere" - 한 번 학습, 어디서든 배포
2Execution Providers
CUDA EP
NVIDIA GPU 범용
TensorRT EP
NVIDIA 최적화
OpenVINO EP
Intel CPU/VPU
DirectML EP
Windows GPU
3PyTorch → ONNX 변환
import torch
import onnx
class ONNXExporter:
def export_pytorch(self, model, sample_input, onnx_path):
"""PyTorch → ONNX 변환"""
model.eval()
torch.onnx.export(
model, sample_input, onnx_path,
export_params=True,
opset_version=17,
do_constant_folding=True,
input_names=['input'],
output_names=['output'],
dynamic_axes={
'input': {0: 'batch_size'},
'output': {0: 'batch_size'}
}
)
# 모델 검증
onnx_model = onnx.load(onnx_path)
onnx.checker.check_model(onnx_model)
return onnx_path
4ONNX Runtime 추론
import onnxruntime as ort
import numpy as np
class ONNXInference:
def __init__(self, model_path, providers=None):
if providers is None:
providers = [
('TensorrtExecutionProvider', {
'device_id': 0,
'trt_fp16_enable': True,
}),
('CUDAExecutionProvider', {'device_id': 0}),
'CPUExecutionProvider'
]
sess_options = ort.SessionOptions()
sess_options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
self.session = ort.InferenceSession(model_path, sess_options=sess_options, providers=providers)
self.input_name = self.session.get_inputs()[0].name
self.output_name = self.session.get_outputs()[0].name
def infer(self, input_data):
"""추론 실행"""
outputs = self.session.run([self.output_name], {self.input_name: input_data.astype(np.float32)})
return outputs[0]
5성능 비교
| 런타임 | 디바이스 | 추론 시간 | 특징 |
|---|---|---|---|
| PyTorch | RTX 4090 | 8.2ms | 개발 용이 |
| ONNX (CUDA) | RTX 4090 | 4.5ms | 크로스 플랫폼 |
| ONNX (TRT) | RTX 4090 | 2.1ms | NVIDIA 최적화 |
| ONNX (OpenVINO) | Intel i9 | 12.3ms | CPU 최적화 |
6제조 현장 활용
- 벤더 독립성: 특정 GPU 벤더에 종속되지 않음
- CPU 배포: GPU 없이 산업용 PC에서 실행 가능
- Edge TPU 지원: Google Coral 등 저전력 NPU 활용
10+
지원 프레임워크
15+
Execution Providers
5+
언어 바인딩
다음 장에서는 엣지 AI와 PLC를 OPC UA로 통합하여 실시간 제어 루프를 구성하는 방법을 학습합니다.