杜克大学教授陈怡然:人工智能芯片设计中的挑战
陈怡然在中国工程院信息与电子工程学部主办、亚洲超算协会和浪潮集团联合协办的2018人工智能计算大会上演讲。
讲者 | 陈怡然(美国杜克大学终身副教授、美国自然科学基金委智能与可持续计算产学合作中心主任)
整理 | 邸利会
●●●
人工智能有三次浪潮,这三次浪潮分别代表了不同算法的突破,丛京生老师讲他经历了两次浪潮,我只经历了一次浪潮。这三次浪潮延续了大概70年的时间,从1940年到现在每次浪潮都伴随着新的算法模型的兴起,但是它不是孤立存在的,同时也伴随着计算能力的不断提高。
2006年,hinton在《科学》上发表了一篇文章,用gpu来进行深度学习的训练,成了这一次浪潮的开端。丛京生老师讲到过去很多年间我们对应的参数的数目不断增加而且增长是指数性的,如果大家把眼光放到技术计算来看,计算技术的发展其实是一个现象。过去五年,如果看到gpu单板计算能力的提高只提高了3~4倍,参数提高了几百上千倍。大概在2014年,吴恩达还在谷歌实验室的时候,我们曾经有过一次交谈,他说我们的参数每年是一个数量级的增长,可芯片的话,因为摩尔定律每年只有2倍的增长,那中间差的5倍怎么弥补?那么,人工智能应用的硬件要求是什么,芯片要怎么去设计才能变得更有效,才能弥补摩尔定律本身的发展和参数上的增加所带来的差别?
冯诺伊曼体系有几个特点,存储和计算是分离的,有控制单元,有内存,有逻辑单元,控制单元可以把数据从内存调到计算单元,计算单元经过处理以后再传回到内存,如果做并行的话就会带来一些问题。计算精度很高,过去有大量的科学计算的应用,非常成功。但是这种单线程性能在冯诺伊曼体系里受制于运行指令之间的数据依赖的影响,当你大规模运行的时候会发现性能会掉得非常厉害,从此我们就做到多核,多核又带来了一些新的问题,比如带宽或瓶颈的问题,在片上计算能力不断提高,但是内存带宽又不断受限,往往不能达到最高的有效的计算。当然还有另外一个问题是功率密度的问题,我最近跟学生开了一个笑话,我上大学的时候攒机器,一个cpu100美元-200美元,现在还是这个价格甚至更便宜了,我当时在中关村买一个风扇只要几毛钱,现在已经上百块,很贵了,做cpu真的还不如做风扇赚得多。
我们发现越来越多的应用需要特殊的芯片进行处理,这种处理的要求是跟传统的cpu和gpu不太一样,虽然这种gpu来做加速,但gpu本身是一个流式的处理器,它可以有效进行向量之间的运算,如果我们用n表示计算的能力,它是按每个n的平方的变化变成n,变成了更小。
从这个角度出发大家用fpga,asic进一步加速计算的过程,比如国内有用fpga进行网络神经的加速设计;谷歌tpu通过脉冲阵列的形式加速神经网络的计算;国内另外一家公司寒武纪设置了专门的指令集,对于不同的向量与向量之间,向量与矩阵之间,矩阵与矩阵之间的运算,进行相应的加速。大家对于不同的架构的应用场景也基本是不一样的。参数集中在计算性能,还有功耗,带宽(表示最终数据的吞吐量)。所有这些参数都是我们关心的问题,它全部都是基于一个特殊的人工神经网络的基于计算的应用。
挑战一,参数越来越多怎么办?
我们的第一个挑战,大容量存储和高密度计算,当神经深度学习网络的复杂度越来越高的时候所面临的问题,你的参数越来越多,该怎么办?
大家常见的一个例子,做剪枝,神经网络里面有大量的冗余,这种冗余是可以被去除的,去除以后基本不会影响输出。
简单的想法就是如果我知道有一个权重,这个权重很小,对于输出没有太大影响。你在去除过程中遇到一个问题,这样的权重在你训练之后是随机的分布在整个向量空间里,当你把它存在一个计算机存储网络的时候它会带来大量的缺失,当你把它随机的全部去除掉是当你读取一个数据之后,下一个数据实际并不是需要的,带来了一些访存的缺失。可以通过软件的方式解决这个问题,软件可以做parking,但这些在我看来不是很聪明的办法,没有解决根本性的问题。
根本性的问题是结构化的剪枝,当去掉这些权重的时候,如果不是一个一个单独的随机的去掉而是一块一块的去掉不会影响到它的存储方式。
这个工作是我们2016年一篇文章《结构稀疏化》,今年年初已经被英特尔的芯片系统支持了。结构稀疏化另外一个问题是什么样的层次下做到稀疏化,可以通过通道所对应的权重整个的去除掉,通过卷积核对应的权重整个去除掉,甚至整层去除掉,最后都会带来结构稀疏化的结果。下面两张图左边是随机去除的结果,右边是结构去除的结果,左边和右边相比可以带来10倍的性能提升,这个工作是我们跟英特尔一块做的,他们自动把这个结果给支持了。
我们在训练的时候需要高精度,但做推理的时候不一定需要高精度,低精度的运算可以极大降低运算的开销,提升运算的效率,又不怎么降低计算的精度。
一个极端的例子是ibm的真本芯片,所有数据和权重都是通过二值来实现的, 1、-1和0,怎么仍然达到比较高的精度呢?传统意义上采用了冗余的设计,如果设计0.75的情况下输入,有3个脉冲就出现了0.75。权重是0.8的时候有5个拷贝,4个是1,1个是0,就得到这个结果。这样的结果是非常浪费的,根本的解决方法不应该是通过冗余的方式来设计,应该通过训练一个简单的二值化网络本身来设计。
我们训练一个网络的时候究竟把它按照一个高精度的网络来训练还是把它训练成所有的精度都尽可能靠近0和1,能够理想的写入二值化的存储空间的结果?答案当然是后者。如果我们能够把训练网络的时候训练成一个二值化网络,我们训练所得一定是把它写入到硬件系统的所得。我们在训练的时候对每个权重加惩罚,使得所有都向0和1靠拢,结果就会变得比较好。我们通过这种方式在ibm达到性能6-7倍的提升,我们所做的就是改掉一行代码。
低精度神经网络训练在分布式系统上的应用。我们有参数服务器,我们有很多copy,这种copy在每个节点上都会用不同的数据来训练,一段之后我们把训练的结果发送到参数服务器再分发下去。当系统特别大的时候会遇到一个问题,它不能持续,大量的通信开销都在数据相互之间的传输,我们怎么降低开销?如果用0、 1、-1来表示效果非常好,但是只表示方向不表示数据。我们实际测试中发现其实所有数据传输,当数据足够大的情况下能满足于某一种分布,泊奴利分布。数据比较大的情况下只需要传大概2到3个值,剩下的只要传方向就可以在另外一个把它整个恢复出来,这样就完全不必要传我们采的样而只需要传分布就可以了,这样的结果是我们在128个节点的gpu集群上可以达到3倍左右的训练加速,性能精确度大概降低了不到2%。
挑战二,面临特定领域的架构设计
因为我们的场景越来越丰富,这些场景的计算需求是完全不一样的。我们的知识,比如图像处理的知识,当我们面临语音的时候它能够重复使用的部分是非常有限的。怎么样通过对于不同的场景的理解,设置不同的硬件架构变得非常重要。
举一个简单的例子,很多人用fpga于图象处理。图像处理不需要考虑时序上的信号传播,当做语音的时候这种是必不可少。所以在2015年的时候我们在fccm(field-programmable custom computing machines),就是fpga一个顶级会议上发布了关于rn的优化,通过内存效率提升,激活函数的近似,可扩展性等,达到了相对于cpu来讲,性能的16倍的提高,功耗降低了60倍,这是比较典型的例子。
不仅如此,我们在算法上也可以做相应的转换。今年我们发布了一篇文章,在语音的lstm(long short-term memory )的模型上,我们直接结构数字化它的隐藏结构,这种隐藏结构的数字化可以达到性能10倍的提升,在一些复杂的技术前提下我们也可以带来20~40%左右的性能提升,精确度做到了大概1%,把它直接用在了硬件的设计上。
最近gan比较热,它可以很有效的通过两个网络相互之间的学习来生成一些现实场景中不存在但是又真实可信的数据,gan的应用在非精度学习上会有大量的应用和突破。我们最近有一篇文章在讲我们体系结构上也可以生成一种新的流水线,能效有很大的提高。
云和终端是不一样的,云端和终端的设计完全不同,云端的时候需要对海量数据进行处理,要进行存储,要进行训练,要高并行,高带宽,终端上首先要采集,然后做终端的推理,还要做一些训练,但是更关心安全性、低能耗、低延时等等的处理。
我们在很多年前开始做移动计算,我们最近开始转移到移动平台的神经网络的训练以及推理上来,去年有一篇文章拿了最佳论文奖,分布式移动端的训练。它有点像移动端的参数服务器,我有一个手机对其他所有手机进行管理和同步,各个手机之间进行并行的训练,1比特的低精度如何运用在上面。一些精确的分析会发现对于卷积层,相对于资源的要求是完全不一样的,比如对于卷积层来说它贡献了绝大多数的计算的开销,对全连接层贡献了绝大多数的存储的开销,在设计的过程中需要考虑这样的差别。如果在做稀疏化的时候,稀疏化之后希望可以对计算本身做一个聚类,这样聚类之后的比较复杂的比较密集的网络可以部署到每一个节点,减少节点之间的相互传输开销。
尽管它是一个中心化的网络,我们可以把它做成一个去中心化的网络或半去中心化的网络,提高它的安全性,降低对于中心节点的应用。你还需要考虑在节点相互之间的传输的开销,因为我们知道对于移动网络来讲,建立网络之间相互的通道是非常昂贵的。我们可以随着节点数目的增长基本可以达到线性的提升,这是不太容易做到的事情。
挑战三,芯片设计要求高,周期长,成本昂贵
从芯片规格设计芯片结构设计、rtl设计、物理版图设计、晶圆制造、晶圆测试封装,需要2到3年时间,正常的时间里软件会有一个非常快速的发展。你看到tpu生产设计的周期和tensorflow的周期,两种不同的gpu版本上tensorflow已经更新了7到8个版本,能够支持在这个周期里新的版本的更新是非常具有挑战性的问题。
其中一个凯时尊龙官网的解决方案是可以通过ai本身去加速芯片的设计。最近我们在跟英伟达做一个合作,通过ai的设计提高版图的效率,我们把不同的ai的算法,像rsvm和比较复杂的神经网络,做一个对比,包括强化学习。这是一个最近非常热门的话题,因为美国最近有一个项目,如果从最开始设计定义到设计完成包括系统级封装的设计,希望是24小时无人值守,这也是一件非常不容易的事情。对一个芯片的周期来讲大概有三年时间,芯片从生产出来到产品消亡,三年里真正挣钱的时间是12-18个月,你怎么在12-18个月里降低成本提高利润率完成这个周期的迭代,ai技术可以做出大量的贡献。
挑战四,架构及工艺面临的挑战
随着我们的工艺不断的提升,从90纳米到10纳米,逻辑门生产的成本到最后变得饱和。我们也许在速度上、功耗上会有提升,但单个逻辑生产的成本不会再有新的下降。这种情况下如果仍然用几千甚至上万个晶体管去做一个比较简单的深度学习的逻辑,那你会发现到最后在成本上是得不偿失的。英特尔一直在说我计划发布多少纳米的生产技术,实际上永远是在延后的,越往下做越贵越不容易。
怎么解决这个问题?忆阻器这个器件有很意思的特点,它的特性非常像人的神经网络里面的神经元。我们神经突触是连接两个神经元,一个神经元产生一个信号之后这个信号就会通过神经突触传到另一个神经元上去,神经元本身会运行放大,倍数是可控的。当你加了一个电压之后那边产生的电流本身的幅度是可调的,有点像两个器械左右连在一起信号会发生变化,整个过程是乘法的过程,这个器件是只有几个纳米的小器件。
通过这个器件可以产生一个交叉互联的结构,这种交叉互联的结构可以非常有效的把向量和矩阵相乘的形式加以变换,进行有效的计算,可以一下子把n×n×n的计算一次性全部算出来,这是非常有效的结果。
过去很多年里我们一直在做这方面的研究,从单个器件一直做到模型、计算的原理,最近我们开始做芯片。这是其中的一些例子,用脉冲来表示数据,到电压忆阻器,一步步走过来,我们希望他们能支持我们这项研究。如果摩尔定律放缓的话,下面我们怎么走只能看新的材料。
当我们有了基于忆阻器的加速芯片之后,做的另外一件事情是怎么把它真的用起来,把它做到新的计算架构里面去。比如我可以把它以加速器的方式做到传统的流水线里面去,相比gpu的平台性能可以提高几十倍,能效提高5到10倍。神经网络只是图计算的一个特例,只是用某种图的形式把这些计算连接起来,所以在图计算上我们可以做相应的处理,不光是做深度优先、广度优先,我们都可以通过新型器件的方式加以计算,性能也有几十倍左右的提升。现在这是非常热门的领域,它的本质是模拟计算,它不是简单的通过传统的科学计算的方式来完成计算,更有效的模拟神经计算。
我们总结一下我们想做的事情,我经常被问到一个问题,哪个平台、哪个技术在未来有可能赢得这场战争,gpu公司还是基于新型器件的初创公司都希望知道答案,因为这意味着几百亿或几千亿的市场。为了回答这个问题,我们总结了5个我们觉得比较重要的ai硬件的特性,包括适应性、性能、功效、可编程性和可扩展性,我们做了一个雷达图进行比较。无论是对于通用硬件平台还是对于asic、可编程器件没有任何一个会在这五种特性里达到最优的结果,都是有一两个比较好或两三个比较好,但另外一个比较差。回答这个问题,如果你问我哪个能赢,我首先要问你要告诉我你的业务场景、你的数据类型、你愿意花的成本和你需要的计算开销等等参数甚至技术本身的成熟度,然后我告诉你哪一种是最适合你的结果,这是我们觉得比较重要的一件事情,当然也包括类脑架构比较新型的计算架构等新技术。
ai芯片变得如此重要,最近我们在美国自然科学资金委的思路下成立三校一起做的新型的可持续的智能计算的中心,我们觉得应用来源于具体的场景,帮助我们理解需要什么样的新的计算平台,需要什么样的技术,我们才能设计更多更好更有效的硬件来为这个目的服务。