您的位置:首页 > 运维架构

ISSCC 2017论文导读 Session 14 Deep Learning Processors,DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN

2017-02-12 23:42 525 查看
转载请注明,本文出自Bin的专栏http://blog.csdn.net/xbinworld,谢谢!

DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN Processor for General-Purpose Deep Neural Networks

单位:KAIST(韩国科学技术院,电子工程-半导体系统实验室)

KAIST是ISSCC的常客,一年要在上面发好几篇芯片论文,16年ISSCC上Session 14有一半的paper是出自KAIST的,只能说怎一个牛字了得。去年的关于卷积计算的paper,感觉还比较基础(当然也有一些很不错的小trick,比如把kernel的字典都存在片上RAM中,只传输系数,可以把带宽降低一个数量级以上),今年的这篇可以算是相当完善;

本篇的核心特征:

可配置性:1、 异构架构;2、混合负载划分方法。

低功耗:1、动态自适应的定点计算;2、基于量化表的乘法器。



特点1:两套架构

用于深度学习加速的专用SoC。和CPU、GPU通用GPP的对比如下。作者希望强调分布式存储和计算的优势,但是我感觉本质上还是一个多核+数据交换的结构,只是结构比较简单,核之间不通讯,因为CNN的数据切分后是独立的。



在不同的计算层,其计算和存储的支配地位是不同的,如下图。在卷积层,计算是主要的瓶颈,而在全连接、编解码+LSTM(RNN)层,存储则成为了瓶颈。如果针对单一的网络特征进行设计,则难以满足全盘的要求。



这个观点基本上是业界目前设计的共识,但是个人认为ALEXNET/VGG作为设计依据有一点点out,相信在明年的设计中,resnet和inception这样的网络加速优化会有更多工作。不过拿ALEXNET作为benchmark本身没有问题。

下面是VGG的计算分解,可以看到不同层的计算和参数量区别还是挺大的。



所以作者设计了2套完全独立的架构,由一个卷积加速模块CP+一个RNN-LSTM模块FRP,再加RISC控制器组成系统。



具体来看卷积加速器CP:由4×4个计算核构成,每个计算核内为12×4的PE阵列,通过控制器进行指令驱动计算卷积。数据通过NoC传递。分布式Memory保证PE阵列、计算核的数据需求。通过Aggregation Core将数据进行集中处理(Pool/ReLU/…)并和RNN计算模块进行数据交互。

算一下,CP里总共有16core* 48 = 768 PE单元



或者看这个图似乎更清楚:CP中每一个CORE都有独立的数据和参数Memory,数据Mem到PE GROUP是一个全连。这样架构下,就有多个粒度的配置自由度——cluster,core,group等



特点2:混合式的负载划分(任务切割)

因为采用的分布式数据存储,因此就存在一个数据切分的问题,作者在这方面的考虑分析也比较详细:有数据划分(可以得到最终结果,但是参数每一个都要存全部kernel的channel),channel划分(参数不重复存,但是计算结果是临时结果,还需要再累加起来,因为结果多所以片内存不下——其实是没设计地方存——所以需要写到外面DDR再读回来),混合划分(把两者的优缺点匀一下,最终选择这个)



以VGG-16网络为例,其在不同的层间在image和channel两个方向上分布非常不均匀,因此,单一的负载分类都很难达到好的效果,而mix方式效果相比是最优的。如下图。



特点3:动态on-line调整的定点格式(用于CP)

不同层的数据分布是不一样的,带来的影响就是采用浮点计算会更精确,但是代价更高;采用定点计算会消耗很少的资源,但是只能表征一部分数据。



本文采用的是Layer-by-Layer的动态定点计算,其特征是每层小数点位置是不同的,层内则是固定的。



相比于以往离线处理数据精度,本文采用了在线的动态FL选取方式,可以动态适应当前图片的计算需求,减少WL的字节。从性能上来看,本文的方式对网络精确度影响最小。





特点4:基于量化表的乘法器(用于FRP)

在讲量化表乘法器之前,先要看一下作者用的LUT-based multiplier,这个方法本身很经典,用在这里很合适。



对于FC/RNN层的量化:4bit位宽可以满足绝大多数的参数精度需求。——这个是作者说的,实际广泛效果还是要持怀疑态度的,不过针对4bit的优化本身还是值得的。



因此作者设计了Q-table,对于量化以后的权重,进行预计算,将不同输入和量化后的权重相乘结果存在一张量化表中(Q-Table)。在实际的计算中,根据量化的需求直接从表中读取计算结果。方法如下:



这里特别说明一下,W0-W16本身并不等间距的,所以不用理解为简单的线性量化。——业界有比较多的线性量化,数据本身既可以认为是数据也是index,而本篇的设计中,我们需要知道index才可以知道数据是多少(查表),当然,因为有预计算,所以知道index以后不用再查表得到w,直接把I*w的结果查出来。查表代替了乘法,而乘法因为weight是4bit的关系,case比较少,就用空间换了时间(计算)。

每8个数据I就要更新一次Q-Table,有8个16*16bit的乘法器来更新表,这些是公共乘法计算,计算完之后就只有查表没有乘法了(在FC中)。计算过程:



也是有缺点的——相当于只有8个乘法器在运算,OPS有限。但是因为FC是一个带宽受限问题,所以4bit量化本身显著降低了带宽;查表降低了功耗——因为是16*16,而不是16 * 4。再强调一下:知道4bit index的大小无法直接映射到w本身,所以计算的时候还是16 * 16 bit。效果如下:

还有一点值得关注:就是对于0数据,不取其对应的参数,这样参数带宽进一步降低很多。—— 这一点论文并没有讨论。需要再分析一下,如何做起来方便,如果谁想清楚了,请告知于我。



最后看一下芯片的规格情况:芯片参数:基于65nm工艺,峰值能效高达8.1TOPS/W(4bit 50MHz@0.77v)。可以看到不同电压和主频下,能效差非常多。



最后贴一些不同参数下的评估,以及动态定点效果,还有与其他工作的对比结果。

下图左边的图是说,电压升高才能把主频升上去,50MHZ的时候可以在0.77V下运算;而能耗的升高不是简单线性,可以看到50MHZ的时候比1/4的200MHZ能耗小很多,因此就有了能效的优势。









可以看到在4bit情况下,最高能效相当之惊人(用50M主频,功耗低),受益于低电压带来的功耗降低。看来电压近阈值计算可以显著提升能效比。如果不优化,ALEXNET计算时间会由FC决定,因为带宽太大;而本篇结果看,FC可以跑1200张,原因是带宽很低,所以性能就由CONV部分决定了。

总的来说这是一篇非常好的深度学习加速芯片设计论文。

参考资料

[1]从ISSCC 2017看人工智能芯片的四大趋势 http://www.jiqizhixin.com/article/2264

[2] https://reconfigdeeplearning.com/2017/02/08/isscc-2017-session-14-slides14-2/

[3] DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN Processor for General-Purpose Deep Neural Networks
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐