国内首款公开发布的深度学习SDK基于深鉴科技DNNDK的DP-8000开发板

人工智能是一个高度复杂的领域,不仅广,而且细,想要入门不易。但是如果你恰好有一个与你技能相匹配的开发平台,那想要切入AI领域无疑会事半功倍。DNNDK(Deep Neural Network Development Kit)是深鉴科技推出的一个面向 AI 异构计算平台DPU(Deep-Learning Processor Unit)自主研发的原创深度学习 SDK, 涵盖了神经网络推理阶段模型压缩、编译优化和高效运行时支持等各种功能需求,基于标准 C/C++高级语言的轻量级编程 APIs开发,是为 DPU 平台各种深度学习应用开发和部署提供的一套高效全栈式解决方案。

深鉴科技深度学习平台堆栈

虽然上面只是很简短的一段话,但里面涵盖的信息量巨大,比如,DNNDK SDK如何使用,有什么限制条件?你知道目前哪些平台可以看做是深鉴科技认可的DPU吗?模型压缩又是怎么回事,会影响到模型的精准度吗?编译优化又是怎么回事?只需要了解C/C++即可?全栈式解决方案是否真正能高效解决AI的开发等等问题?不用着急,这些疑问将会在文章中一一解答。

DNNDK SDK

DNNDK SDK包含两部分,一部分是安装在PC主机上,官方推荐是需要配有英伟达GPU的电脑,主要用于网络模型的压缩;一部分是安装在DPU平台的开发板上,可以实现编译优化以致后续在开发平台上进行边缘推理计算。DPU直译过来就是深度学习单元,其具备一套深鉴科技开发的专门针对深度神经网络算法设计的优化指令集,是为解决深度学习类应用重计算负载需求专门优化和设计的加速计算平台。目前来看,深鉴科技会在今年推出自己的DPU,也就是为这个DNNDK SDK准备的专用平台。

而在此之前,所谓的DPU平台囊括了深鉴科技已经适配过的搭载Xilinx的一些FPGA/SoC系列,与纯FPGA最大的不同是它同时需要具备ARM架构的处理器,可以配套Linux内核系统,而这也是DPU平台的一个硬条件,它需要在Linux系统下安装DNNDK驱动来实现全栈式的解决方案。目前官方认证可以实现DNNDK的平台有: ZYNQ-7020,ZU2, ZU3, ZU9,KU115,差不多全是Xilinx的开发平台。在当下,深鉴科技还没有自己的DPU平台前,想要了解DNNDK SDK只能在Xilinx的平台上测试,笔者手上倒是拿到了深鉴主推的一块基于Xilinx Zynq-7020 SoC的开发板DP-8000,一起来了解下吧。

DP-8000开发板

DP-8000开发板是深鉴科技推出的基于DNNDK开发包的DPU平台,采用Xilinx XC7Z020-2CLG400I SoC,提供了嵌入式开发环境的常用特性,包括DDR3、Flash、USB、HDMI、ETH、SD、CAN、UART、JTAG 、GPIO等。

DP-8000开发板特性:

• ZYNQ XC7Z020-2CLG400I器件

• 1GB DDR3颗粒内存(2片256Mb x 16颗粒)

• 4Gb NAND Flash存储

• USB 2.0接口

• HDMI 1.3发送接口

• 10/100/1000三速自适应网口

• SD卡接口

• CAN总线接口

• UART接口(板卡包含UART转USB PHY,以USB接口对外呈现)

• JTAG接口

• 时钟源(33.333MHz单端给PS,50MHz单端给PL)

• DC-JACK电源插座(5V/2A)

• 电源拨动开关

• GPIO

-- 8个PL使用的LED

-- 一个双排GPIO排针

-- 2个FFC排座

-- 2个启动模式选择拨码开关

• 复位按键

-- SRST_B PS复位按键

-- POR_B PS复位按键

• 启动方式

-- JTAG

-- SD卡

-- NAND FLASH

不清楚官方为何叫DP-8000开发板,笔者手上拿到的开发板实际显示的丝印是DPB7100,板子采用了底板+核心板的结构组合,通过DIMM接口连接。

DP-8000开发板正面布局。

5V的DC电源接口、MircoUSB转UART接口(CP2103USB转串口芯片)、HDMI接口(Silicon Image SSI9134CTU HDMI收发器)

DP-8000开发板一侧的接口,包括千兆以太网口、MicroUSB OTG接口、MicroSD卡座、HDMI、MicroUSB转UART、5V DC JACK

电源开关、32pin扩展接口,其中还包含CAN总线接口。

CMOS FPC接口。

JTAG接口、启动设置拨码开关、复位按键。

DP-8000开发板背面,核心板与底板的组合是通过DIMM接口。

核心板带有散热片,散热片下面是Zynq-7020 SoC,旁边则是以太网收发器、DC/DC降压器、512MB SDRAM。

核心板背面是512MB SDRAM,512MB NAND Flash,所以总共板子搭载了1GB的SDRAM,从好几个做图像模型推理的应用来看,AI对内存的需求还是有要求的,毕竟模型所占空间的大小在那摆着,而做推理是需要将模型加载到内存中执行的。

基本清楚DP-8000开发板的硬件情况后,我们配合深鉴科技的DNNDK深度学习神经网络开发包实际来上电操作瞧瞧。

上电测试

DP-8000 开发板可通过三种模式进行开发:与主机通过串口连接、与主机通过网络连接、开发板独立工作。

原本是想用开发板独立工作的模式进行测试,无奈,试了下发现笔者手上的硬件条件不允许,只能通过串口配置再通过SSH(X11转发)来实现图像推理测试。

主要连接的设备:

• MicroUSB接口用于连接电脑,实现开发板启动信息的打印以及配置网络方便后续使用SSH工具

• 网线连接用于实现SSH,需要用到SSH中的X11转发来实现界面查看

• MicroSD卡用于存放操作系统引导镜像及文件系统

DP-8000开发板上电后可以从串口中看到启动信息,显示的是512MB NAND Flash,1GB RAM,另外也可以通过串口查看系统引导过程中的状态信息(串口需要安装CP2103的串口驱动,网上一找一大把,文章中就不放出来了)。

因为使用的是官方提供的镜像,没想到在串口模式下自动执行登录,从登陆信息可以看到当前使用的 Linux 内核版本为 4.9.0。

OK,上面是关于开发板本身的系统状态,然后就是需要安装深鉴科技的DNNDK SDK开发包,这个开发包可以在深鉴科技官方下载,下载时需要你提交身份信息。

整个SDK包目前显示的是1.10的beta版本,deephi_dnndk_1.10_beta.tar,压缩包大小为536MB,解压缩出来也只有603MB。

在使用这个SDK之前,有必要了解下DNNDK的整个框架,这有助于你了解这个开发包所具备的优势。如下图所示,DNNDK包括了深度压缩工具 DECENT,神经网络编译器DNNC,神经网络汇编器 DNNAS ,神经网络运行时支持 N2Cube,Simulator 和 Profiler 等核心组件构成。简而言之,下图中蓝色部分的这几个东西都很重要,是DNNDK的核心组件。

简单说下,DECENT作为神经网络压缩工具,在保证基本不损失算法精度的前提下将网络模型的计算量和规模压缩数倍至数十倍,从而实现DPU平台下深度学习应用更优的性能、更高的能效比、更低的系统内存带宽需求。换而言之,可以让你降低平台硬件性能,从而也降低了成本,灵活性也更高。

DNNC作为神经网络编译器,将训练后经过DECENT压缩的神经网络模型映射为 DPU 上高效执行地优化指令流。

通过混合编译技术,将上面运行在DPU上的神经网络指令流代码与用户基于C/C++语言开发、运行在CPU上的应用代码一起完成混合编译和链接实现DPU平台深度学习应用的一键式便捷部署。从这里你应该注意到一个重大的发现,那就是虽然我们基本Xilinx FPGA平台,但是你不需要具备FPGA的VHDL或者Verilog开发技术,你只需要会C/C++即可,通过深鉴科技提供的开发包,你完全可以实现在FPGA上实现深度学习应用的一键式便捷部署。

如果对这部分内容感兴趣的朋友,想详细了解其中关键,可以下载深鉴科技提供的DNNDK SDK开发包,里面包含了详细的用户指南,相信可以让你清晰了解这个技术的价值。

回归正题,在深鉴科技官网下载的DNNDK SDK的目录结构如下两张图所示,其中包括了用户指南,针对PC主机的安装包。

针对开发板的安装包和应用例程,而且SDK的安装非常方面,直接通过运行.sh文件执行安装。

在znyq7020_arm文件夹目录下,目前有6个应用,ResNet50、Inception v1、VGG16、Face Detection、Pedestrian Detection、Video Structure Analysis,不出意外,这些已经是经过压缩编译后的新模型了,所以已经从原先比较大的模型中经过裁剪优化过了。

有些遗憾的是官方提供的PC主机的安装包言明需要在搭载英伟达的GPU的电脑上安装使用,笔者没这条件无奈作罢,只能在BP-8000开发板上体验实际的网络模型成果。

虽然提供了6个Demo应用,还是由于硬件条件限制,笔者这里测试了其中几个应用,而且还是通过SSH(X11转发)实现的,在网络延迟上确实有点影响。下面展示的动图都是压缩过的,将就看着吧,至少让我们明确两点,在Zynq7020这点资源上实现图形分类推理还是很了不起,这应该依托于DNNDK工具中的DECENT模型压缩工具以及DNNC的优化结果;另外,实际看推理结果的话,模型压缩对于精准度的影响确实不大,很了不起。

ResNet50网络对图像进行分类,左侧显示的是当前处理图像,右侧控制台输出该图像对应的 Top-5 的分类标签及概率值,并含有本次图像分类计算在 DPU 上的运行时间和效率 (网络的卷积计算 CONV 和全连接计算 FC 分别进行了显示)。

GoogLeNet Inception-v1 图像分类。

VGG16图像分类。

目前DNNDK只提供了对Caffe框架的支持,对TensorFlow和MXNet框架会在后续DNNDK 升级版本中更新。

小 结

在人工智能大潮席卷而来的今天,众多厂商奋不顾身投入其中,但是找准定位,选对方向很重要,目前而言,GPU,FPGA,ASIC仍是人工智能领域中互补的几种方案,谁也没有达到一家独大的地步。深鉴科技推出国内首款公开发布的深度学习SDK确实让人眼前一亮,尤其对于在人工智能大潮下踌躇不知如何选择的厂商或是工程师树立了一盏明灯,DNNDK不仅能在不失精准度的情况下压缩原本处于冗余的神经网络模型,而且向那些原本只专注于C/C++嵌入式开发的用户提供了一套统一开发工具链和 C/C++应用开发接口,用户无需 FPGA 和 Soc硬件开发背景即可便捷快速地开发各种深度学习应用。

当然,所有的平台不可能做到完美,不能满足所有用户的需求,深鉴的DNNDK当然也有其局限性,比如目前的话平台限制的很死,并且受制于FPGA,在能效、性能等方面对比专用的ASIC还是有差距,所以,笔者是非常期待深鉴科技即将上市的自家的AI的AISC芯片,到时是否可以一战成名,拭目以待。

阅读推荐

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180718A0W5M500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券