自定义运算符工作流程 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 简体中文

Vitis AI v2.5 起,支持含自定义运算符 (OP) 的 Pytorch 和 Tensorflow2 模型。自定义运算符的基本工作流程如下所示。

图 1. 自定义运算符工作流程

此工作流程中的步骤如下所示:

  1. 将运算符定义为对 XIR 未知的自定义运算符,然后量化模型。
  2. 编译量化的模型。
  3. 寄存并实现自定义运算符。
  4. 使用 graph_runner API 部署模型。
步骤 3 支持 C++Python 实现并寄存自定义运算符。Vitis AI Library 支持 50 余种常用 OP。您可在 https://github.com/Xilinx/Vitis-AI/tree/v3.5/src/vai_library/cpu_task/ops 中找到常用 OP 源代码。
注释: 如果要实现自定义运算符的加速(PL 或 AI 引擎)函数,请将其设为 CPU 运算符,但在此 CPU 运算符的实现中实现 PL/AI 引擎调用代码。

对于步骤 4,graph_runner API 支持 C++Python。使用 Graph_runner API 部署自定义运算符时,其运行时已最优化,包括在不同 DPU 运算符与 CPU 运算符之间采用零复制技术。它表示在不同层之间无需数据复制即可达成地址共享。

零复制技术支持下列模型结构。

表 1. 零复制技术支持的模型结构
类型 OP 输出 OP 输入 使用零复制
a 单 dpu OP 单 cpu OP
b 单 cpu OP 单 dpu OP
c 单 cpu OP 单 cpu OP
d 单 dpu OP 多 cpu OP
e 多 cpu OP 和多 dpu OP 单 cpu OP
注释: 模型结构类型 a-e 如下图所示。
图 2. 模型结构类型
注释: 零复制技术能否应用于其他模型结构则视情况而定。

以下提供了分别对应于两个模型的示例。

  • 基于 Tensorflow2 的 MNIST 模型
  • 基于 PyTorch 的 Pointpillars 模型