도라에몽주머니

[ML/AI] ONNX 모델이란? 본문

Study/ML

[ML/AI] ONNX 모델이란?

에몽쓰 2025. 12. 15. 18:49

새로 들어가게 된 안건에서 ONNX 모델을 사용하게 되어서 정리하는 글.

 

 

ONNX 란?

ONNX(Open Neural Network Exchange) 란 서로 다른 딥러닝 환경에서 개발된 모델을 서로 호환 가능하도록 하는 표준 모델 포맷이다.

예를 들어, Tensorflow에서 만든 모델을 ONNX 그래프로 export 하면 PyTorch 와 같은 다른 프레임워크에서도 해당 모델을 import 해서 사용할 수 있다.

출처: https://aurigait.com/blog/onnx-onnx-runtime-and-tensortrt/

장점

ONNX는 아래와 같은 장점이 있다.

  1. Framework interoperability: 프레임워크 상호 운용성
    ONNX를 이용하면, 하나의 프레임워크(ex. PyTorch) 에서 모델을 학습시키고 다른 프레임워크(ex. TensorFlow) 로 내보내서 추론에 사용할 수 있다.
    현재는 PyTorch, Caffe2, Microsoft Cognitive Toolkit, Apache MXNet, Chainer 등의 프레임워크를 지원하며, Core ML, TensorFlow, Qualcomm SNPE, Nvidia의 TensorRT, Intel의 nGraph도 추가로 지원될 예정이다.
  1. Hardware optimizations: 하드웨어 최적화
    성능을 최대화하기 위해 ONNX 호환 런타임 및 라이브러리를 제공하므로, 하드웨어 최적화가 가능하다.
    현재는 Qualcomm SNPE, AMD, ARM, Intel 및 기타 하드웨어 파트너를 지원한다.

 

ONNX Runtime

ONNX가 지원하는 프레임워크이다. 다양한 프레임워크, 운영 체제와 하드웨어 플랫폼을 지원하며, 머신러닝 속도를 향상시키도록 설계되어 있다.

출처: https://aurigait.com/blog/onnx-onnx-runtime-and-tensortrt/

동작 흐름

  1. PyTorch, TensorFlow, Keras 등의 모델을 ONNX로 변환해서 ONNX 모델을 생성한다.
  2. 사용하고자 하는 환경에서 생성한 모델(ex. example.onnx) 을 로드하고 실행한다.
  3. 하드웨어 가속기 등을 이용해서 성능을 조정한다.
  4. 입력값을 전달하고 결과값을 반환받는다.

실행

Installation

!pip install onnxruntime

 

Session

import onnxruntime as ort

# 추론 세션 생성
session_tf = ort.InferenceSession("model_path.onnx")

# 추론 세션 실행
input_images = session_tf.get_inputs()[0].name
output_name = session_tf.get_outputs()[0].name
results_ort = session_tf.run([output_name], {input_name: X.astype(np.float32)})

 

Netron 이란?

 

Netron은 아래 이미지와 같이 딥러닝 모델 아키텍쳐를 시각화해주는 툴이다. ONNX, TorchScript, TensorFlow Lite, TensorFlow, Keras, Core ML, Darknet 과 같은 모델들을 지원한다.

출처: https://github.com/lutzroeder/netron

 

Netron은 다운로드해서 로컬에서 실행할 수도 있지만, 아래의 브라우저에 모델을 드래그 앤 드롭하면 아주 간단하게 모델 아키텍쳐를 확인할 수 있다.

https://netron.app/

 

Netron

 

netron.app

 

References