转载请注明,本文出自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

ISSCC 2017论文导读 Session 14 Deep Learning Processors,DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN的更多相关文章

  1. ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network

    最近ISSCC2017大会刚刚举行,看了关于Deep Learning处理器的Session 14,有一些不错的东西,在这里记录一下. A 2.9TOPS/W Deep Convolutional N ...

  2. ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network SOC

    最近ISSCC2017大会刚刚举行,看了关于Deep Learning处理器的Session 14,有一些不错的东西,在这里记录一下. A 2.9TOPS/W Deep Convolutional N ...

  3. ISSCC 2017论文导读 Session 14:A 288μW Programmable Deep-Learning Processor with 270KB On-Chip Weight

    A 288μW Programmable Deep-Learning Processor with 270KB On-Chip Weight Storage Using Non-Uniform Mem ...

  4. ISSCC 2017论文导读 Session 14:ENVISION: A 0.26-to-10 TOPS/W Subword-Parallel DVAFS CNN Processor in 28nm

    ENVISION: A 0.26-to-10 TOPS/W Subword-Parallel Dynamic-Voltage-Accuracy-Frequency-Scalable CNN Proce ...

  5. ISSCC 2017论文导读 Session 14:A 0.62mW Ultra-Low-Power Convolutional-Neural-Network Face-Recognition Pro

    A 0.62mW Ultra-Low-Power Convolutional-Neural-Network Face-Recognition Processor and a CIS Integrate ...

  6. ISSCC 2017论文导读 Session 14: A 28nm SoC with a 1.2GHz Prediction Sparse Deep-Neural-Network Engine

    A 28nm SoC with a 1.2GHz 568nJ/Prediction Sparse Deep-Neural-Network Engine with >0.1 Timing Erro ...

  7. 论文笔记(1):Deep Learning.

    论文笔记1:Deep Learning         2015年,深度学习三位大牛(Yann LeCun,Yoshua Bengio & Geoffrey Hinton),合作在Nature ...

  8. ASPLOS'17论文导读——SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Computing

    今年去参加了ASPLOS 2017大会,这个会议总体来说我感觉偏系统和偏软一点,涉及硬件的相对少一些,对我这个喜欢算法以及硬件架构的菜鸟来说并不算非常契合.中间记录了几篇相对比较有趣的paper,今天 ...

  9. 论文阅读 | DeepDrawing: A Deep Learning Approach to Graph Drawing

    作者:Yong Wang, Zhihua Jin, Qianwen Wang, Weiwei Cui, Tengfei Ma and Huamin Qu 本文发表于VIS2019, 来自于香港科技大学 ...

随机推荐

  1. P3932 浮游大陆的68号岛 【线段树】

    P3932 浮游大陆的68号岛 有一天小妖精们又在做游戏.这个游戏是这样的. 妖精仓库的储物点可以看做在一个数轴上.每一个储物点会有一些东西,同时他们之间存在距离. 每次他们会选出一个小妖精,然后剩下 ...

  2. hadoop(四)HDFS的核心设计

    一.hadoop心跳机制(heartbeat) 1. Hadoop 是 Master/Slave 结构, Master 中有 NameNode 和 ResourceManager, Slave 中有  ...

  3. spark(二)

    一.spark的提交模式 --master(standalone\YRAN\mesos) standalone:-client -cluster  如果我们用client模式去提交程序,我们在哪个地方 ...

  4. 【分块,莫队】【P4396】【AHOI2013】作业

    传送门 Description 此时己是凌晨两点,刚刚做了Codeforces的小A掏出了英语试卷.英语作业其实不算多,一个小时刚好可以做完.然后是一个小时可以做完的数学作业,接下来是分别都是一个小时 ...

  5. Python与R的争锋:大数据初学者该怎样选?

    在当下,人工智能的浪潮席卷而来.从AlphaGo.无人驾驶技术.人脸识别.语音对话,到商城推荐系统,金融业的风控,量化运营.用户洞察.企业征信.智能投顾等,人工智能的应用广泛渗透到各行各业,也让数据科 ...

  6. Dozer 对象的"搬运工"

    前言:项目中,经常会遇到各层对象之间相互进行值传递的过程,如在数据据持久层有一持久类EntityA,在视图层可能会变为ViewA,通常情况下,这两个类的属性 名称 .类型都是一致的,   在两个对象传 ...

  7. java项目转换依赖等问题

    最近接手了一个原始的java项目,其实很久没有做了,自从两年前用maven,建立web项目,java project基本上就没有弄个,突然的接手,发现自己好多不足,可能对于一开始就做这样的容易,但是对 ...

  8. Jenkins使用教程之用户权限管理(包含插件的安装)

    在工作的过程中由于分工合作的关系,我们因为工作内容的不同可能分为不同的组织里,但是jenkins默认的权限管理并没有用户组的概念,所以我们需要第三方插件的支持来解决问题.插件:Role-based A ...

  9. Findbugs插件安装与使用

    FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具.FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析.FindBug ...

  10. 【洛谷 P2147】 [SDOI2008]洞穴勘测(LCT)

    题目链接 LCT裸题.. #include <cstdio> #define R register int #define I inline void #define lc c[x][0] ...