dev.Log

ONNX란 무엇인가? 본문

인공지능

ONNX란 무엇인가?

초코푸딩 2025. 11. 26. 15:12

안녕하세요.
이번 글에서는 최근 AI 모델 배포와 서빙 환경에서 사실상 표준처럼 사용되고 있는 ONNX(Open Neural Network Exchange)에 대해 정리해보겠습니다.

딥러닝 모델을 개발하다 보면 PyTorch, TensorFlow, JAX, scikit-learn 등 프레임워크마다 모델 포맷이 달라 재사용이나 배포가 번거로운 상황을 자주 겪게 됩니다.
ONNX는 이러한 문제를 해결하기 위해 등장한 딥러닝 모델 교환 표준 포맷입니다.


1. ONNX란 무엇인가

ONNX(Open Neural Network Exchange)는 딥러닝 모델을 프레임워크에 종속되지 않는 하나의 통일된 포맷으로 저장하기 위한 표준 규격입니다.

PyTorch에서 학습한 모델을 ONNX로 변환한 뒤 TensorRT, ONNX Runtime, OpenVINO, C++ 서버 환경 등에서 그대로 실행할 수 있습니다.
TensorFlow 모델 역시 ONNX로 변환해 다양한 환경에서 재사용할 수 있습니다.

ONNX 자체는 학습을 수행하지 않으며, 모델 저장과 이식, 서빙을 목적으로 사용됩니다.


2. 왜 ONNX가 필요한가

프레임워크 독립성

딥러닝 프레임워크는 다양하지만 ONNX는 이들을 하나의 포맷으로 연결해줍니다.

PyTorch, TensorFlow, scikit-learn, XGBoost, LightGBM 등 서로 다른 프레임워크로 생성된 모델이라도 ONNX 파일 하나로 통일할 수 있습니다.

다양한 추론 엔진 지원

ONNX는 주요 추론 엔진에서 표준처럼 지원되고 있습니다.

ONNX Runtime, TensorRT, OpenVINO, CoreML, Triton Inference Server 등 대부분의 고성능 추론 엔진이 ONNX를 입력 포맷으로 사용합니다.
모델은 ONNX로 통일하고, 실행 환경에 따라 추론 엔진만 선택하는 구조가 가능합니다.

빠른 추론 성능

ONNX Runtime은 CPU와 GPU 모두에 대해 최적화가 잘 되어 있어 PyTorch inference 대비 2배 이상 빠른 경우도 흔합니다.

특히 STT, NLP, RAG 임베딩, TTS와 같이 실시간 처리가 중요한 모델에서는 ONNX로 배포할 때 성능 차이가 분명히 나타납니다.


3. ONNX 파일 구조

ONNX 파일은 .onnx 확장자를 가지며 내부적으로는 Protobuf 기반의 연산 그래프 형태로 저장됩니다.

구성 요소는 다음과 같습니다.

  • Graph: 전체 연산 흐름
  • Node: Conv, MatMul, Softmax와 같은 연산 단위
  • Initializer: 모델 weight 텐서
  • Input / Output: 모델 입출력 정의

ONNX는 딥러닝 모델의 연산 그래프를 그대로 기술한 파일이며, 추론 엔진은 이 그래프를 해석해 실제 연산을 수행합니다.


4. PyTorch에서 ONNX로 변환하기

PyTorch 모델을 ONNX로 변환하는 예시는 다음과 같습니다.

 
torch.onnx.export( model, sample_input, "model.onnx", opset_version=17, input_names=["input"], output_names=["output"], dynamic_axes={"input": {0: "batch"}} )

이 과정을 통해 모델 구조와 weight가 하나의 ONNX 파일로 생성됩니다.


5. ONNX Runtime으로 추론하기

Python에서 ONNX Runtime을 사용하는 예시는 다음과 같습니다.

 
import onnxruntime as ort session = ort.InferenceSession("model.onnx") result = session.run(None, {"input": input_tensor})

C++ 환경에서도 ONNX Runtime을 사용할 수 있으며, PyTorch C++ API 대비 훨씬 가볍고 빠른 편입니다.

실시간 STT나 NLP 서버에서는 특히 큰 장점이 됩니다.


6. ONNX의 주요 최적화 기능

ONNX 및 ONNX Runtime은 다양한 최적화 기능을 제공합니다.

그래프 최적화를 통해 연산 병합, 상수 폴딩, 불필요한 노드 제거, shape 추론 등이 수행됩니다.
또한 INT8 기반 양자화를 통해 모델 크기를 줄이고 CPU 추론 성능을 향상시킬 수 있습니다.

GPU 환경에서는 ONNX 모델을 그대로 TensorRT 엔진으로 변환해 고성능 추론을 수행할 수 있습니다.


7. 실무에서 ONNX가 유용한 이유

실무 환경에서 ONNX는 다음과 같은 상황에서 특히 효과적입니다.

실시간 STT, NLP, RAG 서비스와 같이 저지연이 중요한 경우, C++ 기반 서버에서 ONNX Runtime은 안정성과 성능 면에서 강점을 가집니다.
GPU 자원을 사용하는 환경에서는 TensorRT와의 연계가 용이해 GPU 최적화 측면에서도 유리합니다.

또한 서버, 모바일, 클라우드 환경 전반에서 모델 포맷을 하나로 통일할 수 있어 운영과 배포가 단순해집니다.


8. 정리

ONNX는 딥러닝 모델 배포와 서빙 관점에서 사실상의 표준 포맷으로 자리 잡았습니다.
학습은 PyTorch에서 수행하고, 배포는 ONNX 또는 TensorRT로 통일하는 구조는 이미 업계에서 일반적인 패턴이 되었습니다.

'인공지능' 카테고리의 다른 글

CTC vs RNN-T vs Attention Seq2Seq  (1) 2025.12.23
DVC?  (0) 2025.12.23
블랙웰(Blackwell) 아키텍처  (0) 2025.11.26
RAG 캐시  (0) 2025.11.21
임베딩 생성과 모달 정렬의 차이 (RAG와 LLM-ASR 관점에서)  (0) 2025.07.14
Comments