ZYNQ学习之路20.DNNDK简介与环境配置

背景:深鉴科技的DNNDK,是一个基于xilinx FPGA的SDK端的深度学习开发工具包,能够快速的实现深度学习的硬件化。

目的:了解深鉴科技DNNDK内容。

一. 简介

DNNDK™ (Deep Neural Network Development Kit)是深鉴科技面向AI异构计算平台 DPU (Deep learning Processor Unit,深度学习专用处理器)自主研发的原创深度学习SDK, 涵盖了神经网络Inference阶段模型压缩、编译优化和高效运行时支持等各种功能需求,为 DPU平台各种深度学习应用开发和部署提供的一套高效全栈式解决方案。

二. DNNDK Framework

DNNDK组成:

  • DEep ComprEssioN Tool (DECENT),深度压缩工具:提供剪枝和定点化运算。
  • Deep Neural Network Compiler (DNNC), 神经网络编译器:将网络算法编译到DPU平台高效运行。运用DECENT后的caffe网络模型作为输入。
  • Deep Neural Network Assembler (DNNAS), 神经网络集成器:将DPU指令流会编程标准的ELF二进制文件
  • Neural Network Runtime (N2Cube), 神经网络运行,运行时支持环境,神经网络的加载,资源管理,调度。N2Cube核心组件包括四个部分 : DPU驱动程序 (Driver),加载器 (Loader)、性能分析器 (Profiler)及编程开发库编程开发库 (Library)。
  • DPU Simulator and Profiler.  深度学习处理单元模拟器。simulator用于验证二进制指令流,只是深鉴科技内部使用,没有对外发布。

三. DPU应用部署

1. 模型压缩 (主机)

2. 模型编译 (主机)

3. DPU编程开发 (主机或开发板)

4. 混合编译 (开发板)

5. 运行 (开发板)

3.1 模型压缩

深度神经网络(DNN,Deep Neural Network)模型通常存在大量的信息冗余,从模型的参数数量到参数的表示精度都存在缩减的空间。依托世界领先的神经网络模型压缩领域研究 成果,深鉴科技研发了深度压缩工具DECENT(Deep Compression Tool),创新性的结合了剪枝(Prune)、量化(Quantization)等一系列压缩技术,在保证基本不损失算法精度的前提下可将网络模型的计算量和规模压缩数倍至数十倍,从而实现DPU平台深度学习应用更优的性能、更高的能效比、更低的系统内存带宽需求。

3.2 DNNDK混合编译模型

编译器前端( Parser)主要处理网络模型的分析与转换,解析输入网络模型的拓扑结构并将其为 DNNC内部与深度学习框架生成的计算图用IR表示。

中端为优化器 (Optimizer),它基于内部IR实施各种编译优化遍 ,包括融合计算图中不同节点间的操作 、高效调度指令 、充分复用 DPU片上数据等 。

代码生成器 (Code-generator)为DNNC编译后端, 主要负责把经过中端优化后的计算图IR映射成为高效运行在DPU上的指令流 。

3.3. DPU编程

DPU Kernel

将神经网络实现为FPGA上实体(可以看作IPcore)。

DPU Kernel可以理解为在DPU平台上部署的平台上部署的一个深度学习网络模型的实 体。每个神经网络对应 一个DPU汇编文件,通过调用DPU运行N2Cube时的dpuLoadKernel()成为一个可运行实体。 DPU的运行时将其加载到特定内存空间并为其分配硬件资源。 然后通过调用dpuCreateTask()将其实例化为多个DPU Task。

DPU Task

DPU Task是DPU Kernel的一个运行实例 。每个DPU Task中处理一个具体的计算任务。 每个DPU Task之间的内存空间相互独立,使得我们可以通过多线程来运行多个DPU Task,以此来提高系统效率和吞吐量 。

DPU Node

DPU Node是DPU上运行网络模型的一个组成部分 。每个 DPU Node都有其对应的输入、出以及其对应的输入、出以及相关参数。 DPU Node依靠其名称来索引,我们可以依靠其名称来索引,我们可以通过 DNNDK提供的 API来获取每个 Node的相关信息 的相关信息 。

DPU Tensor

DPU Tensor是多维数据的集合 ,用来存储网络在运行过程中的数据信息。 我们可以通过DNNDK提供的 API获取某个 Tensor对应的属性,如 Height, Width,Channel以及地址信息。

3.4. 混合编译

3.5. 运行

DPU运行时主要包含四部分:加载器 (Loader)、性能 、性能分析器( Profiler)、库( Library)和 DPU驱动( DPU Driver)。

四. 安装开发环境

下载安装SDSOC 2018.3以上版本的软件。

4.1 安装DNNDK

安装依赖项:

$ apt-get install -y --force-yes build-essential autoconf libtool 
libopenblasdev libgflags-dev libgoogle-glog-dev libopencv-dev 
libprotobuf-dev protobufcompiler libleveldb-dev liblmdb-dev libhdf5-dev 
libsnappy-dev libboost-all-dev libyaml-cpp-dev libssl-dev lsb-core

根据开发平台安装DNNDK主机工具,将下载的DNNDK开发工具解压,在host_x86目录包含了DECENT和DNNC工具,使用脚本进行安装

$ sudo ./install.sh <baord_name>

其中是支持的开发板名,暂且使用ZCU102。

$ sudo ./install.sh ZCU102
Inspect system enviroment...
[system version]
Description: Ubuntu 16.04.6 LTS
16.04
/usr/local/cuda/version.txt not exist !
Begin to install DeePhi DNNDK tools(CPU version) on host ...
cp: omitting directory 'cuda_8.0.61_GA2_cudnn_v7.0.5'
cp: omitting directory 'cuda_9.0_cudnn_v7.0.5'
cp: omitting directory 'cuda_9.1_cudnn_v7.0.5'
Complete installation successfully.

4.2 安装DNNDK for sdsoc

下载DNNDK在SDSOC中的开发包:https://www.xilinx.com/products/design-tools/ai-inference/ai-developer-hub.html#edge

开发包中包含有四个目录:

deephi_dnndk_sdsoc_2018.3
    |-- dnndk_prebuilt
    |   |-- bin
    |   |-- bootfiles_zcu102
    |   |-- bootfiles_zcu104
    |   |-- lib
    |   |-- resnet50
    |   |-- scripts
    |   '-- video
   |-- dnndk_ws
   |   |-- dpucore_zu7
   |   |-- dpucore_zu9
   |   |-- gstsdxfacedetect
   |   |-- gstsdxgesturedetect
   |   |-- gstsdximgclassifier
   |   |-- gstsdxpedestriandetect
   |   |-- gstsdxtrafficdetect
   |   |-- include
   |   |-- lib
   |   '-- resnet50
   '-- host_x86
       |-- install.sh
       |-- models
       '--pkgs

dnnphi_prebuilt:该目录包含预置的可执行文件和脚本用于运行例程:

  • bin:video_cmd工具
  • bootfiles_zcu102: ZCU102的系统文件,包含两个运行在300MHZ的DPU
  • bootfiles_zcu102: ZCU104的系统文件,包含两个运行在300MHZ的DPU
  • lib: DPU v1.3.0的库文件
  • resnet50: 一个resnet50的应用程序
  • scripts: 运行检测样例的脚本
  • video: 输入视频文件。

deephi_ws:DPU例程的工作目录

  • dpucore_zu7: ZU7 FPGA集成DPU v1.3.0的硬件工程
  • dpucore_zu9: ZU9 FPGA集成DPU v1.3.0的硬件工程
  • gstsdxfacedetect: 人脸检测插件工程
  • gstsdxgesturedetect: 视频流姿势检测插件工程
  • gstsdximgclassifier: 图片分类插件工程
  • gstsdxpedestriandetect: 行人检测插件工程
  • gstsdxsegmentation: 场景分割插件工程
  • gstsdxtrafficdetect: 交通工具检测工程
  • resnet50: 使用resnet50模型实现分类的完整工程

host_x86:包含深度压缩工具(DECENT)、深度神经网络编译器工具(DNNC)和训练好的浮点resnet50 Caffe模型。

安装DNNDK包:

运行install.sh文件可以自动安装host_x86中的工具到本地系统中,可以指定需要安装的平台。

sudo ./install

4.3 安装reVISION

根据自己的开发板下载官方的reVISION平台,注意,除了DNNDK中自带的ZCU102和ZCU104开发板外,其他的官方平台都不能直接运行DNNDK。

4.4 安装DPU IP

vivado中默认没有集成DPU IP,需要先从Xilinx官网下载

zcu102-dpu-trd-2018-2-1903.zip

如果要商用必须购买。

参考内容

[1] http://www.deephi.com/technology/dnndk

[2] ug1327-dnndk-user-guide.pdf

[3] ug1331-dnndk-sdsoc-ug.pdf

[4] pg338-dpu.pdf

《基于zynq的FPGA基础入门.pdf》是一本介绍使用Zynq FPGA进行基础入门的教材或指南。Zynq FPGA是一种将ARM处理器和FPGA集成在一起的芯片,结合了处理器的软件优势和FPGA的硬件灵活性。 该教材可能从以下几个方面进行介绍: 首先,教材可能会介绍Zynq FPGA的基本概念和架构。它会解释处理器和FPGA之间的互联关系以及他们各自的功能和优势。读者将了解如何在Zynq FPGA上进行软件和硬件开发,以及如何使用FPGA进行性能加速和工作负载分配。 其次,教材可能会介绍基本的FPGA和硬件描述语言(HDL)知识。读者将学习FPGA的基本概念,如逻辑门、寄存器和时钟等。同时,他们将学习到如何使用HDL(如VHDL或Verilog)来描述和设计硬件电路。这将为读者理解如何使用Zynq FPGA进行自定义硬件设计奠定基础。 接着,教材可能会介绍如何编写和调试FPGA的软件驱动程序。Zynq FPGA具有嵌入式ARM处理器,因此读者将学习如何使用C/C++等编程语言编写驱动程序,以便与外部设备进行通信。他们还将学习调试技巧,以便能够快速解决可能出现的问题。 最后,教材可能会提供一些实际的项目示例,让读者能够应用所学知识。这些示例项目可能包括使用FPGA实现数字信号处理(DSP)、图像处理、嵌入式系统等。通过实践,读者将能够加深对Zynq FPGA的理解,并掌握如何在实际应用中进行开发和调试。 总而言之,《基于zynq的FPGA基础入门.pdf》是一本为初学者打开Zynq FPGA的大门的教材。通过学习该教材,读者将能够了解Zynq FPGA的基本概念、硬件描述语言和软件驱动程序编写,从而为将来的FPGA开发奠定良好的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值