背景:深鉴科技的DNNDK,是一个基于xilinx FPGA的SDK端的深度学习开发工具包,能够快速的实现深度学习的硬件化。
目的:了解深鉴科技DNNDK内容。
参考内容:http://www.deephi.com/technology/dnndk
deephi_dnndk_1.10_beta\docs user Guide
目录
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芯片是不一样的。
- 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用于验证二进制指令流,只是深鉴科技内部使用,没有对外发布。
3. DPU应用部署
1. 模型压缩 (主机)
2. 模型编译 (主机)
3. DPU编程开发 (主机或开发板)
4. 混合编译 (开发板)
5. 运行 (开发板)
3.1 模型压缩
DECENT工具
3.2 模型编译
- 编译器前端( 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. 混合编译
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的定义封装到安装文件和二进制文件中,无法看到源码。