DPU on PYNQ-Z2系列—0. 前言
什么是DPU?
DPU全称Deeplearning Processor Unit,是清华大学汪玉教授组开发的针对Xilinx FPGA的深度学习加速器,而后被Xilinx收购。
为什么要写本系列博文
DPU的使用说难也难,说简单也简单。DPU的使用难在,真正把DPU用起来需要开发者熟悉FPGA(用于把DPU集成进自己的设计),嵌入式Linux(在Linux中把DPU用起来)以及深度学习相关的知识(使用深度学习框架训练自己的网络,并使用Xilinx的工具链将网络部署到DPU上)。DPU的使用简单在,虽然需要的知识点稍微有点多,但不需要开发者精通这些知识。如果有一份条理清晰、内容完整的文档复现起来难度并不大。
遗憾的是,目前我还没有看到一份条理清晰、内容完整的文档。Xilinx官方虽然提供了一些Tutorial(见https://github.com/Xilinx/Edge-AI-Platform-Tutorials),但是这些文档并没有形成一个完整的链条。具体来说,把一个神经网络部署到DPU上,包含训练网络,编译网络模型,部署网络三个部分,Xilinx的Tutorial分别用不同的案例介绍了这三部分应该如何操作,但是没有一个完整的案例将这三个步骤从头到尾穿起来,而这三个步骤之间是紧密耦合的,因此按照官方的文档想把DPU跑起来需要踩很多坑。
基于上面提到的原因,在本系列博文中我将以PYNQ-Z2为例介绍DPU的使用作为官方Tutorial和Datasheet的补充,目的是让更多的初学者快速地把DPU用起来,至于DPU的一些性能评估等功能不在本文讨论之列。本系列博文相比官方的tutorial最大特点是完整,以ResNet50为案例介绍把神经网络模型在DPU上部署的完整流程,具体内容如下
DPU on PYNQ-Z2系列—1.1 硬件准备—在Vivado中集成DPU IP
DPU on PYNQ-Z2系列—1.2 硬件准备—在Petalinux中编译DPU的驱动及Linux镜像
DPU on PYNQ-Z2系列—2.1 DNNDK使用—搭建DNNDK环境
DPU on PYNQ-Z2系列—2.2 DNNDK使用—使用dnndk量化、编译模型
DPU on PYNQ-Z2系列—3.1 部署DPU—配置运行环境
DPU on PYNQ-Z2系列—3.2 部署DPU—使用DNNDK进行C++编程
DPU on PYNQ-Z2系列—3.3 部署DPU—在Jupyter中调用DPU
本系列博文基于Vivado 2019.1,Petalinux2019.1,DNNDK3.1,DPU1.4, PYNQv2.5。但是理论上其他版本的Vivado和Petalinux同样适用。