2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

xdq0 2018-09-03

选自ACM,作者:Norman P. Jouppi, Cliff Young, Nishant Patil, David Patterson ,机器之心编译。

2017 年图灵奖获得者、《计算机体系结构:量化研究方法》一书的作者、谷歌杰出工程师 David Patterson 等人近日在 ACM Communications 上撰文介绍了对于计算芯片架构未来的展望。作者认为深度神经网络加速的特定领域架构将成为未来主流,而随着制程提升的困难,通用计算芯片现在每年的提升仅有 3%,或许在 2038 年以前性能都无法翻倍。

摩尔定律的终结将使特定领域的架构成为计算的未来。一个开创性的例子就是谷歌 2015 年推出的张量处理单元(TPU),目前已经在为超过十亿人提供服务。TPU 使深度神经网络(DNN)的计算速度提高了 15-30 倍,能耗效率比现有类似技术的 CPU 和 GPU 提高了 30-80 倍。

本文要点

  • 虽然 TPU 是一种专用集成电路,但它适用于神经网络框架 TensorFlow 下的大量程序,驱动了谷歌数据中心的许多重要应用,包括图像识别、翻译、搜索和游戏。
  • 通过专门为神经网络重新分配芯片计算资源,TPU 在真实数据中心负载环境下效率要比通用类型的计算机高 30-80 倍,目前已为全球 10 亿人服务。
  • 神经网络的推理阶段通常遵循严格的响应时间限制,这降低了通用计算机所使用技术的效率,该通用计算机通常运行得较快,但某些情况下也会较慢。

2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

1965 年英特尔创始人之一戈登·摩尔预测芯片中的晶体管数量每两年会增加一倍。尽管 2017 年 1 月的 ACM Communications 封面呼吁道:「说我要终结还为时过早了」,摩尔定律确实寿终正寝。2014 年推出的 DRAM 芯片包含了 80 亿个晶体管,而在人们的预测中即使到了 2019 年,带有 160 亿个晶体管的 DRAM 芯片也不会大规模生产——如果看摩尔定律的话,四年里晶体管数量应该变成四倍多。2010 年款的英特尔至强 E5 处理器拥有 23 亿个晶体管,而 2016 年的至强 E5 也只有 72 亿个晶体管,或者说比摩尔定律预计的数值低 1.5 倍。毫无疑问,半导体行业还在不断进步,但其步伐已经放缓。

Dennard Scaling 是一个鲜为人知,但同样重要的观察结果,Robert Dennard 在 1974 年认为,晶体管不断变小,但芯片的功率密度不变。如果晶体管尺寸线性缩小了二分之一,那么同样面积上芯片中晶体管的数量就会变为 4 倍。同时,如果电流和电压都降低了二分之一,它所使用的功率将下降 4 倍,在相同的频率下提供相同的功率。Dennard Scaling 在被发现的 30 年后结束,其原因并不是因为晶体管的尺寸不再缩小,而是因为电流和电压不能在继续下降的同时保持可靠性了。

计算架构师们一直信奉摩尔定律和 Dennard Scaling,并通过复杂的处理器设计和内存层次结构,将资源转化为性能,而在这其中并没有顾及到程序员知识中各指令之间的并行性。不幸地是,架构师们最终耗尽了可以有效利用的指令的并行性。2004 年 Dennard Scaling 的结束,以及缺乏更有效指令级并行性方法的状况,迫使业界选择从单核高耗能处理器转换到多核高效率处理器。

今天我们遵守吉恩·阿姆达尔(IBM 著名工程师,阿姆达尔定律的提出者)在 1967 年提出的定律,该定律认为不断增加处理器数量会导致性能提升的递减。阿姆达尔定律说,并行计算的理论加速受到任务顺序部分的限制;如果任务的 1/8 是串行的,则最大加速比原始性能高 8 倍——即使任务的其余部分很容易并行,并且架构师增加了 100 个处理器也是如此。

下图显示了过去四十年以来,上述三大定律对处理器性能的影响。按照目前的速度,标准处理器的性能在 2038 年以前不会翻倍。

2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

图 1. 依照 Hennessy 和 Patterson 的理论,我们绘制了过去 40 年中,32 位和 64 位处理器内核每年最高的 SPECCPUint 性能;面向吞吐量的 SPECCPUint_rate 反映了类似的情况,即使其平稳期延迟了几年。

晶体管看来不会再有很大提升了(这反映了摩尔定律的结束),而每平方毫米芯片面积的功耗正在增加(Dennard Scaling 也结束了),但人们对于芯片功率的预算却并没有增加(因为电子移动、机械和发热限制),芯片设计师们已经在充分发挥多核心的能力了(但这也受到阿姆达尔定律的限制),架构师们现在普遍认为,在性能效率上进行重大改进的唯一途径是特定领域的架构——它们只适用于处理特定的任务,但效率非常高。

在云端的大型数据集和大量计算机之间的协作使得机器学习近年来有了很大的发展,特别是在深度神经网络(DNN)方面。与一些其他领域不同,DNN 应用方面很广泛。DNN 的突破包括将语音识别的错词率降低了 30%(近 20 年来的最大进步);自 2011 年以来,将图像识别的错误率从 26% 降低至 3.5;在围棋上击败了人类世界冠军;提升了搜索排名等等。单个 DNN 架构或许应用范围很窄,但这种方法仍然催生出了大量应用。

神经网络一定程度上模拟了人类大脑中神经的功能,基于简单的人工神经元 - 输入的加权和的非线性函数(例如 max(0,value))。这些人工神经元被集中到一层,一层的输出是下一层的输入。深度神经网络中的「深度」代表有多个层,由于云中的大数据集,我们可以使用更大、更多的层来让神经网络获取更抽象、更准确的概念,而 GPU 会帮助我们快速进行计算。

DNN 运行的两个阶段被称为训练(或学习)和推理(或预测),分别指代发展与生产。训练一个 DNN 可能需要数天,但训练好的 DNN 进行推理只需要几毫秒。针对不同的应用,开发者需要选择神经网络的类型和层数,并训练出合适的权重。几乎所有的训练都是浮点运算,这就是 GPU 在深度学习时代如此受欢迎的原因之一。

被称为「量化」的转换将浮点数转为整数——通常只有 8 位——这种程度通常足以满足推断要求了。与 IEEE 754 16 位浮点乘法相比,8 位整数乘法只需要 1/6 的能耗,占用 1/6 的空间,而整数加法也能带来 13 倍能耗和 38 倍空间的提升。

下表展示了两个例子,共六种 DNN 的运行效率——这代表了谷歌数据中心 2016 年 95% 的深度神经网络工作负载。它们在 TensorFlow 中的代码都非常短,只有 100-1500 行。这些示例代表在主机服务器上运行较大应用程序的小组件,可以是数千到数百万行 C ++代码。应用程序通常面向用户,这会导致严格的响应时间限制。

2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

表 1. 2016 年 7 月,谷歌 TPU 上的 DNN 工作负载。共六种 DNN 应用(三种 DNN 类型),代表 95% 的 TPU 工作负载。

如表 1 所示,每个模型需要 500 万至 1 亿个权重,这可能需要花费大量时间和能耗来访问。为了压缩访问成本,在一批独立示例中重复使用相同的权重可以提高性能。

TPU 起源、架构及实现

早在 2006 年,谷歌就开始考虑在其数据中心部署 GPU——现场可编程门阵列(field programmable gate array,FPGA)或专用集成电路(ASIC)。结论是,只有为数不多的能在特殊硬件上运行的应用可以免费使用谷歌大型数据中心的过剩容量,而且很难自由改进。情况在 2013 年出现了转机,当时谷歌用户每天使用语音识别 DNN 语音搜索三分钟,使得谷歌数据中心的计算需求增加了一倍,而如果使用传统的 CPU 将非常昂贵。因此,谷歌启动了一项优先级别非常高的项目,快速生产一款定制芯片用于推理,并购买现成的 GPU 进行训练。谷歌的目标是将性价比提高 10 倍。为了完成这项任务,谷歌在其数据中心设计、验证、构建并部署了 GPU,而这一过程仅仅用了 15 个月。

为了降低部署延迟的风险,谷歌工程师将 TPU 设计成 I/O 总线上的协处理器,并允许它像 GPU 一样插入现有服务器,而不是使 TPU 与 CPU 紧密集成。此外,为了简化硬件设计和调试,主机服务器将指令发送给 TPU 令其执行,而不是让 TPU 去自行获取。因此,TPU 在理念上更接近浮点单元(FPU)协处理器,而不是 GPU。

谷歌工程师将 TPU 看做一个系统进行优化。为了减少与主机 CPU 的交互,TPU 运行整个推理模型,但提供了与 2015 年及以后的 DNN 相匹配的灵活性,而不局限于 2013 年的 DNN。

图 2:TPU 的框图。TPU 指令通过外围组件互连高速(PCIe)Gen3x16 总线从主机被发送到指令缓冲器中。内框通常通过 256 字节宽度的路径连接在一起。从右上角开始,矩阵乘法单元为 TPU 的核心,256×256 MAC 可以对有符号或无符号的整数执行 8 位乘法和加法运算。这个 16 位的产品聚集在矩阵单元下方的 32 位累加器的 4MB 中。这四个 MiB 代表含有 4,096, 256 个元素的 32 位累加器。矩阵单元每周期产生一个 256 元素的部分和。

2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

图 2. TPU 框图及平面图

矩阵单元的权重通过片内「权重 FIFO」来分级,该 FIFO 从我们称之为「权重存储器」的片外 8GB DRAM 中读取;为了推理,权重仅作读取;8GB 支持很多同时激活的模型。权重 FIFO 有四层深。中间结果保存在 24MiB 的片上「统一缓冲器」中,可以作为矩阵单元的输入。可编程 DMA 控制器将数据传送到 CPU 主机存储器和统一缓冲器或从二者中传送数据。为了能在谷歌的规模上可靠地部署,内存储器和外存储器包含内置错误检查与纠正硬件。

TPU 微架构的原理是保持矩阵单元繁忙。为了实现这一目标,读取权重的指令遵循解耦访问/执行原理,因为它可以在发送地址之后、从权重存储器中取出权重之前完成。如果输入激活或权重数据没有准备好,矩阵单元将停止。

由于读取大型静态随机存取存储器(Static Random-Access Memory,SRAM)消耗的算力比算法多得多,矩阵单元使用「脉动执行」通过减少统一缓冲器的读写来节约能量。它依赖于来自不同方向的数据,这些数据以规则的间隔到达阵列中的单元,这些方向在间隔中组合到一起。给定的含有 65,536 个元素的向量-矩阵乘法运算作为对角波前在矩阵中移动。这些权重被预加载,并随着新数据块的第一个数据一起随着前进波生效。控制和数据被流水线化,给程序员一种错觉,即 256 个输入被一次读取,并立即更新 256 个累加器中每个累加器的一个位置。从正确性的角度来看,软件不了解矩阵单元的脉动特性,但为了提高性能,必须考虑单元的延迟。

TPU 软件栈必须与为 CPU 和 GPU 开发的软件栈兼容,这样应用可以快速移植到 TPU。在 TPU 上运行的应用部分通常用 TensorFlow 编写,并编译成可以在 GPU 或 TPU 上运行的 API。

CPU、GPU、TPU 平台

多数体系架构研究的论文基于运行小型、易于移植的基准测试模拟,这些基准测试可以预测潜在的性能(如果实施的话)。本文与上述论文不同,而是对 2015 年以来数据中心运行真实、大型生产工作负载的机器进行回顾性评估,其中一些机器的日常用户超过 10 亿。表 1 中列出的六种应用代表了 2016 年 TPU 数据中心 95% 的使用。

由于正在测量生产工作负载,要比较的基准平台也必须可以在 Google 数据中心部署,因为这是生产工作负载运行的唯一处所。谷歌数据中心的很多服务器和谷歌规模对应用程序可靠性的要求意味着机器必须至少检查内存错误。由于英伟达 Maxwell GPU 和最近的 Pascal P40 GPU 不检查内存中的错误,在谷歌的规模中部署这些处理器并满足谷歌应用程序的严格可靠性要求是不可行的。

表 2 显示了部署在谷歌数据中心的服务器,可以将其与 TPU 进行比较。传统的 CPU 服务器以英特尔的 18 核双插槽 Haswell 处理器为代表,该平台也是 GPU 或 TPU 的主机服务器。谷歌工程师在服务器中使用四个 TPU 芯片。

2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

表 2. 基准测试的服务使用 Haswell CPU、K80 GPU 及 TPU。

很多计算机架构师没有考虑到从产品发布到芯片、主板、软件可以服务于数据中心的用户之间的时间差。表 3 指出,2014 年至 2017 年,商业云公司的 GPU 时间差为 5 至 25 个月。因此,可以媲美 2015 年 TPU 的 GPU 显然是英伟达 K80,后者处于相同的半导体工艺中,在 TPU 部署前六个月发布。

2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

表 3. 2015 年到 2017 年,英伟达 GPU 从发布到云端部署的时间差距,这 4 代 GPU 分别为 Kepler、Maxwell、Pascal 和 Volta 架构。

每个 K80 卡包含两个裸片,并提供内部存储器和 DRAM 的错误检测和纠正机制。这种服务器中最多可安装 8 个 K80 裸片,这也是我们基准测试的配置。CPU 和 GPU 都使用大型芯片:大约 600 mm2,或者是英特尔 Core i7 的三倍。

性能:Roofline、响应时间、吞吐量

为了说明这六个 app 在三个处理器上的性能,我们使用了高性能计算机群(HPC)的 Roofline 性能模型。这一简单的视觉模型虽然不完美,但揭示了性能瓶颈出现的原因。该模型背后的假设是 app 无法适应片上缓存,因此它们要么计算受限,要么内存带宽受限。对于 HPC,y 轴表示每秒浮点运算性能(单位是 FLOPS),因此峰值计算率形成了 roofline 的「平缓」区(flat part)。x 轴表示运算密度(operational intensity),单位是 FLOPS/byte。内存带宽表示每秒多少比特,形成了 roofline 的「倾斜」部分(slanted part),因为 (FLOPS/sec)/ (FLOPS/Byte) = Bytes/sec。没有充足的运算密度时,程序受限于内存带宽,性能只能在 roofline 的「倾斜」部分之下。

一个应用的每秒实际计算量与其天花板计算量之间的距离代表了保持运算密度不变时性能提升的潜力;提升运算密度的优化(如缓存块)可能带来更大的性能提升。

为了在 TPU 上使用 Roofline 模型,当 DNN 应用被量化时,我们首先将浮点运算替换成整数运算。由于权重步伐无法正常适应 DNN 应用的片上内存,因此第二个改变就是将运算密度重新定义为每权重比特的整数乘积累加运算(integer multiply-accumulate operations per byte of weights),如表 1 所示。

图 3 展示了单个 TPU、CPU 和 GPU 在 log-log scale 上的 Roofline 模型。TPU 的 Roofline 模型「倾斜」部分较长,其运算密度意味着性能更多地受限于内存带宽,而不是计算峰值。六个应用中有五个都接近天花板,MLP 和 LSTM 受限于内存,CNN 受限于计算。

2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

图 3:TPU、CPU 和 GPU 在 log-log 图上的 roofline 模型。五角星表示 TPU,三角形表示英伟达 Tesla K80 GPU,圆表示英特尔酷睿处理器(Haswell);所有 TPU 五角星都与其他两种芯片的 roofline 模型持平或在后者之上。

如图 3 所示,这六个 DNN 应用与 Haswell 和 K80 roofline 天花板的距离大于与 TPU roofline 天花板的距离。响应时间是原因所在。这些应用中的很多个是面向终端用户服务的一部分。研究表明,即使响应时间的些微增加都会导致用户使用该服务的频率降低。训练可能没有苛刻的响应时间 deadline,但推断通常有,或者说相比于吞吐量,推断更偏好 latency。

例如,按照应用开发者的要求,MLP0 的 99th 百分位响应时间通常为 7ms。(每秒推断和 7ms 的延迟包括服务器主机时间和加速器时间。)如果对响应时间的限制不严格,Haswell 和 K80 分别以 MLP0 最高吞吐量的 42% 和 37% 运行。这些限制也会影响到 TPU,它会以 80% 的吞吐量来运行,更加接近 TPU 的 MLP0 最大吞吐量。与 CPU 和 GPU 相比,单线程 TPU 没有复杂的微架构特征,即消耗晶体管和功率来提高平均性能,而非 99th 百分位的情况,即 TPU 没有缓存、分支预测、乱序执行、多处理、推测预取(speculative prefetching)、地址合并(address coalescing)、多线程、上下文切换(context switching)等。极简是领域专用处理器的优势。

表 4 显示了每个芯片的相对推断性能底线,包括两个加速器 vs. CPU 的主机服务器开销,展示了这六个 DNN 应用相对性能的加权平均值,表明 K80 芯片速度是 Haswell 的 1.9 倍,TPU 芯片速度是 Haswell 的 29.2 倍,TPU 芯片速度是 GPU 的 15.3 倍。

2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

表 4:在 DNN 工作负载下 K80 GPU 芯片和 TPU 芯片与 CPU 的性能比。加权平均值使用了表 1 中六个 app 的实际混合。

性价比、总体拥有成本(TCO)、性能/功耗(Performance/Watt)

大批量购买计算机时会更多地考虑性价比而非性能。数据中心最好的成本指标是总体拥有成本(TCO)。组织(如谷歌)购买数千张芯片时所支付的实际价格取决于与相关企业的谈判沟通。由于涉及商业机密,我们无法公开此类价格信息或数据。但是,功率与 TCO 相关,我们可以公开每台服务器的功耗数,因此这里我们使用性能/功耗比代替性能/TCO 比。这部分我们对比了整个服务器而不是单个芯片。图 4 显示了 K80 GPU 和 TPU 相对于 Haswell CPU 的平均性能/功耗比。我们给出了两种不同的性能/功耗比计算。我们展示了两种不同的性能/功耗计算方法。第一种「total」包括计算 GPU 和 TPU 的性能/功耗时主机 CPU 服务器所消耗的功率;第二种「incremental」从 GPU 和 TPU 中减去了主机 CPU 服务器所消耗的功率。

2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

图 4:GPU 服务器与 CPU 服务器的性能/功耗对比(蓝色条)、TPU 服务器与 CPU 服务器的功耗对比(红色条)、TPU 服务器与 GPU 服务器的功耗对比(橙色条)。TPU' 是使用 K80 的 GDDR5 内存将 TPU 进行改进后的芯片。

对替代性 TPU 设计的评估

和 FPU 类似,TPU 协同处理器比较容易评估,因此我们为六个应用创建了一个性能模型。模型结果和硬件性能的平均差距小于 10%。

我们使用性能模型来评估一款假设的 TPU 芯片 TPU'(使用同样的技术再用 15 个月我们也能设计出这款芯片)。更具攻击性的逻辑合成和模块设计仍然可以把时钟频率提高 50%。为 GDDR5 内存设计接口电路(就像 K80 那样)可以将权重内存带宽(weight memory bandwidth)提高四倍,将 roofline 脊点从 1350 降到 250。

将时钟频率提高到 1,050 MHz 而不帮助内存并没有什么作用。如果我们使时钟频率为 700MHz,但使用 GDDR5 作为权重内存,则加权平均值飞跃至 3.9。同时实行这两种措施无法改变平均值,因此假设的 TPU' 具备更快的内存。

将 DDR3 权重内存替换成等价的 K80 GDDR5 内存需要将内存通道的数量翻一倍,即 4 个通道。这一改进可以将芯片大小扩大约 10%。GDDR5 还能够将 TPU 系统的功率预算从 861W 提高到 900W 左右,因为每台服务器都有四个 TPU。

图 4 显示,TPU'的总体性能/功耗/芯片是 Haswell 的 86 倍,K80 的 41 倍。其 incremental 指标是 Haswell 的 196 倍,K80 的 68 倍。

讨论

这部分按照 Hennessy 和 Patterson 的谬误-陷阱-反驳格式来展开:

谬误。数据中心的 DNN 推断应用将吞吐量和响应时间置于同等重要的地位。我们惊讶于谷歌 TPU 开发者对响应时间有这么高的要求,2014 年就有人透露:对于 TPU 来说,批尺寸应该足够大,以到达性能峰值或者对延迟的要求不用那么苛刻。一个强大的应用是离线图像处理,谷歌开发者的直觉是,如果交互式服务也需要 TPU,则大部分服务需要累积足够大的批量。即使 2014 年谷歌关注响应时间(LSTM1)的应用开发者称,2014 年的限制是 10ms,而真正向 TPU 移植时 10ms 将被减少至 7ms。很多此类服务对 TPU 的意料之外的要求,以及它们对快速响应时间的影响和偏好,改变了这个等式。应用编写者通常会选择降低延迟,而不是累积更大的批量。幸运的是,TPU 具备一个简单、可重复的执行模型,来满足交互式服务的响应时间要求,此类高峰值吞吐量、小批量大小导致 TPU 具备比当前 CPU 和 GPU 更好的性能。

谬误。K80 GPU 架构很适合进行 DNN 推断。我们发现 TPU 在性能、能耗和成本方面优于 K80 GPU 有五个方面的原因。一,TPU 只有一个处理器,而 K80 有 13 个,单线程当然更容易满足严格的延迟目标。二,TPU 具备一个非常大的二维乘法单元,GPU 有 13 个小的一维乘法单元。DNN 的矩阵相乘密度适合二维阵列中的算术逻辑运算单元。三,二维阵列还能通过避免访问寄存器来促成脉动实现,节约能源。四,TPU 的量化应用使用 K80 并不支持的 8 比特整数而不是 GPU 的 32 比特浮点数。数据小幅度改善的不仅是计算能耗,还能四倍化权重 FIFO 的有效容量和权重内存的有效带宽。(尽管使用的是 8 比特整数,但这些应用被训练来实现与浮点数相同的准确率。)五,TPU 忽略 GPU 需要而 DNN 不需要的特征,从而缩小 TPU 芯片、节约能耗、为其他更新留下空间。TPU 芯片的大小几乎是 K80 的一半,通常运行所需能量是后者的三分之一,而它的内存却是后者的 3.5 倍。这五个因素导致 TPU 在能耗和性能方面优于 K80 GPU 30 倍。

陷阱。在设计领域专用架构时不顾架构历史。不适用通用计算的想法可能适合领域专用架构。对于 TPU 而言,三个重要的架构特征可以追溯到 1980 年代早期:脉动阵列(systolic array)、解耦访问/执行(decoupled access/execute)和复杂的指令集。第一个特征减少了大型矩阵相乘单元的面积和能耗;第二个特征在矩阵相乘单元运算期间并行获取权重;第三个特征更好地利用 PCIe bus 的有限带宽来发送指令。因此,了解架构历史的领域专用架构具备竞争优势。

谬误。如果谷歌对 CPU 使用更加高效,它得到的结果将可以媲美 TPU。由于有效使用高级向量扩展(AVX2)整数支持需要大量工作,最初在 CPU 上只有一个 DNN 有 8 位结果,其收益大约是 3.5 倍。用浮点而不是 roofline 来显示所有 CPU 结果,会更加明确(也不需要太多空间)。如果所有 DNN 都有类似的加速,性能/功耗比将分别从 41 倍和 83 倍降为 12 倍和 24 倍。

谬误。如果谷歌使用合适的新版本,GPU 结果将与 TPU 相匹配。表 3 报告了发布 GPU 和客户何时可以在云中使用 GPU 的区别。与较新的 GPU 进行公平比较将包括新的 TPU,而对于另外的 10W,我们只需使用 K80 的 GDDR5 内存就可以将 28 纳米、0.7GHz、40W TPU 的性能提高三倍。把 TPU 移动到 16 纳米工艺将进一步提高其性能/功耗。16 纳米英伟达 Pascal P40 GPU 的峰值性能是原 TPU 的一半,但在 250 瓦时,能耗却是原来的很多倍。如前所述,缺乏误差检测意味着 Google 无法再去数据中心部署 P40,因此无法在它们身上运行生产工作负载来确定其实际相对性能。

相关研究

两篇介绍 DNN ASIC 的研究文章至少可以追溯到 20 世纪 90 年代初。如 2016 年的《Communications》中所述,DianNao 家族有四种 DNN 架构,通过对 DNN 应用程序中的内存访问模式提供有效的架构支持,可以最大限度地减少片上和外部 DRAM 的内存访问。最初的 DianNao 使用 64 个 16 位整数乘法累加单元的数组。

2017图灵奖得主:通用芯片每年仅提升3%,神经专用架构才是未来

谷歌 TPU 3.0 于今年 5 月推出,其功能是 2.0 的八倍,性能高达 100petaflops。

DNN 的特定领域架构仍然是计算机架构师的热门话题,主要聚焦于稀疏矩阵架构,这是在 2015 年 TPU 首次部署之后提出的。高效推理机基于第一次传递,通过过滤出非常小的值,将权重数量减少 9 倍左右,然后使用哈夫曼编码进一步缩小数据以提高推理机的性能。Cnvlutin 避免了激活输入为零时的乘法运算,这种几率可以达到 44%,部分原因可能是线性整流函数(ReLU),非线性函数将负值转换为零,使平均性能提高了 1.4 倍。Eyeriss 是一种新颖的低功耗数据流架构,通过游程编码数据利用零来减少内存占用,并通过避免输入为零时的计算来节省功率。Minerva 是一种跨算法、结构和电路学科的协同设计系统,通过用量化数据和小值修剪激活函数的方式把功耗降低到原来的 1/8。2017 年的相关研究是 SCNN——一种稀疏和压缩卷积神经网络的加速器。权重和激活函数都被压缩在 DRAM 和内部缓冲器中,从而减少了数据传输所需的时间和能量,并允许芯片存储更大的模型。

2016 年以来的另一个趋势是用于训练的特定领域架构。例如,ScaleDeep 用来对专为 DNN 训练和推理而设计的高性能服务器进行评估,该服务器包含数千个处理器。每块芯片包含计算量大和存储量大的块,比例为 3:1,性能优于 GPU 6~28 倍。它用 16 位或 32 位浮点运算来计算。芯片通过与 DNN 通信模式匹配的高性能互连拓扑连接。和 SCNN 一样,这种拓扑只在 CNN 上评估。2016 年,CNN 仅占谷歌数据中心 TPU 工作量的 5%。计算机架构师期待对其它类型的 DNN 和硬件实现进行 ScaleDeep 评估。

DNN 似乎是 FPGA 作为数据中心计算平台的一个良好用例。部署的一个例子是 Catapult。尽管 Catapult 是在 2014 年公开发布的,但它与 TPU 是同一个时代的,因为 2015 年它与 TPU 同时在微软数据中心部署了 28 纳米 Stratix V FPGA。Catapult 运行 CNN 比普通服务器快 2.3 倍。也许 Catapult 和 TPU 最显著的区别在于,为了获得最佳性能,用户必须使用低级硬件设计语言 Verilog 编写长程序,而不是使用高级 TensorFlow 框架编写短程序;也就是说,「可再编程性」(re-programmability)来自于 TPU 的软件,而不是最快 FPGA 的固件。

总结

尽管 TPU 在 I/O 总线上,并且内存带宽相对有限,限制了其使用(六个 DNN 应用程序中有四个内存受限),但每个周期 65536 次乘法累加的一小部分仍然数目不小,如 roofline 性能模型所示。这个结果表明,Amdahl 定律的「cornucopia 推论」——大量廉价资源的低效利用仍然可以提供颇具性价比的高性能。

我们了解到,推理应用具有严格的响应时间限制,因为它们通常是面向用户的应用;因此,当面对 99% 的延迟期限时,DNN 架构需要表现良好。

TPU 芯片利用其在 MAC 和片上内存的优势运行使用特定领域 TensorFlow 框架编写的短程序,该 TensorFlow 框架比 K80 GPU 芯片快 15 倍,因此能获得 29 倍的性能/功耗优势,这与性能/总拥有成本相关。与 Haswell CPU 芯片相比,对应的比率分别为 29 和 83 倍。

有五个架构因素可以解释这种性能差距:

  • 处理器。TPU 只有一个处理器,而 K80 有 13 个,CPU 有 18 个;单线程使系统更容易保持在固定的延迟限制内。
  • 大型二维乘法单元。TPU 有一个非常大的二维乘法单元,而 CPU 和 GPU 分别只有 18 个和 13 个较小的一维乘法单元;矩阵乘法受益于二维硬件。
  • 脉动阵列。二维组织支持脉动阵列,减少寄存器访问和能量消耗。
  • 8 位整数。TPU 的应用使用 8 位整数而不是 32 位浮点运算来提高计算和内存效率。
  • 弃掉的特征。TPU 放弃了 CPU 和 GPU 所需要但是 DNN 用不到的功能,这使得 TPU 更便宜,同时可以节约资源,并允许晶体管被重新用于特定领域的板载内存。

虽然未来的 CPU 和 GPU 在运行推理时速度更快,但是使用 circa-2015 GPU 内存重新设计的 TPU 将比原来快三倍,并使其性能/功耗优势分别为 K80 和 Haswell 的 70 倍和 200 倍。

至少在过去十年中,计算机架构研究人员一直在发布基于模拟的创新成果,这些成果使用了有限的基准,并声称通用处理器的改进为 10% 或更少,而我们现在报告的收益是原来的十倍不止,这是应用于真实生产应用的真实硬件中部署的特定领域架构的收益。

商业产品之间的数量级差异在计算机架构中很少见,而这甚至可能导致 TPU 成为该领域未来工作的典型。我们预计,其它人将会迎头赶上,将门槛提得更高。

相关推荐