2020 DAC-SDC亚军作品开源与技术访谈

本文转载自:PYNQ开源社区 微信公众号

感兴趣者可与 pynq_china@xilinx.com 联系,共同合作拓展项目。

本文内容以采访上海科技大学哈亚军教授,姜伟雄博士整理所成。

关于DAC-SDC比赛详细情况,请参考上一篇文章:快讯|中国团队包揽顶会DAC-SDC竞赛冠亚军

来自上海科技大学的SkrSkr队脱颖而出获得亚军。作品以2019年DAC-SDC的双料冠军iSmart3的开源方案为基础,进行了量化算法、加速器以及系统三个层级的优化,实现了速度x2.4,精度+1.5%,能效x1.4。设计完全由HLS实现,本着开源精神的传承,该设计也已开源,点击:https://github.com/jiangwx/SkrSkr 即可获得Github链接。

比赛背景

本次比赛的任务是在Xilinx Ultra96v2平台上实现高速、高准确率且低功耗的飞行器高空目标检测深度学习算法,评价指标综合考虑速度、精度以及能耗。比赛所用的训练与测试数据集均由深圳大疆公司提供。DAC系统设计竞赛不仅考察参赛队伍的算法能力,还考察参赛队伍硬件设计以及系统设计的能力,最终完成的作品是一个接近可以落地的解决方案而不只是算法。

参赛队伍要完成设计网络,量化网络,设计加速器,构建完整系统四个步骤的工作。其中设计网络部分需要确定采用哪些类型的layer、输入输出通道数、残差连接、级联等。设计加速器部分需要考虑计算引擎的架构、计算引擎复用策略、量化策略、并行度、乒乓操作、数据搬运以及重用等。此外设计网络,量化网络以及设计加速器这三个环节又是相互影响的,任何一个环节的小改动都会牵扯到其他两个环节,使得整个比赛的设计空间非常大,对参赛选手是一个全方位的考验。

上科大SkrSkr设计访谈

根据比赛规则,我们发现精度对最终结果的影响更大,具体来说精度提升10%最终得分会直接增加10%,但是速度提升10%最终结果只能提升约1%,因此我们决定基于19年DAC-SDC iSmart3队的开源方案SkyNet做优化,SkyNet是目前在DAC-DJI数据集上精度最高的网络,我们希望在保证精度基本不变的条件下尽可能地提升速度。

在网络结构确定的情况下,在算法层面能够对速度产生影响的就只有量化了。iSmart3将浮点型的权重和特征图分别量化到11bit和9bit定点数,考虑到结构与SkyNet相似的MobileNet可以接近无损地量化到8bit,我们认为SkyNet的量化方式有进一步的优化空间。为此,我们参考了ICCV2019的一篇论文Data-Free Quantization Through Weight Equalization and Bias Correction并在此基础上做了一些改进。我们的量化方式有三个比较大的亮点,

  • One Shot:不需要校准集也不需要finetune即可完成量化,整个量化过程可以在10s内完成。
  • 纯整型:在神经网络前向过程中PL部分完全没有定点型以及浮点型操作,计算边框必须的浮点型操作转移到了CPU上。
  • 无损:我们将SkyNet的权重量化到int6,特征图量化到uint8,在52K的测试集上取得了73.1%的精度,与原浮点型模型完全一致,如表1所示。注:将权重分别量化到int6,int7,int8在sample1k数据集上均取得了比较好的精度,我们最终提交了int6版本,所以只有该版本在包含52K张图片的测试集上经过验证。
  • 完成神经网络量化之后,我们首先完成了加速器的基准设计,基准设计保留了iSmart3加速器的整体架构,修改了数据位宽、总线位宽以及激活函数以匹配我们的量化方式。由于FPGA目前采用的AXI总线数据位宽必须是2的指数次,因此iSmart3必须将9bit特征图和11bit权重都扩展到16bit进行传输,而我们则只需要将6bit权重扩展到8bit,因此实际数据传输量降低一半,数据总线的位宽也由512bit降为256bit。得益于更低的数据位宽(w11a9 vs w6a8)和更友好的计算模式(定点数vs整型),我们的资源利用率相比iSmart3显著降低,如表2的第三行所示,为我们优化加速器提供了空间。为了进一步提升资源利用率,我们将计算引擎的并行度提升了一倍并将所有模块的Iteration Interval都优化到了理论最优。经过上述三个优化,加速器的时钟周期数从19.42M降到10.58M,片上资源利用率得到了而更充分的利用,如表2第四行所示。

    表3给出了各优化手段对加速器帧率(而非系统帧率)的影响,iSmart3的加速器运行在215MHz时可以达到28fps,我们的基准设计在215MHz下可以达到36fps,原因是加速器的实际数据传输量相比iSmart3减半。我们的基准设计最高可以运行在390MHz达到48fps,频率能够提升的主要原因是整个加速器的关键路径在数据总线上,数据总线位宽从512bit降到256bit使得加速器的关键路径长度减半。计算引擎的并行度翻倍后加速器能够正常运行的最高时钟频率降为333MHz,帧率提升到62fps。最后经过时钟周期优化,我们的加速器可以达到67fps。

    在优化加速器的同时,我们还对系统进行了软硬件协同优化。iSmart3将4张图片打包成一个batch进行计算以增加数据重用的机会避免片上内存的浪费。根据我们的测试,在CPU上将4张图像水平拼接在一起会占用大量DDR带宽,降低系统性能。因此,我们进行了软硬件协同优化,将图像拼接从CPU转移到了可编程逻辑,图像预处理时间从80ms/batch降到20ms/batch。最后,我们优化了任务的调度,使用两个线程进行图像预处理,最终得到了60fps的系统帧率,如表4所示。得益于系统帧率翻倍,系统运行时间减半,我们的能量消耗相比iSmart3下降了约40%。在Ultra96v1平台上我们的设计相比iSmart3速度x2.4,精度+1.5%,能效x1.4。本次比赛采用的Ultra96v2只能让加速器运行在300MHz,因此最终得到了53fps。

    比赛感想

    我们想首先感谢UIUC iSmart3团队全面、详细的开源,iSmart3不仅提供了设计硬件高效网络的全新思路,而且提供了一个非常完整的HLS案例,包括DNN加速器的架构设计、计算引擎设计以及在PYNQ框架里直接调用HLS IP的模板,从中我们获益良多。因此我们的代码也已经开源在github.com/jiangwx/SkrSkr,期待与同行们更多地交流、探讨。

    同时在PYNQ开源框架中调用加速器可以极大地提升开发上层应用的效率,借助PYNQ提供的Python环境,我们可以直接调用诸如OpenCV、PIL、numpy以及MultiProcess等库进行系统构建并快速迭代,尝试各种优化手段。在iSmart3的基础上,我们打通了在SDSoC中生成的bitstream直接在PYNQ框架中调用的流程,进一步提升开发效率。

    SkrSkr团队合影,从左至右哈亚军,姜伟雄,刘心哲,孙豪,李睿

    SkrSkr队的四名成员全部来自上海科技大学哈亚军教授组可重构与智能计算实验室,分别是19级博士生姜伟雄,18级硕士刘心哲、孙豪以及16级本科生李睿。哈亚军教授现任IEEE期刊TCASII的Deputy Editor-in-Chief,过去的一年里曾指导SkrSkr队员在如TCASII、DAC、ISCAS等国际高等级期刊和会议发表文章,并获2019年ICCV低功耗计算视觉竞赛亚军。欢迎有志于可重构计算、低功耗电路设计以及机器人和无人驾驶智能计算的同学加入上海科技大学可重构与智能计算实验室!

    最新文章

    最新文章