XIR には、Op、テンソル、グラフ、およびサブグラフの各ライブラリが含まれており、計算グラフを明確かつ柔軟に表現できます。XIR には、異なる用途向けにインメモリ形式とファイル形式があります。インメモリ形式の XIR はグラフ オブジェクトで、ファイル形式の XIR は xmodel です。グラフ オブジェクトは XMODEL にシリアライズでき、XMODEL はグラフ オブジェクトにデシリアライズできます。
Op ライブラリには、広く使用されている深層学習フレームワーク (TensorFlow、PyTorch、Caffe) に対応する明確に定義された演算子のセットがあります。1これによって表現能力が強化され、これらのフレームワーク間の違いを解消してユーザーと開発者に統一的な表現を提供するという主要な目的の 1 つが達成されます。
XIR は、PyXIR という名前の Python API も提供します。この API により、Python ユーザーは Python 環境内で XIR に完全にアクセスできます。たとえば、異なる言語間のギャップを埋めるために大きな労力を費やすことなく、Python プロジェクトと最新の XIR ベースのツールを統合して協調開発が可能となります。
xir::Graph
グラフは XIR の主要なコンポーネントです。グラフは複数の重要な API (xir::Graph::serialize
、xir::Graph::deserialize
、および xir::Graph::topological_sort
など) を取得します。
グラフはコンテナーに似ており、Op を頂点として保持し、生産者/消費者の関係をエッジとして使用します。
xir::Op
XIR 内の Op は、XIR に内蔵または XIR から拡張された、演算子定義のインスタンスです。すべての Op インスタンスは、事前に定義された内蔵/拡張された Op 定義ライブラリに従って、グラフによって作成または追加されます。Op の定義には、主に入力引数とイントリンシクス属性が含まれます。
Op インスタンスは、事前に定義されたイントリンシクス属性以外に、xir::Op::set_attr
API を適用することにより、より多くのエクストリンシクス属性を提供できます。各 Op インスタンスは出力テンソルを 1 つだけ取得でき、ファンアウト Op は 2 つ以上取得できます。
xir::Tensor
テンソルも XIR の重要なクラスです。ほかのフレームワークのテンソル定義とは異なり、XIR のテンソルは、そのテンソルが表現するデータ ブロックの記述です。実際のデータ ブロックは、テンソルから除外されます。
テンソルの主要な属性は、データ型と形状です。
xir::Subgraph
XIR のサブグラフは、Op の集合をオーバーラップしない複数の集合に分割したツリー状の階層です。グラフの Op セット全体は、ルートと見なすことができます。サブグラフは入れ子にできますが、オーバーラップしないことが必要です。入れ子にされた内側のサブグラフは、外側のサブグラフの子である必要があります。