转载请注明,本文出自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. python函数:字符串函数示例

    优先掌握的操作 #作用:名字,性别,国籍,地址等描述信息 #定义:在单引号\双引号\三引号内,由一串字符组成 name='egon' #优先掌握的操作: #1.按索引取值(正向取+反向取) :只能取 ...

  2. Uoj308【UNR #2】UOJ拯救计划

    分析:比较难分析的一道题,先把式子写出来,ans=∑C(k,i)*f(i),f(i)是选i个颜色的方案数.这个模数有点奇怪,比较小而且是合数,说不定就会有某种规律,如果i >= 3,可以发现C( ...

  3. 011. C++ friend使用

    1.friend 友元 将一个函数定义为friend,可以读取private数据: 显然,friend提供便利的同时,会破坏C++的封装性,因此,建议谨慎使用,朋友多了也许是个困扰. class co ...

  4. css等比例分割父级容器(完美三等分)

    html部分代码: 方法一: 浮动布局+百分比 (将子元素依次左浮动,根据子元素的个数,设定每个子元素的宽度百分比) 方法二:行内元素(inline-block)+百分比 方法三: 父元素  disp ...

  5. 基于JavaSE阶段的IO流详解

    1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有 ...

  6. (转)ios error:unrecognized selector sent to class

    转自:http://blog.itpub.net/12231606/viewspace-1081952/ 今天将app统计的.a静态库包含到一个app应用中,调试时报下面的错误: *** Termin ...

  7. HDU 2827 高斯消元

    模板的高斯消元.... /** @Date : 2017-09-26 18:05:03 * @FileName: HDU 2827 高斯消元.cpp * @Platform: Windows * @A ...

  8. PHP扩展--opcache安装及配置

    简介 Optimizer+ 是 Zend 开发的闭源但可以免费使用的 PHP 优化加速组件,是第一个也是最快的 opcode 缓存工具.现在,Zend 科技公司将 Optimizer+ 在 PHP L ...

  9. 【leetcode 简单】第十八题 爬楼梯

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两 ...

  10. NYOJ 328 完全覆盖 (找规律)

    题目链接 描述 有一天小董子在玩一种游戏----用21或12的骨牌把mn的棋盘完全覆盖.但他感觉游戏过于简单,于是就随机生成了两个方块的位置(可能相同),标记一下,标记后的方块不用覆盖.还要注意小董子 ...