- Published on
ONNXRuntime調査
ONNX モデルの推論エンジン。TensorRT の preview が出ると。この機会にちょっと調べる。
Table of Contents
https://github.com/Microsoft/onnxruntime
https://twitter.com/_tkato_/status/1108516736448393217
ONNX Model Zoo の全てのモデルが動くことを検証したとのこと。
この記事を見たほうが良いです。 Microsoft の ONNX Runtime を速攻レビュー - OPTiM TECH BLOG
onnxruntime 自体はこれを目指して開発。
- Run any ONNX model
- ONNX-ML もサポート(使ったこと無いけど)
- High performance
- バックエンドは execution providers と呼ぶ
- 現在サポート
- MLAS (Microsoft Linear Algebra Subprograms), MKL-DNN, and MKL-ML for computation acceleration.
- ARM Linux/Windows も experimental support
- 今後サポート予定
- Intel MKL-DNN and nGraph, NVIDIA TensorRT
- Cross platform
- Python, C#, C の API。C++もあるぽい
- Linux, Windows, Mac
Usage
簡単
https://microsoft.github.io/onnxruntime/
import numpy
import onnxruntime as rt
sess = rt.InferenceSession("model.onnx")
input_name = sess.get_inputs()[0].name
X = numpy.random.random((3, 4, 5)).astype(numpy.float32)
pred_onnx = sess.run(None, {input_name: X})
print(pred_onnx)
Design and Key Features
https://github.com/Microsoft/onnxruntime#design-and-key-features
https://github.com/Microsoft/onnxruntime/blob/master/docs/HighLevelDesign.md
各プラットフォーム向けのバックエンドは execution provider の I/F を実装する サブグラフに分けて別々の execution provider で実行することも
include/onnxruntime/core/framework/execution_provider.h
その他 1
諸々。execution provider や独自 Op の対応もやればできる。
https://github.com/Microsoft/onnxruntime/tree/master/docs
graph-transformation API によるグラフレベル最適化。
わりと ONNX の Optimizer でもできる気がする。ConvBNFusion でもこんなにコード書くのかーとげんなりしている。
https://github.com/Microsoft/onnxruntime/tree/master/onnxruntime/core/optimizer
その他 2
まだ a+b のコンパイルしかできないみたいだけど、onnxruntime のグラフを tvm に変換する部分もある
onnxruntime/onnxruntime/core/codegen/tvm/
CMake の onnxruntime_USE_TVM で有効(デフォルト無効)
- https://github.com/Microsoft/onnxruntime/blob/85ec13f58df7ecec3c81b46b11ec90fa8902f364/onnxruntime/test/tvm/tvm_basic_test.cc#L173
- test code
- https://github.com/Microsoft/onnxruntime/blob/master/onnxruntime/core/codegen/tvm/tvm_compiler.cc#L71
- onnxruntime::Node の入力を TVM の placeholder に変換。Op(+)部分は決め打ち