Open Neural Network Exchange
Open Neural Network Exchange Intermediate Representation (ONNX IR) はONNXの基本データ型と計算グラフを定義するサブ仕様である。ONNX IRは計算グラフを構成する Model, Graph, Node 等の要素、入出力 Tensor, Sequence, Map およびデータ FLOAT, INT8, BFLOAT16 等の基本データ型を定義する。2021-12-22現在の最新バージョンは version 8 である。
ONNX IRが定義する要素として以下が挙げられる。
Graph: 計算グラフを表現する要素。Graph入出力を指定するinput/initializer/output、計算ノード群を指定するnode、メタデータを収納するname/doc_string/value_info、の属性をもつ。
Node: 計算ノードを表現する要素。Node入出力を指定するinput/output、演算子とそのパラメータを指定するdomain/op_type/attribute、メタデータを収納するname/doc_string/value_info、の属性をもつ。
すなわちGraphに収納された各Nodeが入出力をもった演算 (例: Conv) になっており、Node/Graph入出力名に基づいてNode群がグラフ構造を取っている。
ONNX Runtime (略称: ORT) は様々な環境におけるONNXモデルの推論・学習高速化を目的としたオープンソースプロジェクトである。フレームワーク・OS・ハードウェアを問わず単一のRuntime APIを介してONNXモデルを利用できる。またデプロイ環境に合わせた最適化を自動でおこなう。ONNX Runtimeは設計方針としてアクセラレータ・ランタイム抽象化とパフォーマンス最適化の両立を掲げており、ONNXモデルの自動分割と最適アクセラレータによるサブモデル実行によりこれを実現している。
ONNX Runtimeがサポートする最適化には以下が挙げられる。
モデル量子化: 8-bit Model Quantization
グラフ最適化: Basic (不要ノード除去・一部のop fusions), Extended (op fusions), Layout (NCHWc Optimizer) の三段階
対応するバックエンドに関しては#ONNXバックエンドを参照。