加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • NPU,何许人也?
    • 处理神经网络模型,跟生产汤圆差不多?
    • 脉动阵列结构,走向最强汤圆生产商的不二选择?
    • 成也专用性,败也专用性?
    • 结语
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

原来神经网络处理器,就是包汤圆

2022/02/16
961
阅读需 13 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

NPU,何许人也?

说起近年来数字电路设计领域的弄潮儿,非“神经网络处理器 NPU”莫属。它更广为人知的花名,就是:AI芯片

NPU与CPU、GPU等通用处理器之间最大的不同,就在于高度的专用性。作为一种典型的领域专用架构(Domain Specific Architecture, DSA),NPU是专门用于处理神经网络算法的。

神经网络算法良好表现的背后,是密集的运算。如果我们能够为神经网络的处理这一任务定制一款架构,那么我们便能享受到更高的处理性能、更低的功耗。

举个例子,同样是进行一次人脸识别,比起通用处理器,NPU不仅能更快地完成任务,耗电还更少。反映到市场上,这些优势可就是真金白银。

在这样的需求下,大量的人力物力被投入于NPU的设计,使得这一概念早已走出了纸上谈兵的阶段。

而如今,摆在我们眼前的局面似乎是矛盾的。

一方面,在自研芯片的热潮下,不少企业纷纷选择了拿NPU来小试牛刀,让人觉得NPU似乎已经开始走向大规模的市场化。

但另一方面,NPU的研究热仍然持续席卷着各大学术会议,宣告着:“理想的、终极形态的NPU还在路上。”

那么,有关NPU的研究到底进入怎样的技术阶段了呢?亟待解决的问题和有潜力、前景的技术方向又有哪些呢?

处理神经网络模型,跟生产汤圆差不多?

既然是要设计专用的处理器,那么架构自然得跟着目标算法走。

(图片来自Eyeriss Tutorial)

一个典型的神经网络模型常常由多个不同类型的层构成。不了解每一层对于整个模型的表现有什么贡献?没关系!我们只需要凭着“不畏浮云遮望眼”的魄力,猛抓主要矛盾——算法中计算量最大的部分。

在典型的神经网络模型中,计算最密集的要属卷积层和全连接层,而两者对应的运算都可以用矩阵乘法的形式来交给硬件处理。

打个比方,这是一个小规模的矩阵乘法运算,其中输入矩阵x,权重矩阵w和输出矩阵y的大小均为2×2。今天是元宵节,咱们就用生产汤圆打个比方~

假设输入矩阵中的四个元素分别代表着四种馅料:芝麻、红豆、花生和草莓,而权重矩阵中的四个元素则对应着原味、紫米、抹茶和芋头这四种外皮,那么输出矩阵的计算便可以看作是生产四袋汤圆,每一袋里有两颗汤圆:比如y0这一袋里的两颗汤圆分别是原味芝麻(x0·w0)和抹茶红豆(x1·w2)口味的。也就是说,每一袋汤圆的生产离不开两种操作:把外皮、内馅揉在一块儿(乘法)和把揉出来的汤圆按计划装袋(加法)。

脉动阵列结构,走向最强汤圆生产商的不二选择?

一说到矩阵乘法,大家是不是突然明白了为什么那些研究深度学习的小伙伴跑实验总是离不开GPU?因为GPU最擅长的,就是靠里面的大量运算单元,处理高并行度的运算任务。

那么在处理神经网络模型中的矩阵乘法运算时,GPU的不足之处在哪?

让我们再次把目光投向汤圆的生产上来。

GPU所对应的生产模式,就像是在工厂里雇佣了大量的师傅,他们各自知道自己当前的任务是什么,但缺少对于整体的生产计划的认知。

于是,在这样一家汤圆生产厂里,我们可以看到这样的现象:师傅张三和李四分别被分配到了“揉一颗原味芝麻汤圆”和“揉一颗抹茶红豆汤圆”的任务,于是他们各自跑到仓库去取原材料、跑回工位上揉汤圆、再把汤圆送回仓库里;之后,师傅王五被分配到了“打包这两颗汤圆”的任务,于是他同样地经历了“跑去仓库取汤圆-跑回工位打包-把包好的汤圆送回仓库”的三段式工作流程。

由于人手多,完成整个生产任务所需要时间仍然能让人满意,但是这样的生产模式意味着极高的人力成本。同时,整体的生产效率更是比理想状态要低得多:由于每位师傅都需要频繁地往来于仓库和工位,因此即使把生产室和仓库间的通道建得再宽敞,他们的大部分工作时间都得花在仓库里和去仓库的路上。这就是“冯·诺依曼瓶颈”——频繁的数据存取拖了处理性能的后腿。

问题就来了,怎样才能建立起一套更合理的生产模式呢?

答案很简单,需要管理者充分地利用自己对于目标生产任务的了解,定制化地指挥各位汤圆师傅们相互配合、而不是各自为战。

对于专用芯片架构设计,这件事带来的启发是,应当把握、利用目标算法的特征,尽可能避免不必要的远距离数据传输——谷歌TPU中采用的脉动阵列(Systolic Array)结构便是一次成功的尝试。

在脉动阵列结构中,相邻的处理单元(Processing Element, PE)之间是允许进行数据传递的,且各PE有着自己的存储资源来暂存数据,这就为数据的复用提供了可能性。

整个运算过程是这样的:权重值首先被载入脉动阵列并保持静止;输入值按照特定的排序方式自左向右地“流”过阵列,并在途经的PE中参与运算;输出值,也就是运算结果,将从阵列的底部“流”出。

通过这样的方式完成运算的好处何在?回到老石汤圆厂:在整个生产过程中,每一种馅料和外皮尽管被使用到了两次,但它们从仓库中被取出的次数却被成功地限制在了最低限度一次。

这是因为:每位师傅都被指定负责一种特定外皮的汤圆的制作,比如张三师傅(PE0)负责所有原味外皮(w0)的汤圆的制作任务,李四师傅(PE1)则负责制作紫米外皮(w1)的汤圆,于是,每位师傅便可以反复地使用自己已经取出的外皮。

另一方面,馅料也被允许在相邻的师傅间传递。当李四师傅需要芝麻馅(x0)的时候,他可以从左侧的张三师傅那里得到,而不需要自己再跑一趟仓库。

成也专用性,败也专用性?

但是,这样的脉动阵列结构还称不上是终极的解决方案。

尽管上面给出了一个理想的运算过程,但是需要注意的是,这是建立在目标运算的规模与阵列的大小完美契合的前提条件下的,而这一点在应用场景中其实是难以满足的。

在实际的设计中,出于对峰值算力的追求,脉动阵列的尺寸不宜选择得过小,比如谷歌的Cloud TPU v2配备了两个128×128大小的PE阵列。

而目标运算的规模却是变化的:一方面,同一个神经网络模型中的不同层所对应的运算规模是不同的;另一方面,在很多应用场景下,待处理的神经网络模型也不是单一的。

用固化的硬件去应对变化的运算需求,结果注定是“悲剧”。

这就好比咱们的汤圆厂里雇了大量的汤圆师傅来保证高生产力,而今天接到的生产订单很小,但师傅完成订单的时间并没有变少:因为他们认准了只有位置最靠边的师傅(阵列中最底侧的PE)才能把汤圆送回仓库,于是便执着于无意义的传递行为。

换言之,专用的架构大大简化了对于控制逻辑的需求,但也使得处理器丧失了灵活处理问题的能力。

有人可能会有异议:通过更深入的定制化,可以把同一个算法模型中不同层的运算交给不同大小的脉动阵列,让多个阵列以流水线的方式协同工作,实现运算规模与硬件资源的匹配。这其实是NPU设计中一种常见的理念,但简单地倒向定制化会导致NPU在处理不同神经网络模型时的“彻底躺平”。

为什么完全的专用性并不适用于NPU?这似乎与我们对于“定制化”的一贯理解不太相符。

一切仍然得追溯到需求上。

由于神经网络算法仍在高速发展,关于“最优的神经网络模型”之争还远没有盖棺定论,这就注定了当下的NPU仍然需要具备一定的通用性——假设企业花重金买了NPU,几个月后却发觉它们无法兼容更新、更有效的算法,那么显然没有人愿意为这样的一锤子买卖买单。

这使得NPU始终无法在竞争中甩开GPU,证明自己才是加速神经网络模型处理的最佳选择。

路在何方?

考虑到神经网络算法持续高速发展的大背景,NPU若想与GPU掰手腕、抢占市场份额,哪些技术方向可能成为突破口?

我认为,思路大体上可以分为两种:

1. 适度牺牲专用性,换取通用性;

2. 无视通用性,选择彻底的定制化。

前者意味着在架构中额外引入少量的控制逻辑和数据通路,用轻量级的硬件开销去折中专用性与通用性。

对于这一思路,引入多少通用性、如何低成本地引入通用性等等都是需要重点考量的因素,也需要更便捷的生态作为支持。

硬件若是骨架,那么软件便是灵魂。

换句话说,当GPU能够流畅地处理PyTorch、TensorFlow等主流深度学习框架构建的网络模型、而NPU却不能的时候,市场很难更青睐后者。

第二种思路则更接近于设计专用处理器的初心——既然选择了定制化,岂有被通用性局限住的道理?

考虑到通用性来自于“用相同的硬件运行不同的算法”的需求,如果能为每一个神经网络都定制相应的处理器,无视通用性这一想法便站得住脚了。

因此,NPU设计自动化这一方向被寄予了厚望:当用户输入自己搭建的神经网络模型的特征,工具便能自动地生成出对应的、RTL级别的NPU设计。基于FPGA可编程的器件,该设计能够以较低的成本迅速走向物理实现。由此看来,追求极致的专用性也并不是空中楼阁。

结语

理论上,高度定制化的专用处理器能比通用处理器更高效地完成特定的目标任务。

然而,由于神经网络算法领域自身仍然在高速地发展,NPU的DSA设计并不能完全地摆脱对于通用性的考量,这使得NPU迟迟无法表现出对于GPU的显著优越性。

但这并不意味着NPU这一概念是无意义的,一些技术方向上的潜在突破将成为NPU的取胜之匙。在后续的文章中,我们将结合在近期的顶级学术会议上汇报的相关研究进展,为对这一炙手可热的概念感兴趣的朋友建立一个更加立体的认知。

(注:本文不代表作者任职单位观点。)

相关推荐

电子产业图谱

微信公众号“老石谈芯”主理人,博士毕业于伦敦帝国理工大学电子工程系,现任某知名半导体公司高级FPGA研发工程师,从事基于FPGA的数据中心网络加速、网络功能虚拟化、高速有线网络通信等领域的研发和创新工作。曾经针对FPGA、高性能与可重构计算等技术在学术界顶级会议和期刊上发表过多篇研究论文。