2 minute read

ONNX(Open Neural Network Exchange)



0. Introduction




ONNX(Open Neural Network Exchange)는 Facebook과 Microsoft가 공동으로 개발한 Open Source Project입니다.

현재, 다양한 Deep Learning Framework가 존재하고 있으며, 각 Framework는 각기 다양한 형식으로 훈련된 Model File Format을 사용하며, 서로 호환되지 않습니니다.

내가 구현하려는 서비스에 적합한 Pre-Trained Model이 하필 내가 사용하지 않는 Framework으로 Train되었다던지,

적용할 시스템에서 해당 Pre-Trained Model을 사용하지 못하는 환경이라면 난감하기 그지 없겠지요.

이런 상황에서 빛을 발하는 것이 바로 ONNX입니다.

ONNX는 다양한 Deep Learning Framework에서 Train된 Model들을 일관성을 보장하며 서로 호환가능한 Model File Format으로 변환시켜 줍니다.

또한, Python, C++, C# 및 Java와 같은 여러 Programming Language를 지원하고 있습니다.




1. Model Conversion


ONNX의 핵심은 Computational Graphs를 보편적인 방법으로 표현하는 것입니다.

Data Graph라고도 불리는 이 Graph는 각 Model의 구성 요소 또는 Node와 이들 사이를 연결하는 Edge를 정의하고 있습니다.

현재 Neural Network 방식을 사용하는 Deep Learning Framework은 Data Graph 방식을 사용하여 Model을 표현하며,

각 Deep Learning Framework은 개발자가 Data Graph를 구성할 수 있고, 처리할 수 있는 방식을 제공합니다.

ONNX는 Data Graph의 Common Representation을 제공함으로써 개발자가 작업에 적합한 Framework를 선택할 수 있도록 합니다.




2. Examples of Model Conversion


  • ONNX는 현재 많이 사용되고 있는 Deep Learning Framework 대부분을 지원하고 있습니다.

  • 아래 Link에서 ONNX File Format Conversion에 대한 자세한 자료가 있습니다.

    • https://github.com/onnx/tutorials



2.1 Conversion to ONNX


  • 각 Framework의 Model File을 ONNX File Format으로 변환하는 방법은 아래 표에서 확인할 수 있습니다.


Framework / Tool Installation Tutorial  
Caffe apple/coremltools and onnx/onnxmltools Example  
Caffe2 part of caffe2 package Example  
Chainer chainer/onnx-chainer Example  
Cognitive Toolkit (CNTK) built-in Example  
CoreML (Apple) onnx/onnxmltools Example  
Keras onnx/tensorflow-onnx Example n/a
LibSVM onnx/onnxmltools Example n/a
LightGBM onnx/onnxmltools Example n/a
MATLAB Deep Learning Toolbox Example  
ML.NET built-in Example  
MXNet (Apache) part of mxnet package docs github Example  
PyTorch part of pytorch package Example1, Example2, export for Windows ML, Extending support  
SciKit-Learn onnx/sklearn-onnx Example n/a
SINGA (Apache) - Github (experimental) built-in Example  
TensorFlow onnx/tensorflow-onnx Examples  



2.2 Load from ONNX File


  • ONNX File로 되어 있는 Model을 각 Framework에서 읽어서 사용하는 방법은 아래 표에서 확인할 수 있습니다.


Framework / Tool Installation Tutorial
Caffe2 Caffe2 Example
Cognitive Toolkit (CNTK) built-in Example
CoreML (Apple) onnx/onnx-coreml Example
MATLAB Deep Learning Toolbox Converter Documentation and Examples
Menoh Github Packages or from Nuget Example
ML.NET Microsoft.ML Nuget Package Example
MXNet (Apache) - Github MXNet API
Example
ONNX Runtime See onnxruntime.ai Documentation
SINGA (Apache) - Github [experimental] built-in Example
Tensorflow onnx-tensorflow Example
TensorRT onnx-tensorrt Example
Windows ML Pre-installed on Windows 10 API
Tutorials - C++ Desktop App, C# UWP App
Examples
Vespa.ai Vespa Getting Started Guide Real Time ONNX Inference
Distributed Real Time ONNX Inference for Search and Passage Ranking




3. Usage Scenario


  • 아래 Link에서 ONNX를 사용하는 다양한 Usage를 보여주고 있습니다.
    • https://github.com/onnx/tutorials#end-to-end-tutorials


  • 제 생각에는 ONNX를 사용해서 얻을 수 있는 가장 큰 이점은 바로 ONNX Runtime을 사용하는 것이 아닌가 하는데요, 이에 관해서는 다른 Post로 좀 더 알아보도록 하겠습니다.

  • 이번 Post에서는 ONNX에 대해서 간단하게 알아보았습니다.
  • ONNX의 가장 큰 장점은 Framework간 Model File의 자유로운 변환이며, 다음으로는 ONNX Runtime을 사용할 수 있다는 것이 아닐까 합니다.
  • 글 읽어 주셔서 감사하고, 조금이나마 도움이 되었기를 바랍니다.