深鉴科技DNNDK概览
背景:深鉴科技的DNNDK,是一个SDK端的深度学习开发工具包,能够快速的实现深度学习的硬件化。
目的:了解深鉴科技DNNDK内容。
参考内容:http://www.deephi.com/technology.html
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
将神经网络实现为实体。
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
7.2 源码是否公开?
仅仅公开了主函数和.h头文件,并没有公开驱动和IPcore的源码。
相当于对DPU的定义封装到安装文件和二进制文件中,无法看到源码。