ONNX(Open Neural Network Exchange)
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을 사용할 수 있다는 것이 아닐까 합니다.
- 글 읽어 주셔서 감사하고, 조금이나마 도움이 되었기를 바랍니다.