查看原文
其他

从Nvidia开源深度学习加速器说起

2017-05-21 唐杉 StarryHeavensAbove

GTC2017大会,充斥着各种新闻,以至于“XAVIER DLA NOW OPEN SOURCE”这条消息似乎并没有得到太大关注。但在我看来,对于整个芯片产业来说,这个开源事件将会产生深远影响。我先和大家看看这个DLA的架构,然后一起讨论一下硬件开源的问题。


我们先看一下一个科技blog对老黄Keynote的直播:

......

02:05PM EDT - NVIDIA is going to open source Xavier's deep learning accelerator

02:06PM EDT - This could prove a big deal, but at this point Jen-Hsun is moving very quickly

......

从这里看来,老黄介绍这个消息还是比较低调的。但是我相信对业内人士来说,这个消息肯定不是“moving very quickly”。


这个DLA是Nvidia的Xavier中的一部分,而Xavier是“next generation DrivePX platform for autonomous vehicles, the Xavier SOC, would consist of ARM CPU cores, Volta GPU cores, and a fixed function Deep Learning Accelerator (DLA) for inference”。从这里可以看出,Nvidia的自动驾驶的芯片也是采用一个异构的架构,并且使用一个专用的硬件加速器来支持inference


我在网上没有找到这个幻灯片非常清楚的版本,所以还是自己把这个Deep Learning Accelerator的框图再画一下吧。


首先,这个硬件加速器和我们看到的很多设计类似(可以参考我之前的文章),核心是一个MAC Array。它的配置,2048个8比特整型操作或者1024个16bit浮点操作也算是一个中规中矩的选择。而其它部分主要是围绕这个MAC Array实现有效的输入输出(Weight和Activation数据)的电路。首先是通过一个输入的DMA把数据从memory中取出,然后把weight和activation数据分别放到一个Unified Buffer里面。这个buff的大小是512KB,这个数值也是一个比较常见的配置(目前多数公开的深度学习加速器都是几百KB这个数量级,可以参考ISSCC2017 Deep-Learning Processors导读文章汇总)。再后面是对数据的预处理,包括两个功能,第一个是对稀疏weight的解压缩,这也意味着weight是以压缩的方式存储的,可以节约存储空间,以及访问Memory的带宽。第二个是对输入进行Winograd变换,这说明Nvidia是使用Winograd方法进行卷积运算优化的。在我之前的文章“深度神经网络的模型·硬件联合优化”中也提到了这种方法比较适合卷积核(Kernel)小于3X3的情况。之后就是将数据发给MAC array进行运算,这里的细节就不知道了。如我之前文章中介绍过的,MAC阵列的设计也有很多方法,重点是数据怎么流动(脉动方式,广播方式,多播方式,NoC等等)。之后的处理就比较简单了,包括累加器;后处理,主要是各种激活函数(应该和TPU中MAC array后的处理相似,参考脉动阵列 - 因Google TPU获得新生);以及写回Memory的DMA。最后所有这些模块由一个“Tensor Excution Micro-controller”来控制。之前在一个新闻里看到“To spread the DLA impact, Nvidia will open source instruction set and RTL for any third party to integrate. ”如果这个描述是准确的,这个Micro-controller应该也有自己的指令集。

从目前看到的这个框图来看,Nvidia的Deep Learning Accelerator基本上可以说是个中规中矩的设计,并没有太出乎意料的地方。相比技术而言,更令人吃惊的是Nvidia做出的“Open Source”决定。

说到硬件开源,这里主要是芯片设计,我还是有点体会的。2010年左右,有一个比较重要的硬件开源项目opencores(www.opencores.org)。其中可能最著名的是Open RISC的处理器。我在实际的芯片项目中用过这个处理器,相信很多朋友也有类似的经验。不过这个项目后来也慢慢衰落下去了。现在比较活跃的开源处理器项目当然是RISC-V了。另外一个很“成功”的开源硬件应该是比特币采矿芯片的硬件设计,当年我也用过“Open Source FPGA Bitcoin Miner”的设计,可惜玩了一下就扔了,错了了人生中最好的发财机会。当初和我讨论低功耗设计的小朋友们可都成了亿万富翁。


除了这几个项目之外,似乎再没有什么能够产生比较大的影响的硬件开源项目了。其中的原因很多,我认为最重要的一点是芯片设计是一个周期很长,门槛很高的工作,这个和软件项目有很大不同。比如我们是有Open RISC的处理器,从评估开始,还需要集成,验证,投片,测试,和软件开发等一系列工作才能得到最终结果,周期在一年以上。同时,做芯片的实现门槛也很高,即使是现在比较活跃的RISC-V项目,真正能把它做出芯片的玩家也没几个。而开源软件项目则不同,部署的时间往往短的多,门槛也比较低,大量的开发者可以很快实现应用,产生反馈,保持开源项目的快速发展。比特币采矿的开源项目能成功,也是因为它的设计非常简单,在FPGA上部署很快。我记得我当年从开始接触这个设计,到FPGA能采矿大概用了5天时间(而且我还把它从单核改成了多核)。


在我4月中旬的一篇文章最后,引用了一个有趣的观点“ASIC systolic arrays are going to flood the market with likely Chinese government subsidized hardware manufacturers cranking this stuff out. It just takes someone to come up with an open source reference design. Just like what happened in the Bitcoin world”没想到一个月之后,竟然真的有open source的深度学习加速器(虽然不一定脉动阵列架构)出现了,而且是出自Nvidia之手。


那么问题来了:“Nvidia为什么要这么做?”

Nvidia在介绍这个决定的时候给出的理由是,帮助更多的人在更多的设备中实现inference的应用,从而促进人工智能的发展。但在这个公开的理由背后,是否还有不可描述的理由呢?也许是感到竞争的压力?说真的,我也不知道。瞎猜的事情就别写出来了,大家有什么感想欢迎给我留言。


紧接着的第二个问题:“未来会发生什么?”

有人说,Nvidia开源了DLA,那么现在很多做类似事情的startup就别干了。我觉得也不尽然。首先,前面也提到了,开源的硬件项目要成功很难。当然Nvidia这个级别的玩家做硬件开源是第一次,也许会有所不同。第二,在Edge和嵌入端的应用丰富多样,Nvidia的DLA设计也很难在每种应用上都做到最好,除非它投入大量的人力物力来支持开源项目。从另一个角度来说,Nvidia的设计再次证明了,神经网络芯片(特别在嵌入端)将会是一个异构的世界,不同的架构可能都有机会。最终还是实用效果说话。但不管怎么说,随着大家都在AI上押宝,这个领域的竞争会越来越激烈,没有真本事的公司会越来越难“混”。看看刚结束的Google I/O大会,连Google都要做硬件加速器和DSP了,我们做芯片的人还敢不努力吗?


根据Nvidia给出的时间表,7月份将有Early Access的版本,也许我们的很多疑问可以得到解答,或者会有更多问题产生。Nvidia作为AI硬件领域最领先的厂商,突然做出硬件开源这个尝试,未来倒底会产生什么样的影响,是引起产业巨变还是变成昙花一现的笑谈?我们拭目以待吧。



最后说点实际的,如果哪位能拿到Early Access版本,请一定给我分享一下。

T.S.

题图来自网络,版权归原作者所有

推荐阅读  

Nvidia Volta - 架构看点

神经网络DSP核的一桌麻将终于凑齐了

AI会给芯片设计带来什么?

如何做神经网络处理器的需求分析?

深度神经网络的模型·硬件联合优化

脉动阵列 - 因Google TPU获得新生

长按二维码关注

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

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