前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >中科院说的深度学习指令集diannaoyu到底是什么?寒武纪4篇论文的解读--下

中科院说的深度学习指令集diannaoyu到底是什么?寒武纪4篇论文的解读--下

作者头像
用户1908973
发布2018-07-25 11:06:12
1.7K0
发布2018-07-25 11:06:12
举报
文章被收录于专栏:CreateAMindCreateAMind

背景:

中科院计算所提出国际上首个深度学习指令集DianNaoYu

2016年3月,中国科学院计算技术研究所陈云霁、陈天石课题组提出的深度学习处理器指令集DianNaoYu被计算机体系结构领域顶级国际会议ISCA2016(International Symposium on Computer Architecture)所接收,其评分排名所有近300篇投稿的第一名。论文第一作者为刘少礼博士。

  深度学习是一类借鉴生物的多层神经网络处理模式所发展起来的智能处理技术。这类技术已被微软、谷歌、脸书、阿里、讯飞、百度等公司广泛应用于计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并取得了极好的效果。基于深度学习的围棋程序AlphaGo甚至已经达到了职业棋手的水平。因此,深度学习被公认为目前最重要的智能处理技术。

  但是深度学习的基本操作是神经元和突触的处理,而传统的处理器指令集(包括x86和ARM等)是为了进行通用计算发展起来的,其基本操作为算术操作(加减乘除)和逻辑操作(与或非),往往需要数百甚至上千条指令才能完成一个神经元的处理,深度学习的处理效率不高。因此谷歌甚至需要使用上万个x86 CPU核运行7天来训练一个识别猫脸的深度学习神经网络。

  陈云霁、陈天石课题组在国际上提出了首个深度学习处理器架构寒武纪。而DianNaoYu则是寒武纪的指令集。DianNaoYu指令直接面对大规模神经元和突触的处理,一条指令即可完成一组神经元的处理,并对神经元和突触数据在芯片上的传输提供了一系列专门的支持。模拟实验表明,采用DianNaoYu指令集的深度学习处理器相对于x86指令集的CPU有两个数量级的性能提升。

  指令集是计算机软硬件生态体系的核心。Intel和ARM正是通过其指令集控制了PC和嵌入式生态体系。寒武纪在深度学习处理器指令集上的开创性进展,为我国占据智能产业生态的领导性地位提供了技术支撑。

早期两篇论文

3. DaDianNao DaDianNao[1]这篇文章是Diana项目[5]的第二篇代表性论文,发表在Micro 2014[6],并且获得了当届的best paper。这篇论文里针对主流神经网络模型尺寸较大的应用场景(想像一下AlexNet这样的模型已经包含约6千万个权重参数),提出了一种具备伸缩性,并通过这种伸缩性可以承载较大尺寸模型的加速器设计架构。”Da”也取得是中文“大”的谐音,用来意指伸缩性。这款加速器与针对嵌入式设备应用场景提出的ShiDianNao[13]不同,针对的应用场景是服务器端的高性能计算,所以在计算能耗比上虽然相比于baseline(GPU/CPU)会有提升,但其设计核心还是专注于高性能地支持大尺寸模型,所以在硬件资源的使用上也远比[13]要更为大方一些。 在我的理解中,这款加速器的核心设计思想包括几个: I. 使用eDRAM[3]代替SRAM/DRAM,在存储密度/访存延迟/功耗之间获得了大模型所需的更适宜的trade-off(参见下表)。

II. 在体系结构设计中以模型参数为中心。模型参数(对应于神经网络中的突触连接)存放在固定的eDRAM存储区域中,需要通过访存操作完成加载的是网络神经元(即对应于神经层layer的input/outout neurons)。这样设计考虑的原因是,无论是神经网络的training还是inference环节,对于于DaDianNao的问题场景,模型的尺寸要远远大于数据尺寸以及网络神经层的神经元数据尺寸,所以将尺寸更大的神经网络模型参数固定,而将尺寸较小的神经元通过访存操作进行加载、通信,可以减少消耗在访存上的开销。此外,模型参数会布署在距离计算部件很近的布局区域里,以减少计算部件工作过程中的访存延时(这也是Computational RAM思想[10]的典型应用)。另一个原因在文章里没有提到,而是我个人结合DianNao系列论文的解读,模型参数在整体计算过程中会不断地被复用,而神经元被复用的频率则并不高,所以将模型参数存放在固定的存储区域里,可以充分挖掘模型参数的data locality,减少片外访存带宽,同时提升整体加速器的性能。 III. 神经网络模型具备良好的模型可分特性。以常用的CNN/DNN这两类神经层为例。 当单层CNN/DNN layer对应的模型参数较大,超过了DaDianNao单片存储极限时(参见下图的一下大尺寸的CNN/DNN layer,具体到这些layer所对应的应用场景,可以参见DaDianNao的原始论文中的参考文献),可以利用这种模型可分性,将这个layer划分到多个芯片上,从而通过多片连接来支持大尺寸模型。想更具体的把握这个问题,不妨这样思考,对于CNN layer来说,每个feature map的计算(以及计算这个feature map所需的模型参数)实际上都是可以分配在不同的芯片上的,而DNN layer来说,每个output neuron的计算(以及计算这个output neuron所需的模型参数)也都是可以分配在不同的芯片上的。

正是基于上面的三个设计原则,在这篇论文中给出了DaDianNao的设计方案。在我的理解中,DaDianNao的逻辑结构与DianNao[11](见下图)是非常相似的:

DaDianNao的主要区别还是在于针对存储神经层输入输出数据的NBin/NBout,存储神经连接参数的SB的组织方式,以及其与核心计算单元NFU的数据交互方式进行了针对大模型的专门考量。 把握DaDianNao的核心要素,也在于理解其访存体系的设计思想及细节。 单个DaDianNao芯片内的访存体系设计的高层次图如下:

左图是单个芯片的高层次图,可以看到,单个芯片由16个Tile组成。右图则是单个Tile的顶层结构图。 每个tile内部会由一个NFU配上4个用于存储SB的eDRAM rank组成。而NBin/NBout则对应于左图eDRAM router所连接的两条棕色的eDRAM rank。 看到上面的高层次图,会感受到在DaDianNao里,SB其实是采用了distributed的方式完成设计的,并不存在一个centralized的storage用于存储模型的参数。这个设计细节的选取考量我是这样理解的: I.eDRAM与DRAM相比,虽然因为其集成在了芯片内部,latency显著变小,但是因为仍然有DRAM所存在的漏电效应,所以还是需要周期性的刷新,并且这个刷新周期与DRAM相比会变得更高[4],而周期性的刷新会对访存性能带来一定的负面影响。所以通过将SB存储拆分成多个Bank,可以将周期性刷新的影响在一定程度上减小。 II.将SB拆分开,放置在每个NFU的周围,可以让每个计算部分在计算过程中,访问其所需的模型参数时,访存延迟更小,从而获得计算性能上的收益。 NFU的内部结构图如下所示:

从上图,能够看到NFU的每个Pipeline Stage与NBin/NBout/SB的交互连接通路。 而针对不同的神经层,NFU的流水线工作模式可以见下图:

注意,上图里红色的“The eDram”代表的就是SB存储。 以上是单个DaDianNao芯片的设计,而单个DaDianNao的片上用于存储模型参数的SB存储仍然有限(见下图,单个芯片里,用于NBin/NBout的central eDRAM尺寸是4MB,而每个Tile里用于SB的eDRAM尺寸则是2MB,每个芯片由16个Tile组成,所以单个芯片的eDRAM总量是2 * 16 + 4 = 36MB),所以为了支持大模型,就需要由多个DaDianNao芯片构成的多片系统。

DaDianNao里的多片互联部分并没有进行定制开发,而是直接使用了HyperTransport 2.0[12]通信IP,在每个DaDianNao芯片的四周(每个芯片会跟上下左右四个邻近的DaDianNao芯片连接)提供了共四组HT 2.0的通信通道,每个通道的通信带宽是在in/out方向分别达到6.6GB/s,支持全双工通信,inter-chip的通讯延迟是80ns。 有了inter-chip的连接支持,DaDianNao就可以支持大尺寸的模型了。不同模型,在inter-chip的工作模式下,通信的数据量也有较大的差异:

能够看到,相较于卷积层(CONV),全连接层(full NN)在多片模式下,通信耗时明显更多。 同样,卷积层的多片加速比也远大于全连接层(对于一些全连接层,甚至在Inference环节,出现多片性能低于单片的情形,这也算make sense,毕竟,inference环节的计算通信比要小于training环节):

具体的细节评估指标,在这里就不再引入,感兴趣的同学可以直接参考原始论文。 References: [1]. Yunji Chen. DaDianNao: A Machine-Learning Supercomputer. Micro, 2014. [2]. S.-N. Hong and G. Caire. Compute-and-forward strategies for cooperative distributed antenna systems. In IEEE Transactions on Information Theory, 2013. [3] eDRAM. eDRAM [4]. Mittal. A Survey Of Architectural Approaches for Managing Embedded DRAM and Non-volatile On-chip Caches. IEEE TPDS, 2014. [5]. A Brief Introduction to The Dianao Project. http://novel.ict.ac.cn/diannao/ [6]. Micro 2014. MICRO-47 Home Page [7]. N. Maeda, S. Komatsu, M. Morimoto, and Y. Shimazaki. A 0.41a standby leakage 32kb embedded sram with lowvoltage resume-standby utilizing all digital current comparator in 28nm hkmg cmos. In International Symposium on VLSI Circuits (VLSIC), 2012. [8]. G. Wang, D. Anand, N. Butt, A. Cestero, M. Chudzik, J. Ervin, S. Fang, G. Freeman, H. Ho, B. Khan, B. Kim, W. Kong, R. Krishnan, S. Krishnan, O. Kwon, J. Liu, K. McStay, E. Nelson, K. Nummy, P. Parries, J. Sim, R. Takalkar, A. Tessier, R. Todi, R. Malik, S. Stiffler, and S. Iyer. Scaling deep trench based edram on soi to 32nm and beyond. In IEEE International Electron Devices Meeting (IEDM), 2009. [9]. DDR3 SDRAM Part Catalog. Micron Technology, Inc. [10]. Computational RAM. Computational RAM [11] T. Chen, Z. Du, N. Sun, J. Wang, and C. Wu. DianNao: a small-footprint high-throughput accelerator for ubiquitous machine learning. Proceedings of the 19th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), Salt Lake City, UT, USA, 2014, pp. 269–284. [12]. HyperTransport. HyperTransport [13]. Zidong Du. ShiDianNao: Shifting Vision Processing Closer to the Sensor. ISCA, 2015. --------------------------------------------------------------------------------------------------------------- 4.DianNao [1]是DianNao项目[2]的第一篇,也是篇开创性论文,发在了ASPLOS 14上,并且获得了当年的best paper。 如果用一句话来提炼这篇论文的核心思想,我想可以这样总结: 结合神经网络模型的数据局部性特点以及计算特性,进行存储体系以及专用硬件设计,从而获取更好的性能加速比以及计算功耗比。 因为我阅读DianNao项目系列论文是按时间序反序延展的,先后读的是PuDianNao[5]->ShiDianNao[4]->DaDianNao[3],最后读的是DianNao这篇论文。所以从设计复杂性来说,ASPLOS 14的这篇论文应该说是最简单的。当然,这样说并不是说这篇论文的价值含量比其他论文低。恰恰相反,我个人以为这篇论文的价值其实是最高的,因为这是一篇具备开创性意义的论文,在科研领域,我认为starter要比follower更有意义的多,这种意义并不会因为follower在执行操作层面的出色表现就可以减色starter的突破性贡献。 因为starter是让大家看到了一种之前没有人看到的可能性,而follower则是在看到了这种可能性之后,在执行操作层面的精雕细琢。几个经典的例子就是第一个超导材料的发现带动了后续多种超导材料的发现,以及刘易斯百米短跑突破10秒之后带动了多位运动员跑入10秒之内的成绩。 在[1]这篇论文里,先是回顾了之前常见的神经网络的全硬件实现方案(full-hardware implementation)——将每个神经元都映射到具体的硬件计算单元上,模型权重参数则作为latch或是RAM块实现,具体的示意结构图如下:

这种方案的优点很明显,实现方案简洁,计算性能高,功耗低。缺点也不难想象,扩展性太差,无论是模型topology的变化,还是模型尺寸的增加都会使得这种方案无法应对。下面针对不同 input neurons/网络权重数 的network layer给出了full-hardware implementation在硬件关键路径延时/芯片面积/功耗上的变化趋势,能够直观地反映出full-hardware这种实现方案的伸缩性问题:

针对full-hardware方案的不足,在[1]里提出了基于时分复用原则的加速器设计结构:

在这个设计结构里,加速器芯片里包含三块片上存储,分别是用于存储input neurons的NBin、存储output neurons的NBout以及用于存储神经网络模型权重参数的SB。这三块存储均基于SRAM实现,以获取低延时和低功耗的收益。片上存储与片外存储的数据交互方式通过DMA来完成,以尽可能节省通讯延时。 除了片上存储以外,另一个核心部件则是由三级流水线组成的NFU(Neural Functional Unit),完成神经网络的核心计算逻辑。 时分复用的思想,正是体现在NFU和片上存储的时分复用特性。针对一个大网络,其模型参数会依次被加载到SB里,每层神经layer的输入数据也会被依次加载到NBin,layer计算结果写入到NBout。NFU里提供的是基础计算building block(乘法、加法操作以及非线性函数变换),不会与具体的神经元或权重参数绑定,通过这种设计,DianNao芯片在支持模型灵活性和模型尺寸上相较于full-hardware implementation有了明显的改进。 DianNao加速器的设计中一些比较重要的细节包括: I. 使用16位定点操作代替32位浮点,这在模型的精度方面,损失并不大

但是在芯片面积和功耗上都获得了明显的收益

II. 之所以将片上SRAM存储划分为NBin/NBout/SB这三个分离的模块,是考虑到SRAM的不同访存宽度(NBin/NBout与SB的访存宽度存在明显差异,形象来说,NBin/NBout的访存宽度是向量,而SB则会是矩阵)在功耗上存在比较明显的差异:

拆分成不同的模块,可以在功耗/性能上找到更佳的设计平衡点。而将访存宽度相同的NBin/NBout也拆分开来的原因则是为了减少data conflict,因为NBin/NBout扮演的还是类似于cache的角色,而这两类数据的访存pattern并不尽相同,如果统一放在一块SRAM里,cache conflict的概率会增大,所以通过将访存pattern相近的数据对应于不同的SRAM块,“专款专用”,可以进一步减少cache conflict,而cache conflict的减少,无论是对于性能的提升,还是功耗的减少都会有着正面的意义。 III. 对input neurons数据以及SB数据局部性的挖掘。用通俗一些的说法,其实就是把输入数据的加载与计算过程给overlap起来。在针对当前一组input neurons进行计算的同时,可以通过DMA启动下一组input neurons/SB参数的加载。当然,这要求精细的co-ordination逻辑保证。另外,这也会要求NBin/SB的SRAM存储需要支持双端口访问,这对功耗和面积会带来一定的影响[6]。 IV. 对output neurons数据局部性的挖掘。在设计上,为NFU引入了专用寄存器,用于存储output neurons对应的partial计算结果(想象一下对应于全连接层的一个output neuron,input neurons太多,NBin放不下,需要进行多次加载计算才能完成一个output neuron的完整结果的输出)。并且会在设计上将NBout用作专用寄存器的扩展,存放partial计算结果,以减少将partial计算结果写入片外存储的性能开销。 整体上的设计思想大体上如上所述。 在实验评估上,可能是因为作为第一个milestone的工作结果,还有很多细节有待雕琢,所以在baseline的选取上与后续的几篇论文相比,显得有些保守,在这篇论文里只选取了CPU作为baseline,并未将GPU作为baseline。具体的评估细节及指标可以直接参看原始论文,我这里不再重复。 References: [1]. Tianshi Chen. DianNao: A Small-Footprint High-Throughput Accelerator for Ubiquitous Machine-Learning. ASPLOS, 2014. [2]. A Brief Introduction to The Dianao Project. http://novel.ict.ac.cn/diannao/ [3]. Yunji Chen. DaDianNao: A Machine-Learning Supercomputer. Micro, 2014. [4]. Zidong Du. ShiDianNao: Shifting Vision Processing Closer to the Sensor. ISCA, 2015. [5]. Daofu Liu. PuDianNao: A Polyvalent Machine Learning Accelerator. ASPLOS, 2015. [6]. What is dual-port RAM. Dual port memory, dual ported memory, Ports, sdram, sram, sdram, memories

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CreateAMind 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档