avatar
tkat0.dev
Published on

ONNXRuntime調査

ONNX モデルの推論エンジン。TensorRT の preview が出ると。この機会にちょっと調べる。

Table of Contents

https://github.com/Microsoft/onnxruntime

https://twitter.com/_tkato_/status/1108516736448393217

ONNX Model Zoo の全てのモデルが動くことを検証したとのこと。

https://github.com/Microsoft/onnxruntime/blob/bdc2bbb2070ee92f7588ebfa4c19fce35e481f9a/TensorRT-ExecutionProvider.md

この記事を見たほうが良いです。 Microsoft の ONNX Runtime を速攻レビュー - OPTiM TECH BLOG

onnxruntime 自体はこれを目指して開発。

  1. Run any ONNX model
    • ONNX-ML もサポート(使ったこと無いけど)
  2. High performance
  3. 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 で有効(デフォルト無効)