ZYNQ学习之路——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

    其中是支持的开发板名,暂且使用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-h...

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

    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

    最新文章

    最新文章