0
雷锋网 AI 科技评论按:AI研习社系列公开课持续进行中,高水平的嘉宾、精彩的分享主题、宽广的学术视角和敏锐的行业理解,肯定会让每个观众/读者都有所收获。
深度学习、体系结构、数据规模的共同发展促进了人工智能行业的繁荣。在通用架构之外,深度学习处理架构已经经历了三代的发展,从计算优化、存储优化,到结合Deep Compression的稀疏化处理架构。在10月17日的AI研习社公开课中,我们请到了深鉴科技姚颂,为大家讲解深度学习处理架构的演进过程,以及几个核心问题是如何逐渐解决的。雷锋网 AI 科技评论把这次公开课的主要内容整理如下。
姚颂,深鉴科技联合创始人、CEO。毕业于清华大学电子系,斯坦福大学研究访问学者。曾任清华电子系科协主席,本科期间发表多篇论文。入选2017福布斯亚洲30位30岁以下精英榜。
姚颂公开课的主题是“深度学习处理架构的演进”,此次公开课主要突出演进中思路的变化,具体技术细节可以阅读提到的论文。还有几位北大的同学来到姚颂的公开课现场听这次直播。
姚颂首先简单介绍了一下深鉴科技。深鉴科技的英文名DeePhi是Deep Learning和Philosophy的结合,这也是他们的slogan“Discover the philosophy behind deep learning” 所传达的。
深鉴科技的创始人为汪玉副教授、韩松博士、单羿博士以及姚颂本人。
深鉴科技要做的事情是“打造新一代深度学习平台”,从算法、软件、硬件、系统形成整体的解决方案。这天凌晨深鉴科技也刚刚发布了中国首套深度学习开发SDK“DNNDK”,可以在深鉴科技官网deephi.com/dnndk下载试用以及提出意见。
几位创始人在创立深鉴科技前做了许多研究工作,比如韩松的NIPS2015文章“Learning both Weights and Connections for Efficient Neural Networks”。而后,这篇文章的改进工作“Deep Compression”拿到了ICLR2016的最佳论文。
针对压缩后的稀疏神经网络,深鉴科技做了许多硬件结构设计的工作,包括EIE和ESE。他们发现,稀疏化可以极大地降低带宽需求和系统功耗,同时提高性能。ESE的论文就拿到了FPGA2017的最佳论文。
进入知识讲解。姚颂介绍道,现在虽然人工智能是个热门概念,但很多人误以为“人工智能等于深度学习”,但其实人工智能的范围大于机器学习,机器学习的范围又大于深度学习。人工智能由三方面共同组成,算法、数据以及计算平台,这个领域的上升也是三方面技术的共同发展合力造成的。
神经网络的概念并不新颖了,Yann LeCun在1998年就提出了MNIST数据集和CNN。只是当时的计算平台很弱,所以只能是小图、黑白两色,数量也只有数万张。
2012年时,Google X启动了“猫脸识别计划”,吴恩达和Jeff Dean用了1000台分布式服务器和一万六千个CPU。同期的AlexNet只需要1台服务器、2个GPU就训练出来了。
GPU确实给整个行业带来了很大的变化,那么GPU真的就足够了吗?姚颂的答案是:它确实很好,但它还不够。
姚颂针对应用(inference推理)场景介绍了他的观察。比如在安防监控、数据中心、机器人设备上都使用GPU的话,功耗和延迟都会是严重的问题。所以许多公司都在研究新一代的深度学习平台。
那么这样的状况是什么问题导致的呢?就是:神经网络既是计算密集的任务,又是存储密集的任务。
图中是一些较为老旧的神经网络所需的计算量。最新的ResNet50做一次前向的推理就需要7GOPS,VGG16大约需要30GOPS。相比之下,手机的ARM处理器的计算能力典型值是10GOPS。所以这样的网络是没办法在手机端运行的,即便只是推理任务。而当前的许多处理器也都没办法支持如此大规模的并行计算。
姚颂用这张图介绍“存储密集”的意思,图的意义可以理解为网络中每个连接的权值被重复使用的次数,从几十次到几百次不等。所以模型对内存吞吐量的要求会比模型自身的大小大几百倍,甚至更多。对缓存读取提出高要求,也就意味着系统极易产生高延迟。
存储密集还带来一个问题,就是存储带来的功耗会比片上计算高出2到3个数量级。这也是GPU这样的(片上缓存很小所以需要读取内存的)平台很难降低功耗的原因。
如何解决这些问题呢?姚颂把业内提出的解决方案分为了三个阶段:
1. 优化计算引擎,增加并行度
2. 并行度已经很高之后,优化存储系统
3. 最近一年中,算法和硬件分开的情况下已经达到了优化的极限,所以开始软硬件协同设计,利用压缩和稀疏化达到整体最高效的方案。
第一阶段在2009~2014年之间,姚颂认为这个阶段作出了最大贡献的是Yann LeCun教授。作为系统科学家,他做了很多算法之外的事情。
这个阶段的一个典型方案是Yann LeCun小组提出的NeuFlow,设计思路是数据流的处理。他们设计了阵列式、可重构的数据流引擎,阵列中的不同单元同时进行不同的计算,显著提高了计算资源的利用率。
在场景解析的测试中,他们使用了V6 FPGA芯片,得到了非常高的峰值性能(Peak GOPs)同时,也得到了很高的实测性能(Real GOPs)。同期GPU的实测性能要远低于峰值性能。
但他们没有注意到的是,当时的神经网络都还是很小的,所以存储的问题不那么明显。
NVIDIA同样也以解决这个阶段的问题的思路,不断更新推出着具有越来越多的CUDA core的GPU。
随着模型规模的增大,存储的问题开始显现。
这个阶段的一个典型方案是中科院的“电脑”系列。
“根据Am-dahl定律,虽然计算单元是重要的一步,但低效的内存传输很可能会抵消加速器在性能和价格方面带来的提升”,所以他们把存储作为了设计中首要考虑的因素。在分析了神经网络存取内存的规律后,他们发现全连接层的向量乘矩阵运算和卷积层的输入输出feature map都有很多部分的数据是可以复用的。解决方案中,他们首先进行分块,然后增加数据缓存以便重复利用数据。
图中右侧的芯片布局图中,中间起到计算作用的Neural Function Unit只占了一小部分,缓冲区(buffer)占据了大部分空间。
接着“电脑”系列衍生出了“大电脑”,在很小的计算单元周围布置了许多片上缓存(cache),然后把许多个这样的模块拼成一个大芯片,整个芯片上有几十MB的存储空间,足以装下整个模型。这样的方法起到了一定的作用。但一旦遇到过大、无法完全装入的模型,性能仍然会下降。
不过这种思路总体还是不错的,在企业级应用中很受欢迎,比如谷歌的TPU就有28MB的片上存储,可以装下整个Inception网络。在只做推理的TPUV1之后,TPUV2为了兼顾训练又增加了许多片外的高带宽存储(HBM)内存,与此对应的成本和功耗也会有一定上升。
根据TPU论文中给出的测试结果,第一代TPU芯片具有92TOPs的峰值性能,CNN0可以达到68TOPs的实测性能,这就是把整个模型的数据都装入片上缓存之后达到的效果。但运行一个无法都装在片上的LSTM时,实测性能就只有3.7TOPs,大约4%的利用率。在他们的论文中也写道“未来的设计中将会提高稀疏性(sparsity)考量的优先级”,即,意识到了稀疏化的重要性。
那么什么是“稀疏化”,什么是“软硬件协同设计”呢?
之前的发展过程中都是把算法和硬件中的一个看作固定的,单独优化另一个,很容易碰到极限值。现在发现可能需要把硬件和算法一起做优化。
这是一项来自韩松的很有名的工作,叫做Deep Compression,意在压缩去除神经网络中的冗余,尤其是在全连接层、LSTM的大规模矩阵运算中。他的想法来自人类成人脑中的突触要远少于幼儿时期,但其实成人的智慧和记忆却全方位优于幼儿。这说明有许多神经元间的连接其实是“无用的”。
Deep Compression分为三个步骤
第一个步骤是剪枝Pruning,发现网络中对总体结果影响不大的权重,直接去掉它们。比如直接去掉权重绝对值小于0.1的连接,再进行fine-tune
第二个步骤是利用Code Book做量化。它是说把32bit长度的浮点数压缩到8bit甚至4bit。
最后还用霍夫曼编码的形式存储数据。
所以他最核心的贡献是,发现了决定最终结果的不仅仅是权值,神经网络稀疏化的模式(pattern)也决定了网络的效果。
Deep Compression最大的应用是在手机app中,比如AR app中都用Deep Compression把网络压小到手机能够存储、运行的大小,Facebook的AR Demo App就取得了8倍的压缩效果。
下面姚颂更详细地介绍了剪枝和量化两个阶段。
左图展示的是剪枝,非常明白了,直接去掉作用不大的连接。
右图是说,网络中可能不需要大量的不同的值,也许只需要4个不同的值就可以代表网络中所有需要用到的权值。那么接下来就可以用2bit的index存这四个值,值本身的长度当然可以大于2bit。
接着大家发现,做完压缩之后的网络不一定能很好地在CPU或者GPU上运行,因为这些硬件适合稠密运算。所以在EIE(Efficient Inference Engine)的工作中设计了压缩后的神经网络专用的处理器架构。
从右侧芯片布局图中可以看到,计算单元占的空间仍然很小,大多数面积还是用来解决存储问题的。
EIE主要是为了全连接层设计的,不能做复杂的矩阵调度(不适合LSTM);也没办法处理多种不同的非线性函数(比如Htan)
所以基于EIE的研究,在深鉴科技创立后他们又做了许多新的研究,来到了ESE,Efficient Speech Recognition Engine,得到了FPGA 2017 最佳论文奖。它的核心仍然是稀疏化矩阵的计算操作。
NVIDIA也在ISCA2017发布了稀疏神经网络加速器SCNN。
大家一直都在发现当前最大的问题、用当前最好的方法来解决。最大的两个问题也就是计算和存储,首先通过优化计算引擎提高并行度之后,然后改进存储。现在前面的方式都达到极限之后,为了把水分彻底榨干,现在就做软硬件的协同设计。这也是深鉴科技在过去4年中进行的研究。
最后姚颂还有一项感叹,就是研究只是做产品的前10%,要做出产品还有无数的工程方面的努力、无数的debug;论文中只需要“恰好能够跑通这些benchmark”,实际产品需要能够在用户各种各样的算法上都不出错,还需要提供好用的软件产品。
(完)
雷锋网 AI 科技评论整理。更多精彩公开课请继续关注雷锋网 AI 科技评论和AI研习社。
雷峰网版权文章,未经授权禁止转载。详情见转载须知。