寒武纪神经网络处理器效能如何 ?

中国科学院计算技术研究所陈云霁、陈天石课题组提出的深度学习处理器指令集DianNaoYu被计算机体系结构领域顶级国际会议ISCA2016(InternationalSymposiumonComputerArchitecture)所接收,其评分排名所有近300篇投稿的第一名。模拟实验表明,采用DianNaoYu指令集的寒武纪深度学习处理器相对于x86指令集的CPU有两个数量级的性能提升。 DianNao是寒武纪系列的第一个原型处理器结构,包含一个处理器核,主频为0.98GHz,峰值性能达每秒4520亿次神经网络基本运算,65nm工艺下功耗为0.485W,面积3.02mm2。在若干代表性神经网络上的实验结果表明,DianNao的平均性能超过主流CPU核的100倍,但是面积和功耗仅为1/10,效能提升可达三个数量级;DianNao的平均性能与主流GPGPU相当,但面积和功耗仅为主流GPGPU百分之一量级。

杨军 从事大规模机器学习系统研发及应用相关工作

95 人赞同

正好最近因为一些需要,在系统性的关注AI硬件加速方面的东西, 也找来陈博士的研究团队最新的ISCA 2016文章《Cambricon: An Instruction Set Architecture for Neural Networks》研读了一下。分享一下我阅读这篇论文之后的一些总结及点评感想(直接插入在正文中,没有刻意区分)。 这篇论文[1]实际上是陈氏兄弟围绕AI加速器(虽然他们主要的工作集中在神经网络硬件加速上,但是也有一些工作加入了对其他机器学习算法的支持,比如Linear Regression/Naive Bayes/KNN/K-Means/SVM/etc.,所以用AI加速器来代指会更为全面)这个领域开展的一系列工作中的一个,也是public出来的最新的工作。 介绍这篇论文,有必要先简要回顾一下陈氏兄弟的相关工作历程。 AI加速器这个概念的始作俑者其实并不是陈氏兄弟,而是Inria[10]的Temam教授。在ISCA 2010上,Temam教授做了一个名为“The Rebirth of Neural Networks”的talk[4]。在这个talk里,Temam首次提出了机器学习加速器的思想,并回顾了07年Larochelle和Bengio他们在Deep Neural Network上的一个评估工作[5],在这个工作里,Larochelle他们在一些识别任务上验证了通过增加网络层数可以获得比shallow model更强大的建模能力。在回顾深度神经网络相比于shallow model更强的建模能力的同时,Temam同时也结合硬件工艺遇到极限,单纯通过工艺进步来获得计算效率提升的方式已经行将走向尽头的这个trend,提出了异构计算和应用定制加速器的思想。这其实也在近几年来体系结构领域顶会的论文主题构成可见一斑[11]。 之后,在12年的ISCA上,Temam提出了第一个AI加速器的设计[9]。随后就启动了Temam与陈氏兄弟的合作项目,这个项目的名字也比较有趣,直接取了电脑的拼音,名之为Diannao项目[3]。Diannao项目的核心实际上就是提出了一系列定制的AI加速器的设计方案。包括第一个加速器Diannao[18],第二个加速器DaDiannao[19](Diannao的多片版本,通过多片设计,可以将较大的模型hold在on-chip memory上),第三个加速器ShiDiannao[20](将AI加速器与传感器直连,从而减少内存通讯的开销),第四个加速器PuDiannao[21](将加速器从只支持特定神经网络扩宽到支持多种常规机器学习算法)。PuDiannao也是Diannao项目的最后一个工作。 随后,陈氏兄弟就提出了Cambricon指令集的思想,试图在更为泛化的层面来完成AI加速器的设计。 在Cambricon之前,Diannao的四代加速器设计大体上走得还是比较纯粹的专用逻辑加速的路子,加速逻辑的设计粒度比较粗,大约在神经网络的layer这个层级,这就限制了加速器的泛化性。网络结构稍有变化,机器学习算法的逻辑有所调整,就可能导致加速器无法支持。而在Cambricon里,则试图针对AI算法,提取出更为细粒度,泛化性更强的building block,在更具原子性的building block上完成硬件结构设计,从而提升了加速器的通用性。 接下来我们就具体看一下这篇论文的细节内容。 本质上指令集的设计实际上是一个体系结构设计的工作,而体系结构设计这个领域从计算机诞生到现在,已经存在着大量的积累和经验可供复用。比如指令集类型的选取(RISC[12] or CISC[13]),访存体系的设计(Cache Hierarchy or Scratchpad Memory[2]),硬件流水线的设计等等。 从我个人的感觉,在这篇论文中所使用的building block并没有原创性的东西,真正原创性的地方在于,作者跨越了多个domain,对于一个比较经典的问题(深层神经网络),使用已经经过验证成熟的building block技术,给出了一个性能/功耗/开发效率 更高的解决方案。真正的核心贡献在于问题的定义和提出,而并不是解决问题的技术细节。 所以,Cambricon的设计原则也比较简洁,总结起来是几点: I. 采用基于load-store访存模式的RISC指令集。具体指令的选取,根据workload的类型进行计算层面的抽象得出。对于深层神经网络来说,主要的计算和控制任务有几种: 向量计算 矩阵计算 标量计算 分支跳转 其中向量计算、矩阵计算、标量计算属于标准的计算工作。形式上看起来与通用处理器没有区别,主要的区别在于细节的支撑上。比如,对于神经网络计算任务中的高频操作,就可以直接提供硬件指令集的支持,典型的例子就是应用于drop-out的Random-Vector指令,用于在一条指令内部为一个向量进行快速随机初始化,以及应用于激活层的Vector-Expotential,用于在一条指令内部为一个向量进行快速的非线性变换(这里稍微展开一些,针对神经网络的计算任务类型,在硬件层面,还可以为指数运算这样的高耗时操作进行特定优化,比如通过高阶Taylor展开来近似逼近指数运算,因为神经网络往往对于一定程度的数值误差表现出较强的tolerance,这也是一系列模型压缩技术得以有效运转的关键基石)。 而分支跳转的逻辑在神经网络计算任务里,并不像常规计算任务那么复杂,所以指令集的设计上并不需要提供丰富的分支跳转逻辑的支持,相应地,在结构设计环节,也可以减少在分支预测上花费的设计&实现精力。 II. 不引入复杂的Cache体系和相关控制逻辑。这跟AI算法的workload类型有强关联,对于AI算法来说,data locality并不强,cache对性能的影响不像常规计算任务那么大,所以把用于实现cache hierarchy的控制逻辑精简掉,对于提升芯片的计算功耗比会有很大的助益。 III. 使用Scratchpad Memory而不是寄存器堆来作为计算数据的主存储。因为AI算法的计算任务与常规的多媒体计算任务不同,指令所操作的数据长度往往是不定长的,所以应用于多媒体指令优化(SIMD)的寄存器堆就不如Scrathpad Memory灵活。 以上就是我总结的Cambricon的核心设计思想。 接下来可以来看一些具体的指令集示例。 Cambrian里所有的指令都是64-bit的长度,这也算是RISC设计思想的体现,可以有效简化指令解码器的负担,有助于减少功耗和芯片面积。 指令集可以划分为四大类,分别是计算类/逻辑类/控制类/数据存取类。 计算类指令主要是针对神经网络的常用计算逻辑提供了指令集的支持。比如矩阵与矩阵的相乘,矩阵与向量的相系,向量与向量的相乘,等等。这类指令的一个特点是,指令所操作数据的长度是不定长的,以灵活支持不同尺寸的矩阵和向量。 逻辑类指令主要是针对向量或矩阵数据,完成逻辑判断操作。比如用于支持max-pooling的条件merge指令就可以对多组feature map,通过条件赋值,完成max-pooling的操作。关于这个操作,下面的图片可能描述得会更形象一些:

控制类和数据存取类指令比较简单,就是提供了分支跳转以及数据的加载和写入(相对于Scratchpad Memory),不再细说。 通过一段Cambricon的代码示例,可能会有助于建立一些比较感性的理解:

上面这段代码,基于Cambricon指令集,实现了一个全连接线性变换层+sigmoid激活层的逻辑。如果有熟悉MIPS指令集[14]的同学,看到上面这段代码应该会感觉非常亲切。 基于这套指令集,文章propose了一个加速器的结构设计原型:

如果有读过量化体系结构教材(《Computer Architecture: A Quantitative Approach》)的同学,看到上面这张结构图的第一反应恐怕会觉得这个结构图比较简单。从文章的介绍来看,这就是一个标准的MIPS指令集的流水线结构实现,由取指、译码、发射、寄存器访问、执行、写回结果、提交七级流水组成,没有支持乱序执行,是否支持多发射从论文中还看不出端倪。为了优化数据存取的信息,在Scratchpad Memory和矩阵/向量计算部件之间通过DMA[15]来加速数据传输的效率。在结构图里,引入了一个L1 Cache,主要是为标量数据的存取提供Cache支持,我的理解,标量数据的data locality会比matrix/vector数据要强,所以对这种场景提供cache支持有助于系统整体性能的保证,而考虑到标量数据上的操作在神经网络中的整体操作里占比不高(见下图),所以cache的控制逻辑也可以适当简化,这是一个设计的trade-off。

指令集和结构设计是Cambricon最核心的部分,剩下的就是Benchmark的选取以及评测指标的内容。 Benchmark方面,文章选取了十类神经网络,分别由MLP(DNN) 、CNN、RNN、LSTM、Autoencoder、Sparse Autoencoder、Boltzmann Machine、RBM、SOM以及Hopfield Neural Network组成。 评估环境的搭建上,部分使用了硬件仿真工具(Cambricon和DaDiannao),部分使用了真实物理硬件(GPU/CPU),性能对比在cycle级对比完成。 评估指标上,主要关注了指令集表达效率(code density)、性能以及功耗这几个方面。具体的实验指标参考下面的图表:

对于硬件设计背景出身的同学,可能还会关心基于Cambricon指令集的芯片layout,也就是每个功能模块在最终芯片上占据了多少比例的实地面积以及对应功耗,从下面这张图来看,无论是从芯片面积占比上还是从功耗占比来看,矩阵部分都是大头,这也比较符合我们对芯片上运行的workload的直觉理解。

最后再说说我的一些感受。从体系结构设计的角度来看,这篇文章并没有提出多少突破性的东西,在文章中作者也专门提到了这一点(在文章的section IV.里讲到并没有使用到一些新兴的技术,比如最近在最新款的Nvidia GPU里用到的3d stacking技术[16]),恰恰相反,从体系结构设计的角度来看,文章中提到的技术都可以说是一些“大路货”的技术,无论是指令集的设计,还是微结构设计使用的大体上都是10年以前的技术方法。真正有创新性的东西,还是在于这篇文章找到了一种开创性解决问题的方式,横跨了多个domain,使用传统的经典技术,针对日益popular的神经网络应用,提出了一种在能耗比、灵活性、性能上获得极佳trade-off的解决方案。这是一种框架性的贡献。在这个框架下,实际上可以在每个局部模块不断细化,加入更为复杂,新兴的技术。比如存储部分为了获取更好的访存性能,就可以将新近的存储技术引入。另外,在指令集设计上,可以加入对workload里更多类型逻辑的支持,比如受限的计算精度支持。在微体系结构上,是否可以结合特定的计算任务类型,在指令的调度部分做更多的考究,来更为高效地支持更为复杂的网络连接(比如Relay Back-propagation[17]这样的多路连接的网络结构)。 这可能才是这篇文章能够获得ISCA 2016最高peer review score的原因。 References: [1]. Shaoli Liu. Cambricon: An Instruction Set Architecture for Neural Networks", in Proceedings of the 43rd ACM/IEEE International Symposium on Computer Architecture. ISCA, 2016. [2]. Scratchpad Memory. Scratchpad memory [3]. A Brief Introduction to The Dianao Project. http://novel.ict.ac.cn/diannao/ [4]. Olivier Temam. The Rebirth of Neural Networks. https://hal.inria.fr/file/index/docid/535554/filename/ISCA2010web.pdf. ISCA, 2010. [5]. Hugo Larochelle. An Empirical Evaluation of Deep Architectures on Problems with Many Factors of Variation. ICML, 2007. [6]. ISCA 2016有哪些看点. ISCA 2016 有哪些看点? - 杨军的回答 [7]. Research of Olivier Temam. http://pages.saclay.inria.fr/olivier.temam/homepage/research.html [8]. Intel Labs. From a Few Cores to Many: A Tera-scale Computing Research Overview. Intel Whitepaper, 2006. [9]. Olivier Temam. A Defect-Tolerant Accelerator for Emerging High-Performance Applications. ISCA, 2012. [10]. Inria - Inventors for the digital world [11]. ISCA 2016有哪些看点. ISCA 2016 有哪些看点? - 杨军的回答 [12]. RISC. Reduced instruction set computing [13]. CISC. Complex instruction set computing [14]. MIPS Instruction Set. MIPS instruction set [15]. Direct Memory Access. Direct memory access [16]. Jishen Zhao, Guangyu Sun, Gabriel H. Loh, and Yuan Xie. Optimizing GPU energy efficiency with 3D die-stacking graphics memory and reconfigurable memory interface. ACM Transactions on Architecture and Code Optimization, 2013. [17]. Li Shen. Relay Backpropagation for Effective Learning of Deep Convolutional Neural Networks. Arxiv, 2016. [18]. Tianshi Chen. DianNao: A Small-Footprint High-Throughput Accelerator for Ubiquitous Machine-Learning. ASPLOS 2014. [19]. Yunji Chen. DaDianNao: A Machine-Learning Supercomputer. Micro, 2014. [20].Zidong Du. ShiDianNao: Shifting Vision Processing Closer to the Sensor. ISCA, 2015. [21]. Daofu Liu. PuDianNao: A Polyvalent Machine Learning Accelerator. ASPLOS, 2015.

原文发布于微信公众号 - CreateAMind(createamind)

原文发表时间:2016-11-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据文摘

脑洞 | 哈佛教授公开R语言源码,教你用R制作gif动图

1812
来自专栏数据派THU

带你用4行代码训练RNN生成文本(附资源)

本文共1400字,建议阅读6分钟。 本文介绍仅需几行代码就能训练出任意大小和复杂度的文本的神经网络文本发生器。

1212
来自专栏大数据文摘

边玩边入门深度学习,我们帮你找了10个简易应用demo

4253
来自专栏LET

精度,Precision

2547
来自专栏量化投资与机器学习

我用Facebook开源神器Prophet,预测时间序列基于Python(代码+论文)

Prophet是Facebook 开源一款基于 Python 和 R 语言的数据预测工具。Facebook 表示,Prophet 相比现有预测工具更加人性化,并...

4102
来自专栏数据派THU

这5个机器学习项目你不可错过!(附代码)

本文共2299字,建议阅读6分钟。 本文将给大家介绍五个十分可怕但还鲜为人知的机器学习项目,囊括了一些潜在的机器学习的新想法。

1033
来自专栏媒矿工厂

HDR关键技术:主要标准介绍(续)

前文我们已经对HEVC的HDR编码优化技术和HDR/WCG相关的整体编码方案做了介绍,本文总结几种具有代表性的技术方案,对业内常用的几个HDR分发标准做简要梳理...

4131
来自专栏机器学习人工学weekly

机器学习人工学weekly-2018/4/1

注意下面很多链接需要科学上网,无奈国情如此 1. TensorFlow开发者峰会昨天召开,我觉得有趣的演讲有 - TF Hub ("一键"transfer l...

3378
来自专栏量子位

火爆GitHub:100天搞定机器学习编程(超赞信息图+代码+数据集)

但怎么想是一回事,怎么做往往是另一回事。学习和健身一样,不少人都停留在口头上,有各种借口不曾付诸实施。

1350
来自专栏pangguoming

JAVA智能设备基于OpenGL的3D开发技术 之AABB碰撞检测算法论述

摘要:无论是PC机的3D还是智能设备应用上,碰撞检测始终是程序开发的难点,甚至可以用碰撞检测作为衡量3D引擎是否完善的标准。现有许多3D碰撞检测算法,其中AAB...

44010

扫码关注云+社区

领取腾讯云代金券