转载请注明,本文出自Bin的专栏http://blog.csdn.net/xbinworld,谢谢!markdown
DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN Processor for General-Purpose Deep Neural Networks网络
单位:KAIST(韩国科学技术院,电子工程-半导体系统实验室)session
KAIST是ISSCC的常客,一年要在上面发好几篇芯片论文,16年ISSCC上Session 14有一半的paper是出自KAIST的,只能说怎一个牛字了得。去年的关于卷积计算的paper,感受还比较基础(固然也有一些很不错的小trick,好比把kernel的字典都存在片上RAM中,只传输系数,能够把带宽下降一个数量级以上),今年的这篇能够算是至关完善;架构
本篇的核心特征:
可配置性:一、 异构架构;二、混合负载划分方法。
低功耗:一、动态自适应的定点计算;二、基于量化表的乘法器。分布式
用于深度学习加速的专用SoC。和CPU、GPU通用GPP的对好比下。做者但愿强调分布式存储和计算的优点,可是我感受本质上仍是一个多核+数据交换的结构,只是结构比较简单,核之间不通信,由于CNN的数据切分后是独立的。ide
在不一样的计算层,其计算和存储的支配地位是不一样的,以下图。在卷积层,计算是主要的瓶颈,而在全链接、编解码+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等
由于采用的分布式数据存储,所以就存在一个数据切分的问题,做者在这方面的考虑分析也比较详细:有数据划分(能够获得最终结果,可是参数每个都要存所有kernel的channel),channel划分(参数不重复存,可是计算结果是临时结果,还须要再累加起来,由于结果多因此片内存不下——实际上是没设计地方存——因此须要写到外面DDR再读回来),混合划分(把二者的优缺点匀一下,最终选择这个)
以VGG-16网络为例,其在不一样的层间在image和channel两个方向上分布很是不均匀,所以,单一的负载分类都很难达到好的效果,而mix方式效果相比是最优的。以下图。
不一样层的数据分布是不同的,带来的影响就是采用浮点计算会更精确,可是代价更高;采用定点计算会消耗不多的资源,可是只能表征一部分数据。
本文采用的是Layer-by-Layer的动态定点计算,其特征是每层小数点位置是不一样的,层内则是固定的。
相比于以往离线处理数据精度,本文采用了在线的动态FL选取方式,能够动态适应当前图片的计算需求,减小WL的字节。从性能上来看,本文的方式对网络精确度影响最小。
在讲量化表乘法器以前,先要看一下做者用的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