ONNX(Open Neural Network Exchange)는 딥러닝 모델을 프레임워크 간에 교환·호환하기 위한 표준 포맷이다. 핵심 목적은 학습과 추론 환경을 분리하는 것이다.
1. ONNX의 개념적 위치
일반적인 딥러닝 워크플로우는 다음처럼 나뉜다.
- 학습(Training)
PyTorch, TensorFlow, JAX 등 → 연구·실험에 최적 - 추론(Inference)
서버, 엣지, 모바일, 임베디드 → 성능·이식성이 중요
ONNX는 이 둘 사이를 연결하는 중립적인 중간 표현(IR, Intermediate Representation) 역할을 한다.
“어디서 학습했든, 어디서든 실행하자”
2. ONNX가 해결하는 문제
2.1 프레임워크 종속성 제거
- PyTorch → TensorFlow → TensorRT 로 직접 변환은 복잡
- ONNX를 거치면 공통 포맷으로 단순화
2.2 추론 성능 최적화
ONNX 자체보다 ONNX Runtime이 핵심
하드웨어별 가속을 자동 활용
- CPU (MKL, OpenMP)
- GPU (CUDA, TensorRT)
- NPU, VPU, Edge TPU 등
2.3 배포 표준화
- 서버 / 클라우드 / 엣지 / 모바일 동일 모델 사용 가능
- CI/CD 파이프라인에 적합
3. ONNX의 구조
ONNX 모델은 다음 요소로 구성된다.
3.1 Computational Graph
- Directed Acyclic Graph (DAG)
- 노드: 연산자(Conv, Relu, MatMul 등)
- 엣지: Tensor 흐름
3.2 Operators (Opset)
- 표준 연산 집합
- 버전 관리됨 (opset 11, 13, 18 …)
- 프레임워크마다 지원 opset 다를 수 있음
3.3 Tensor
- N차원 배열
- 데이터 타입 명시 (float32, int8 등)
4. 주요 구성 요소
4.1 ONNX
- 파일 포맷 + 연산 표준
.onnx단일 파일
4.2 ONNX Runtime (ORT)
- 고성능 추론 엔진
- C/C++, Python, C#, Java, Node.js 지원
- 플러그형 Execution Provider 구조
ONNX Model
↓
ONNX Runtime
↓
CPU / GPU / NPU / TensorRT
5. 프레임워크별 ONNX 변환
5.1 PyTorch → ONNX
torch.onnx.export(
model,
dummy_input,
"model.onnx",
opset_version=13
)
5.2 TensorFlow → ONNX
tf2onnx사용
python -m tf2onnx.convert \
--saved-model model_dir \
--output model.onnx
6. ONNX Runtime 사용 예
Python
import onnxruntime as ort
session = ort.InferenceSession("model.onnx")
outputs = session.run(None, {"input": input_array})
C#
using Microsoft.ML.OnnxRuntime;
var session = new InferenceSession("model.onnx");
7. ONNX의 장점과 한계
장점
- 프레임워크 독립
- 추론 성능 우수
- 다양한 언어/플랫폼 지원
- 상용 배포에 적합
한계
- 학습용 포맷 아님
- 최신/실험적 연산은 변환 불가할 수 있음
- Dynamic shape, control flow는 제약 있음
- 커스텀 연산은 별도 구현 필요
8. ONNX vs 다른 포맷
| 포맷 | 목적 | 특징 |
|---|---|---|
| ONNX | 범용 추론 | 중립적, 광범위 |
| TensorRT | NVIDIA 추론 | 최고 성능, 종속 |
| TFLite | 모바일 | 경량, TF 중심 |
| CoreML | Apple | iOS/macOS 전용 |
9. 언제 ONNX를 쓰는가
- 학습은 PyTorch, 배포는 C#/C++/Node.js
- GPU/CPU/NPU 환경이 혼재
- 서버 + 엣지 동일 모델 필요
- 장기 유지보수 가능한 모델 포맷 필요
10. 한 줄 요약
ONNX는 “딥러닝 모델을 실행 환경과 분리하기 위한 산업 표준 추론 포맷”이다.
728x90
'Software > 기타' 카테고리의 다른 글
| 인공지능 시작하기 - Ollama 명령어모드(1) (0) | 2026.01.28 |
|---|---|
| 인공지능 시작하기 - Ollama 설치하기 (0) | 2026.01.28 |
| MS Windows 부팅설정 변경 (0) | 2025.11.24 |
| WSL(Windows Subsystem Linux) 설치 (0) | 2025.11.13 |
| Visual Studio 2026 설치 (0) | 2025.11.13 |
