XIR - 3.0 简体中文

Vitis AI 用户指南 (UG1414)

Document ID
UG1414
Release Date
2023-02-24
Version
3.0 简体中文

XIR 包含运算符 (Op)、张量 (Tensor)、图 (Graph) 和子图 (Subgraph) 库,可清晰灵活地呈现计算图。XIR 具有内存中格式和文件格式,支持不同用法。内存中格式 XIR 为图对象,文件格式为 xmodel。图对象可序列化为 XMODEL,而 XMODEL 亦可反序列化为图对象。

在 OP 中,有一组精确定义的运算符,可涵盖常用深度学习框架(如 TensorFlow、PyTorch 和 Caffe1,以及所有内置 DPU 运算符。这样不仅能增强表达式的功能,还能达成核的主要目标之一,即消除这些框架之间的差异,并为用户和开发者提供统一的表示法。

XIR 还可提供名为 PyXIR 的 Python API,以便在 Python 环境内为 Python 用户提供对 XIR 的完整访问权,例如,协同开发以及将用户的 Python 项目与当前基于 XIR 的工具进行集成,而无需执行大量工作来修复不同语言之间的差异。

图 1. 基于 XIR 的流程

xir::Graph

图 (Graph) 是 XIR 的核心组件。它包含多个重要的 API,例如,xir::Graph::serializexir::Graph::deserializexir::Graph::topological_sort

图就像是容器,可保存运算符作为其顶点,并利用“生产者 - 使用者”关系作为边缘。

xir::Op

XIR 中的运算符是 XIR 中的运算符定义的实例或者是从 XIR 扩展的运算符定义的实例。所有运算符实例都只能由图根据预定义的内置/扩展运算符定义库来进行创建或添加。运算符定义主要包含输入实参和内部固有属性。

除了预定义的内部固有属性外,运算符实例也能通过应用 xir::Op::set_attr API 来携带更多外部非固有属性。每个运算符实例都只能包含单个输出张量,但可包含多个扇出运算符。

xir::Tensor

张量是 XIR 中的另一个重要的类。不同于其它框架的张量定义,XIR 的张量只是它表示的数据块的一种描述法。真正的数据块则排除在张量外。

张量的关键属性为数据类型和形状。

xir::Subgraph

XIR 的子图是类树层级,将一组运算符分割为多个不重叠的集合。图的整个运算符集合可视作为根。子图可嵌套,但不得重叠。嵌套的内部子图必须为外部子图的子集。

1 从 VAI 2.5 版起,弃用 Caffe。如需了解更多信息,请参阅《Vitis AI 2.0 用户指南》。