深鉴科技DNNDK概览

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

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

参考内容:http://www.deephi.com/technology/dnndk

deephi_dnndk_1.10_beta\docs    user Guide

目录

1.概览

1.1 DNNDK基于什么?

1.2   DP-8000开发板

2.   DNNDK Framework

3. DPU应用部署

3.1  模型压缩

3.2 模型编译

4. DPU编程

4.1 DPU Kernel

4.2 DPU Task

4.3 DPU Node

4.4 DPU Tensor

5. 混合编译

6. 运行

7. 重要信息

7.1 板子是否为xilinx的开发板?

7.2 源码是否公开?


1.概览

DNNDK™ (Deep Neural Network Development Kit) - DeePhi™ deep learning SDK, is designed as an integrated framework, which aims to simplify & accelerate DL (Deep Learning) applications development and deployment on DeePhi DPU™ (Deep Learning Processing Unit) platform. (Click DNNDK for more information.)

1.1 DNNDK基于什么?

深鉴科技基于 XILINX FPGA芯片 (包括 ZYNQ-7020,ZU2,ZU3,ZU9, KU115等)实现了多个DPU开发平台(2018年将对外提供深鉴自主研发的对外提供深鉴自主研发的 DPU Soc芯片) ,DNNDK对所有 DPU开发平台向用 户提供统一的工具链和户编程接口 APIs。

1.2   DP-8000开发板

运用zynq7020芯片,开发板与FPGA芯片是不一样的。

深鉴科技DNNDK概览_第1张图片

  • A complete set of solid optimization toolchains, covering compression, compilation and runtime
  • Lightweight standard C/C++ programming APIs
  • Easy-to-use & flat/gentle learning curve

2.   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用于验证二进制指令流,只是深鉴科技内部使用,没有对外发布。

深鉴科技DNNDK概览_第2张图片

3. DPU应用部署

1. 模型压缩 (主机)
2. 模型编译 (主机)
3. DPU编程开发 (主机或开发板)
4. 混合编译 (开发板)
5. 运行 (开发板)

3.1  模型压缩

DECENT工具

深鉴科技DNNDK概览_第3张图片

3.2 模型编译

深鉴科技DNNDK概览_第4张图片

  • 编译器前端( Parser)主要处理网络模型的分析与转换,解析输入网络模型的拓扑结构并将其为 DNNC内部与深度学习框架生成的计算图用IR表示。
  • 中端为优化器 (Optimizer),它基于内部IR实施各种编译优化遍 ,包括融合计算图中不同节点间的操作 、高效调度指令 、充分复用 DPU片上数据等 。
  • 代码生成器 (Code-generator)为DNNC编译后端, 主要负责把经过中端优化后的计算图IR映射成为高效运行在DPU上的指令流 。

4. DPU编程

4.1 DPU Kernel

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

4.2 DPU Task

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

4.3 DPU Node

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

4.4 DPU Tensor

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

5. 混合编译

深鉴科技DNNDK概览_第5张图片

6. 运行

深鉴科技DNNDK概览_第6张图片

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

7. 重要信息

7.1 板子是否为xilinx的开发板?

不是xilinx的开发板,只是包含xilinx的FPGA芯片7z020,开发板是深鉴科技的开发板DP-8000

但是有DPU及相应工具的情况下可以运用xilinx的开发板来实现。

7.2 源码是否公开?

仅仅公开了主函数和.h头文件,并没有公开驱动和IPcore的源码。

相当于对DPU的定义封装到安装文件和二进制文件中,无法看到源码。

你可能感兴趣的:(FPGA,机器学习)