其他

【回顾】深鉴科技姚颂:深度学习处理架构的演进

2017-11-02 杨晓帆 AI研习社

AI 研习社系列公开课持续进行中,高水平的嘉宾、精彩的分享主题、宽广的学术视角和敏锐的行业理解,肯定会让每个观众 / 读者都有所收获。


深度学习、体系结构、数据规模的共同发展促进了人工智能行业的繁荣。在通用架构之外,深度学习处理架构已经经历了三代的发展,从计算优化、存储优化,到结合 Deep Compression 的稀疏化处理架构。在 10 月 17 日的 AI 研习社公开课中,我们请到了深鉴科技姚颂,为大家讲解深度学习处理架构的演进过程,以及几个核心问题是如何逐渐解决的。AI研习社把这次公开课的主要内容整理如下。

https://v.qq.com/txp/iframe/player.html?vid=g0562ilkhsf&width=500&height=375&auto=0
▷ 观看完整回顾大概需要  31  分钟

姚颂,深鉴科技联合创始人、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 研习社(okweiwu),回复  1  领取

【超过 1000G 神经网络 / AI / 大数据,教程,论文】

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存