社会焦点

Google深度揭秘TPU:一文看懂内部原理,以及为何碾压GPU

字号+ 作者: 来源: 2017-05-14

Google深度揭秘TPU:一文看懂内部原理,以及为何碾压GPU,tpu是什么材质,tpu和硅胶哪个好,tpu和tpr的区别,tpu聚氨酯弹性体耐温等级,tpu原料价格走势

  李林 舒石 编译整理

  量子位 报道 | 公众号 QbitAI

原文发布于Google云

作者:

  谷歌云 Kaz Sato, Staff Developer Advocate

  谷歌大脑软件工程师Cliff Young, Software Engineer

  谷歌大脑杰出工程师David Patterson

  搜索、街景、照片、翻译,这些Google提供的服务,都使用了Google的TPU(张量处理器)来加速背后的神经网络计算。

Google深度揭秘TPU:一文看懂内部原理,以及为何碾压GPU

  △在PCB板上的Google首款TPU和部署了TPU的数据中心

  去年Google推出TPU并在近期对这一芯片的性能和架构进行了详细的研究。简单的结论是:TPU与同期的CPU和GPU相比,可以提供15-30倍的性能提升,以及30-80倍的效率(性能/瓦特)提升。

  这意味着,Google的服务既可以大规模运行于最先进的神经网络,而且可以把成本控制在可接受的程度上。以下的内容,将深入解读Google TPU中的技术,并且讨论如何实现更为出色的性能。

  通往TPU之路

  早在2006年,Google就在考虑为神经网络构建一个专用集成电路(ASIC)。2013年这个需求变得更加紧迫,当时Google意识到快速增长的计算需求,可能意味着数据中心的数量需要翻番才能满足。

  通常而言,ASIC的开发需要耗时数年。但具体到TPU而言,从设计到验证、构建和部署到数据中心里,只需要15个月。

  TPU ASIC采用了28nm工艺制造,主频700MHz,功耗40W。为了尽快把TPU部署到现有的服务器中,Google选择把这个芯片打包成外部扩展加速器,然后插到SATA硬盘插槽里使用。所以TPU通过PCIe Gen3 x16总线与主机相连,也就是说12.5GB/s的有效带宽。

  用神经网络预测

  要说明TPU的设计思路,需要先来简介一下神经网络的计算。

Google深度揭秘TPU:一文看懂内部原理,以及为何碾压GPU

  这是一个TensorFlow Playground的例子。用以训练一个神经网络,以标签对数据进行分类,或者对缺失数据进行估计,或者推断未来的数据。对于推断来说,神经网络中的每个神经元都进行如下计算:

  • 输入数据(x)乘以权重(w)以表示信号强度

  • 乘积加总,成为代表神经元状态的唯一值

  • 应用激活函数(f),例如ReLU、Sigmoid等调节神经元

  • Google深度揭秘TPU:一文看懂内部原理,以及为何碾压GPU

      △神经网络把输入数据与权重矩阵相乘,并输入激活函数

      例如,对于有三个输入数据和两个全连接神经元的单层神经网络而言,需要把输入和权重进行六次相乘,并得出两组乘积之和。这个乘法和加法序列,可以写成一个矩阵乘法,然后通过激活函数进一步处理矩阵的输出。

      在更复杂的神经网络架构中,乘法矩阵通常也是计算量最大的部分。

      实际业务中需要多少次乘法运算?2016年7月,Google团队调查了实际业务中,六个有代表性的神经网络应用,结果如下表所示:

    Google深度揭秘TPU:一文看懂内部原理,以及为何碾压GPU

      如上表所示,每个神经网络中的权重数量从500万到1亿不等。每一个预测,都需要许多步的输入数据和权重矩阵相乘,并输入到激活函数中。

      总而言之,计算量超大。作为优化的第一步,Google应用了一种称为量化的技术进行整数运算,而不是在CPU或者GPU上对所有数学工作进行32位或者16位浮点运算。这能减少所需的内存容量和计算资源。

      神经网络中的量化

      通常而言,神经网络的预测不需要32位或16浮点计算精度,通过一些方法,可以用8位整数对神经网络进行预测,并保持适当的准确度。

    所谓量化,就是一种使用8位整数来近似预设的最小值和最大值之间任意数值的优化技术。

      Google深度揭秘TPU:一文看懂内部原理,以及为何碾压GPU

      △TensorFlow中的量化

      量化是降低神经网络预测成本的利器,同时带来的内存减少也很重要,特别是对于移动和嵌入式部署。举个例子,在Inception中应用量化之后,这个图像识别模型能从91MB压缩到23MB,成功瘦身四分之三。

      使用整数而不是浮点计算,大大减小了TPU的硬件尺寸和功耗。一个TPU钟包含65,536个8位整数乘法器。云环境中使用的主流GPU,通常包含数千个32位浮点乘法器。只要能用8位满足精度需求,就能带来25倍以上的性能提升。

      RISC,CISC和TPU指令集

      可编程性是TPU的另一个重要设计目标。TPU不是设计用来运行某一种神经网络,而是要能加速许多不同类型的模型。

      大多数当代CPU都采用了精简指令集(RISC)。但Google选择复杂指令集(CISC)作为TPU指令集的基础,这一指令集侧重于运行更复杂的任务。

      我们来看看TPU的结构图。

    Google深度揭秘TPU:一文看懂内部原理,以及为何碾压GPU

      TPU包括以下计算资源:

  • 矩阵乘法单元(MUX):65,536个8位乘法和加法单元,运行矩阵计算

  • 统一缓冲(UB):作为寄存器工作的24MB容量SRAM

  • 激活单元(AU):硬件连接的激活函数

  •   为了控制MUX、UB和AU进行计算,Google定义了十几个专门为神经网络推理而设计的高级指令。以下是五个例子。

    Google深度揭秘TPU:一文看懂内部原理,以及为何碾压GPU

      简而言之,TPU设计封装了神经网络计算的本质,可以针对各种神经网络模型进行编程。为了编程,Google还创建了一个编译器和软件栈,将来自TensorFlow图的API调用,转化成TPU指令。

    Google深度揭秘TPU:一文看懂内部原理,以及为何碾压GPU

      △从TensorFlow到TPU:软件堆栈 矩阵乘法单元的并行计算

      典型的RISC处理器提供简单计算的指令,例如乘法或加法。这些事所谓的标量(Scalar)处理器,因为它们每个指令处理单一运算,即标量运算。

      即使主频千兆赫兹的CPU,仍然需要很长时间才能通过一系列标量运算来完成大型矩阵的计算。改进的方法就是矢量(Vector)运算,同时针对多个数据元素执行相同的操作。

    转载请注明出处。


    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章