DPU(深度学习处理单元)
翻译自pg338-dpu DPU是一个可以配置的计算引擎,用于优化卷积神经网络,广泛应用于加速深度学习推理算法,如VGG,Resnet,OLO,SSD,FPN等。DPU中并行利用度是配置的,可以根据目标硬件平台和应用进行选择。
DPU特点:
(1)一个用于访问配置和状态寄存器的AXI从接口
(2)一个用于访问指令的AXI主接口
(3)支持根据目标设备访问数据的可配置的64位或128位的AXI主接口,
(4)支持每个通道的单独配置
(5)支持可选的中断请求生成
DPU受vitis AI compiler产生的指令驱动。当目标神经网络,DPU硬件结构或者AXI数据宽度发生变化,相关的包含DPU指令的.xmodel文件必须重新产生
DPU位于PL端,并直接连接到处理系统PS中
DPU包括以下几部分:
(1)high-performance scheduler(2)instruction fetch unit(3)hybrid computing array(4)global memory pool
将DPU整合到工程中需要两种流(软件):
(1)Vivado flow:Xilinx Vivado Dedign Suite
(2)Vitis flow:Vitis unified software platform 2020.2
硬件:Xilinx UltraScale+™ MPSoC and Zynq®-7000 devices
first:使用vivado/vitis产生比特流,
then:将比特流下载到目标开发板,并安装相关的驱动
上图展示了使用camera作为输入的系统示例。DPU通过AXI互连来完成深度学习推断,例如:图像分类、目标检测、语义分割等
vitis A开发环境:用于在赛灵思硬件平台实现AI推断,其主要包括一下几部分:
For more information of the Vitis AI development kit, see the Vitis AI User Guide in the Vitis AI
User Documentation (UG1431).
DPU硬件结构:
在启动后,DPU从片外存储器获取指令来控制计算引擎(computing engine)的操作。这些指令是由Vitis Al compiler生成的,在那里会执行大量的优化。
片上存储器用于缓冲输入、中间和输出数据,以实现高吞吐量和高效率。尽可能多的重用数据,以减少外部内存带宽。计算引擎采用深度流水线设计。处理元素(PE)充分利用Xilinx设备中的细粒度构建块,如乘法器、加法器和累加器。
核心端口:
寄存器 space
DPU在PL端实现寄存器。
reg_dpu_reset:控制DPU IP中所有DPU核的重置。
reg_dpu_isr:代表DPU IP中所有核的中断状态
reg_dpu_start:DPU核的开始信号
reg_dpu_inetr_addr:指示DPU核的指令地址
reg_dpu_base_addr:指示外部存储器中每个DPU的输入图片和参数的地址
中断:
DPU产生一个中断来表示任务完成。reg_dpu0_start上的高状态表示DPU core0的DPU任务开始。在任务结束时,DPU生成一个中断,并且reg_dpu_isr中的bit0被设置为1。reg_dpu_isr中活动位的位置取决于DPU核数。例如,当DPU core1完成一个任务而DPU coreO仍在工作时,reg_dpu_isr将维持2’b10。
DPU中断信号的宽度是由DPU核数决定的。当参数DPU NUM设置为2时,则DPU IP包含两个DPU核,dpu_interrupt信号的宽度为2。低位表示DPU core0中断,高位表示DPU core1中断
DPU和PS之间的中断连接在设备树文件中描述,它指示连接到PS的DPU的中断号。如果设备树文件和Vivado分配匹配,任何中断引脚都可能被使用。
DPU 配置
DPU IP提供一些用户可配置的参数,以优化资源使用和自定义不同的特性。不同的配置可以选择DSP片,LUT,块RAM和UItraRAM的使用基于可用的可编程逻辑资源的数量。还有一些附加功能的选项,比如通道扩展、平均池化、深度卷积和softmax。此外,还有一个选项来确定将在单个DPU IP中实例化的DPU核的数量。
A configuration file named arch.json is generated during the Vivado or Vitis flow. The
arch.json file is used by the Vitis AI Compiler for model compilation. For more information of Vitis AI Compiler, see refer to the Vitis AI User Guide (UG1414).
In the Vivado flow, the arch.json file is located at $TRD_HOME/prj/Vivado/
srcs/top/ip/top_dpu_0/arch.json. In the Vitis flow, the arch.json file is located at
$TRD_HOME/prj/Vitis/binary_container_1/link/vivado/vpl/prj/prj.gen/
sources_1/bd/zcu102_base/ip/zcu102_base_DPUCZDX8G_1_0/arch.json.
DPU可以配置一些预定义的选项,包括DPU核的数量、卷积架构、DSP级联、DSP使用和UltraRAM使用。这些选项允许您设置DSP片,LUT,块RAM和UltraRAM使用。DPU的配置界面如下图所示。
RAM Usage:权重、偏差和中间特征在片上存储器中进行缓冲,片上存储器由RAM组成,可以被实例化为block RAM(块RAM)和ultra RAM(超级RAM)。此选项代表使用片上存储器的总量,并且该设置针对DPU IP中所有的DPU核。
channel augmentation:当输入通道的数量远远低于可用的通道并行度时,通道增加是提高DPU效率的一个可选特性。例如,大多数cnn第一层的输入通道是3个,并没有充分利用所有可用的硬件通道。但是,当输入通道的数目大于通道并行度时,则启用通道扩展。
如果一个DPU核要以前速度运行,那么需要满足 IO带宽的峰值。IO带宽主要用于AXI接口
(DPU0_M_AXI_DATA0 and DPU0_M_AXI_DATA1)
时钟和重置
DPU IP中共有3个时钟:寄存器配置时钟、数据控制器时钟、计算单元时钟
register clock(s_axi_aclock)
此模块通过S_AXI接口接收DPU 的配置。可以被配置为与M-AXI 时钟或者独立的时钟。在vitis flow中,shell只为DPU IP提供两个时钟,所以S-AXI时钟必须与M-AXI时钟配置相同。
data controller clock(m_axi_dpu_aclk)
主要功能是调度DPU IP 中的数据流。数据在DPU 和外部存储器的转换发生在数据控制时钟域,所以本时钟应该连接到AXI_MM msater clock
computation clock(dpu_2x_clk)
计算单元模块中的DSP片位于dpu_2x_clk域,该域以两倍于数据控制器模块的时钟频率运行。两个相关的时钟必须对齐。
具体配置见pg338-dpu第38页