Google深度揭秘TPU:一文看懂原理,以及为何碾压GPU
ccwgpt 2024-10-10 04:44 42 浏览 0 评论
李林 舒石 编译整理
量子位 报道 | 公众号 QbitAI
搜索、街景、照片、翻译,这些Google提供的服务,都使用了Google的TPU(张量处理器)来加速背后的神经网络计算。
△ 在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的设计思路,需要先来简介一下神经网络的计算。
这是一个TensorFlow Playground的例子。用以训练一个神经网络,以标签对数据进行分类,或者对缺失数据进行估计,或者推断未来的数据。对于推断来说,神经网络中的每个神经元都进行如下计算:
输入数据(x)乘以权重(w)以表示信号强度
乘积加总,成为代表神经元状态的唯一值
应用激活函数(f),例如ReLU、Sigmoid等调节神经元
△ 神经网络把输入数据与权重矩阵相乘,并输入激活函数
例如,对于有三个输入数据和两个全连接神经元的单层神经网络而言,需要把输入和权重进行六次相乘,并得出两组乘积之和。这个乘法和加法序列,可以写成一个矩阵乘法,然后通过激活函数进一步处理矩阵的输出。
在更复杂的神经网络架构中,乘法矩阵通常也是计算量最大的部分。
实际业务中需要多少次乘法运算?2016年7月,Google团队调查了实际业务中,六个有代表性的神经网络应用,结果如下表所示:
如上表所示,每个神经网络中的权重数量从500万到1亿不等。每一个预测,都需要许多步的输入数据和权重矩阵相乘,并输入到激活函数中。
总而言之,计算量超大。作为优化的第一步,Google应用了一种称为量化的技术进行整数运算,而不是在CPU或者GPU上对所有数学工作进行32位或者16位浮点运算。这能减少所需的内存容量和计算资源。
神经网络中的量化
通常而言,神经网络的预测不需要32位或16浮点计算精度,通过一些方法,可以用8位整数对神经网络进行预测,并保持适当的准确度。
所谓量化,就是一种使用8位整数来近似预设的最小值和最大值之间任意数值的优化技术。
△ TensorFlow中的量化
量化是降低神经网络预测成本的利器,同时带来的内存减少也很重要,特别是对于移动和嵌入式部署。举个例子,在Inception中应用量化之后,这个图像识别模型能从91MB压缩到23MB,成功瘦身四分之三。
使用整数而不是浮点计算,大大减小了TPU的硬件尺寸和功耗。一个TPU钟包含65,536个8位整数乘法器。云环境中使用的主流GPU,通常包含数千个32位浮点乘法器。只要能用8位满足精度需求,就能带来25倍以上的性能提升。
RISC,CISC和TPU指令集
可编程性是TPU的另一个重要设计目标。TPU不是设计用来运行某一种神经网络,而是要能加速许多不同类型的模型。
大多数当代CPU都采用了精简指令集(RISC)。但Google选择复杂指令集(CISC)作为TPU指令集的基础,这一指令集侧重于运行更复杂的任务。
我们来看看TPU的结构图。
TPU包括以下计算资源:
矩阵乘法单元(MUX):65,536个8位乘法和加法单元,运行矩阵计算
统一缓冲(UB):作为寄存器工作的24MB容量SRAM
激活单元(AU):硬件连接的激活函数
为了控制MUX、UB和AU进行计算,Google定义了十几个专门为神经网络推理而设计的高级指令。以下是五个例子。
简而言之,TPU设计封装了神经网络计算的本质,可以针对各种神经网络模型进行编程。为了编程,Google还创建了一个编译器和软件栈,将来自TensorFlow图的API调用,转化成TPU指令。
△ 从TensorFlow到TPU:软件堆栈
矩阵乘法单元的并行计算
典型的RISC处理器提供简单计算的指令,例如乘法或加法。这些事所谓的标量(Scalar)处理器,因为它们每个指令处理单一运算,即标量运算。
即使主频千兆赫兹的CPU,仍然需要很长时间才能通过一系列标量运算来完成大型矩阵的计算。改进的方法就是矢量(Vector)运算,同时针对多个数据元素执行相同的操作。
GPU的流处理器(SM)就是一种高效的向量处理器,赞单个时钟周期内,可以处理数百到数千次运算。
至于TPU,Google为其设计了MXU作为矩阵处理器,可以在单个时钟周期内处理数十万次运算,也就是矩阵(Matrix)运算。
TPU的核心:脉动阵列
MXU有着与传统CPU、GPU截然不同的架构,称为脉动阵列(systolic array)。之所以叫“脉动”,是因为在这种结构中,数据一波一波地流过芯片,与心脏跳动供血的方式类似。
如图所示,CPU和GPU在每次运算中都需要从多个寄存器(register)中进行存取;而TPU的脉动阵列将多个运算逻辑单元(ALU)串联在一起,复用从一个寄存器中读取的结果。
MXU中的权值阵列专门为矩阵乘法运算进行了优化,并不适用于通用计算。
△ 脉动阵列中,输入向量与权值矩阵相乘
△ 脉动阵列中,输入矩阵与权值矩阵相乘
MXU的脉动阵列包含256 × 256 = 65,536个ALU,也就是说TPU每个周期可以处理65,536次8位整数的乘法和加法。
TPU以700兆赫兹的功率运行,也就是说,它每秒可以运行65,536 × 700,000,000 = 46 × 1012次乘法和加法运算,或每秒92万亿(92 × 1012)次矩阵单元中的运算。
△ TPU中的MXU
我们对CPU、GPU和TPU的每周期算术运算量进行一下对比:
每周期运算量 | |
---|---|
CPU | 数个 |
CPU (向量扩展) | 数十 |
GPU | 数万 |
TPU | 数十万 |
这种基于复杂指令集计算(CISC)的矩阵运算设计,实现了出色的性能功耗比:TPU的性能功耗比,比同时期的CPU强83倍,比同时期的GPU强29倍。
极简&确定性的设计
极简这一点,在Google之前发布的TPU论文第8页提到过。与CPU和GPU相比,单用途的TPU就是一个单线程芯片,不需要考虑缓存、分支预测、多道处理等问题。
TPU的设计之简洁,从冲模平面图上就能看出来:
△ 黄色代表运算单元;蓝色是数据单元;绿色是I/O,红色是控制逻辑单元。
与CPU和GPU相比,TPU的控制单元更小,更容易设计,面积只占了整个冲模的2%,给片上存储器和运算单元留下了更大的空间。而且,TPU的大小只有其他芯片的一半。硅片越小,成本越低,良品率也越高。
而确定性,是单用途带来的另一个优势。CPU和GPU需要考虑各种任务上的性能优化,因此会有越来越复杂的机制,带来的副作用就是这些处理器的行为非常难以预测。
而用TPU,我们能轻易预测运行一个神经网络、得出预测,需要多长时间,这样,我们能让芯片以吞吐量接近峰值的状态运行,同时严格控制延迟。
以上面提到的MLP0为例,在同样将延迟控制在7毫秒之内的情况下,TPU的吞吐量是CPU和GPU的15到30倍。
△ 各种处理器上每秒可运行的MLP0预测
下面,是TPU、CPU、GPU在六种神经网络上的性能对比。在CNN1上,TPU性能最为惊人,达到了CPU的71倍。
总结
如上文所述,TPU性能强劲的秘诀,是因为它专注于神经网络推断。这使得量化选择、CISC指令集、矩阵处理器和最小设计都成为可能。
神经网络正推动计算模式的转变,Google预计未来几年中,TPU将成为快速、智能和价格实惠的重要芯片。
原文发布于Google云
作者:
谷歌云 Kaz Sato, Staff Developer Advocate
谷歌大脑软件工程师Cliff Young, Software Engineer
谷歌大脑杰出工程师David Patterson
【完】
招聘
量子位正在招募编辑记者、运营、产品等岗位,工作地点在北京中关村。相关细节,请在公众号对话界面,回复:“招聘”。
One More Thing…
今天AI界还有哪些事值得关注?在量子位(QbitAI)公众号对话界面回复“今天”,看我们全网搜罗的AI行业和研究动态。笔芯~
相关推荐
- React 开发翻车现场!这 6 个救命技巧,90% 工程师居然现在才知道
-
前端圈最近都在卷React18新特性,可咱开发时踩的坑却一个比一个离谱!组件卡死、状态乱套、路由错乱...别担心!今天分享6个超实用的React实战技巧,让你轻松拿捏开发难题,代码直接...
- Web前端:React JS越来越受欢迎,它的主要优点为什么要使用它?
-
ReactJS是一个开源JavaScript库,用于为单页应用程序构建用户界面,它还为不同的移动应用程序提供视图层,并创建可重用的UI组件。 我们可以在Web应用程序的数据中创建特定的更改,而...
- 性能焦虑!前端人必看!5 个 React 组件优化神技! 颠覆你的认知!
-
在前端开发的赛道上,性能优化就像一场永不停歇的马拉松。作为前端工程师,你是否常常为React组件的性能问题头疼不已?页面加载缓慢、组件频繁重渲染,这些痛点分分钟让开发进度受阻。别担心!今天就来分享...
- React 实战必学!99% 工程师踩过的 5 大坑,3 招教你轻松破解
-
前端开发的小伙伴们,咱就是说,React现在可是前端界的“顶流明星”,热度一直居高不下!但用它开发项目的时候,是不是总有那么些瞬间,让你怀疑人生,对着屏幕疯狂抓头发?别慌!今天就给大家分享几个超实...
- 惬意!午间一道 React 题,轻松拿捏前端面试小技巧
-
忙碌了一上午,眼睛酸涩、脑子发懵?别急着刷短视频“放空”,不如花几分钟和我一起“品尝”一道React面试题小甜点!就像在阳光洒满窗台的午后,泡一杯热茶,惬意又能悄悄涨知识,何乐而不为?最近,...
- 一起深入盘点 2025 年 React 发展的 10个趋势?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.React服务器组件React服务...
- 前端掉坑血泪史!4 个 React 性能优化绝招让页面秒开
-
在前端圈子里摸爬滚打这么多年,我发现React开发时踩坑的经历大家都大同小异。页面加载慢、组件频繁重渲染、状态管理混乱……这些痛点,相信不少前端工程师都感同身受。别愁!今天就给大家分享4个超...
- 前端人崩溃瞬间!5 招 React 实战技巧让项目起死回生
-
有没有在写React项目时,遇到页面卡顿到怀疑人生、数据更新不及时、代码逻辑混乱到无从下手的情况?别慌!作为摸爬滚打多年的前端老炮,今天就把5个救命级的React实战技巧倾囊相授,帮你轻松...
- 8.3K star!React Bits,让你拥有全网几乎所有动画效果
-
前端开源项目101专栏:一个能让你更快接触到高质量开源项目的地方。我会探索分享精选101个高质量的开源项目。这是系列的第7篇文章,分享一套拥有计划全网所有动画效果,且创意最丰富的动画React组...
- 开始学习React - 概览和演示教程
-
#头条创作挑战赛#本文同步本人掘金平台的原创翻译:https://juejin.cn/post/6844903823085944846当我刚开始学习JavaScript的时候,我就听说了React,但...
- 阿里AI工具Web Dev上线!一句话生成React网页
-
5月11日,阿里巴巴推出全新AI工具“WebDev”,支持用户通过一句话指令生成网页应用。该工具集成HTML、CSS、JavaScript三大前端核心技术,并统一采用React框架实现,可在数秒内创...
- JS流行框架/库排名Top100,看看你熟知的Js排第几
-
权威的JavaScript趋势榜stats.js.org每15分钟根据github上的stars和forks总数实时汇总出JavaScript开源项目的流行度排名,一起来看看你所熟知的项目排名第几...
- 新手如何搭建个人网站
-
ElementUl是饿了么前端团队推出的桌面端UI框架,具有是简洁、直观、强悍和低学习成本等优势,非常适合初学者使用。因此,本次项目使用ElementUI框架来完成个人博客的主体开发,欢迎大家讨论...
- 站在巨人肩膀上的 .NET 通用权限开发框架:Admin.NET
-
站在巨人肩膀上的.NET通用权限开发框架Admin.NET是一个面向.NET程序员的低代码平台,java平台类似的框架有ruoyi,芋道,JeelowCode等。这类框架普遍采用前后端分离的开发技...
- Python+selenium自动化之判定元素是否存在
-
在测试过程中,我碰到过这类的问题,使用find_element却找不到某个元素而产生异常,这就需要在操作某个元素之前判定该元素是否存在,而selenium中没有判定元素是否存在的方法,或者判定相同的元...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- React 开发翻车现场!这 6 个救命技巧,90% 工程师居然现在才知道
- Web前端:React JS越来越受欢迎,它的主要优点为什么要使用它?
- 性能焦虑!前端人必看!5 个 React 组件优化神技! 颠覆你的认知!
- React 实战必学!99% 工程师踩过的 5 大坑,3 招教你轻松破解
- 惬意!午间一道 React 题,轻松拿捏前端面试小技巧
- 一起深入盘点 2025 年 React 发展的 10个趋势?
- 前端掉坑血泪史!4 个 React 性能优化绝招让页面秒开
- 前端人崩溃瞬间!5 招 React 实战技巧让项目起死回生
- 8.3K star!React Bits,让你拥有全网几乎所有动画效果
- 开始学习React - 概览和演示教程
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- express框架 (43)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)