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

+ Recent posts