XIR 包含运算符 (Op)、张量 (Tensor)、计算图 (Graph) 和子计算图 (Subgraph) 库,可清晰灵活地呈现计算图。XIR 具有存内格式和文件格式,可支持不同用途。存内格式 XIR 为计算图对象,文件格式为 XMODEL。计算图对象可序列化为 XMODEL,而 XMODEL 亦可反序列化为计算图对象。
在 OP 中,有一组精确定义的运算符,可涵盖常用深度学习框架,例如 TensorFlow、PyTorch 和 Caffe1,以及所有内置 DPU 运算符。这样不仅能增强表达式的功能,还能达成核的主要目标之一:消除这些框架之间的差异,并为用户和开发者提供统一的表示法。
XIR 还提供名为 PyXIR 的 Python API,使您能够在 Python 环境中完整访问 XIR。您可凭借 PyXIR 搭配现有 XIR 工具来协同开发和集成 Python 工程。有此集成,就无需再耗费大量精力来弥合不同语言之间的差异。
xir::Graph
计算图 (Graph) 是 XIR 的核心组件。它包含多个重要的 API,例如,xir::Graph::serialize
、xir::Graph::deserialize
和 xir::Graph::topological_sort
。
计算图就像是容器,可保存运算符作为其顶点,并利用“生产者 - 使用者”关系作为边缘。
xir::Op
XIR 中的运算符是 XIR 中的运算符定义的实例或者是从 XIR 扩展的运算符定义的实例。所有运算符实例都只能由计算图根据预定义的内置/扩展运算符定义库来进行创建或添加。运算符定义主要包含输入实参和内部固有属性。
除了预定义的内部固有属性外,运算符实例也能通过应用 xir::Op::set_attr
API 来携带更多外部非固有属性。每个运算符实例都只能包含单个输出张量,但可包含多个扇出运算符。
xir::Tensor
张量是 XIR 中的另一个重要的类。不同于其他框架的张量定义,XIR 的张量仅描述它所表示的数据块。实际的数据块则排除在张量外。
张量的关键属性为数据类型和形状。
xir::Subgraph
XIR 的子计算图是类树层级,将一组运算符分割为多个不重叠的集合。计算图的整个运算符集合可视作为根。子计算图可嵌套,但不得重叠。嵌套的内部子计算图必须为外部子计算图的子集。