XIR には、Op、テンソル、グラフ、およびサブグラフの各ライブラリが含まれており、計算グラフを明確かつ柔軟に表現できます。XIR には、異なる用途向けにインメモリ形式とファイル形式があります。インメモリ形式の XIR はグラフ オブジェクトで、ファイル形式の XIR は XMODEL です。グラフ オブジェクトは XMODEL にシリアライズでき、XMODEL はグラフ オブジェクトにデシリアライズできます。
Op ライブラリには、広く使用されている深層学習フレームワーク (TensorFlow、PyTorch、Caffe) に対応する明確に定義された演算子のセットがあります。1これによって表現能力が強化され、これらのフレームワーク間の違いを解消してユーザーと開発者に統一的な表現を提供するという主要な目的の 1 つが達成されます。
XIR は、Python 環境内で XIR に完全にアクセスすることを可能にする、PyXIR と呼ばれる Python API も提供しています。PyXIR を使用すると、既存の XIR ベースのツールと連携して Python プロジェクトを開発、統合可能です。この統合により、異なる言語間のギャップを埋めるために多大な労力をかける必要がなくなります。
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 セット全体は、ルートと見なすことができます。サブグラフは入れ子にできますが、オーバーラップしないことが必要です。入れ子にされた内側のサブグラフは、外側のサブグラフの子である必要があります。