面向 DPU 的编译 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

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

基于 XIR 的编译器会提取经量化的 Caffe1、TensorFlow、TensorFlow2.x 或 PyTorch 模型作为输入。首先,它将输入模型转换为 XIR 格式,作为后续流程的基础。不同框架间的大部分差异由此得以消除,并被转变为统一的 XIR 表示法。随后,它会对计算图应用各种最优化操作,并基于运算是否可在 DPU 上执行来将该计算图细分为多个子计算图。然后根据需要,对每个子计算图应用架构相关最优化。对于 DPU 子计算图,编译器会生成并连接到指令流。最后,将经过最优化且包含 VART 所需的必要信息和指令的计算图序列化到已编译的 XMODEL 文件中。

基于 XIR 的编译器可支持边缘 Zynq UltraScale+ MPSoC 平台上的 DPUCZDX8G 系列、Alveo 平台上的 DPUCADF8H、Alveo HBM 平台上的 DPUCAHX8H(专为高吞吐量应用而最优化)、Versal 边缘平台上的 DPUCVDX8G 和 DPUCV2DX8G 以及 Versal 数据中心平台上的 DPUCVDX8H。您可在 /opt/vitis_ai/compiler/arch 中找到对应这些平台的 arch.json 文件。

使用 VAI_C 编译 Caffe 或 TensorFlow 模型的步骤与先前 DPU 所用步骤并无不同。假定您已成功安装包含 VAI_C 的 Vitis AI 包,并已使用 vai_quantizer 压缩您的模型。

TensorFlow

对于 TensorFlow,vai_q_tensorflow 会生成 PB 文件 (quantize_eval_model.pb)。vai_q_tensorflow 会生成 2 个 pb 文件。quantize_eval_model.pb 文件作为输入文件,供基于 XIR 的编译器使用。编译命令如下。

vai_c_tensorflow -f /PATH/TO/quantize_eval_model.pb -a /PATH/TO/arch.json -o /OUTPUTPATH -n netname

输出与 Caffe 的输出相同。

有时,TensorFlow 模型不包含输入张量形状信息,因为它可能导致编译失败。您可使用 --options '{"input_shape": "1,224,224,3"}' 之类的附加选项来指定输入张量形状。

TensorFlow 2.x

对于 TensorFlow 2.x,量化器会以 hdf5 格式生成量化模型。

vai_c_tensorflow2 -m /PATH/TO/quantized.h5 -a /PATH/TO/arch.json -o /OUTPUTPATH -n netname

当前,vai_c_tensorflow2 仅支持 Keras 函数式 API。

PyTorch

对于 PyTorch,量化器 NNDCT 直接以 XIR 格式输出量化模型。请使用 vai_c_xir 对其进行编译。

vai_c_xir -x /PATH/TO/quantized.xmodel -a /PATH/TO/arch.json -o /OUTPUTPATH -n netname
1Vitis AI 2.5 版起,已弃用 Caffe。如需了解相关信息,请参阅《Vitis AI 2.0 用户指南》。