3. Google TPU演进史:从TPU v1到v4的架构变迁,脉动阵列与矩阵计算单元的设计哲学

聊到AI芯片,Google的TPU是个绕不开的话题。我入行那会儿,大家还在争论GPU和FPGA谁更适合做推理,Google直接甩出一颗专用芯片,把整个行业震住了。今天咱们就从头捋一遍,看看TPU从v1到v4到底变了什么,以及那个经典的脉动阵列到底妙在哪里。

3.1 TPU v1:为推理而生的“大号矩阵乘法器”

TPU v1发布于2016年,但据说Google内部2014年就开始用了。它的定位非常明确:加速推理,尤其是神经网络中的矩阵乘法。

你想想看,那时候的深度学习模型,比如早期的ResNet、Inception,推理时最耗时的就是卷积层和全连接层。这些层说白了,就是一堆矩阵乘法和加法。TPU v1干脆把整个芯片设计成一个巨大的矩阵乘法单元。

核心参数(我凭记忆写的,不一定精确,但大差不差):

  • 制程:28nm
  • 功耗:约75W(被动散热,这在当时数据中心里算很克制的)
  • 算力:92 TOPS(INT8)
  • 片上内存:28MB(统一缓冲区 + 累加器)
  • 外部带宽:DDR3-2133,约34 GB/s

TPU v1没有复杂的控制逻辑,没有缓存层级,甚至没有指令集。它就是一个定制的脉动阵列,配合一个简单的指令队列。我刚开始看它的架构图时,第一反应是:“这也太粗暴了吧?”但后来发现,这种“粗暴”恰恰是它高效的原因。

3.2 脉动阵列:数据流驱动的计算美学

脉动阵列(Systolic Array)这个概念其实很老,80年代就有。但Google把它用活了。TPU v1用的是256x256的脉动阵列,也就是65536个乘加单元(MAC)。

它的工作方式很有意思:数据像血液一样在阵列中“脉动”流动。权重提前加载到每个MAC单元里,输入数据从左到右、从上到下依次流过,每个MAC单元完成一次乘加后,把结果传给下一个。

我画个简单的示意图,帮你理解这个数据流:

脉动阵列数据流示意图(简化版 4x4) 输入数据 x1 x2 x3 x4 MAC w11 MAC w12 MAC w13 MAC w14 MAC w21 MAC w22 MAC w23 MAC w24 MAC w31 MAC w32 MAC w33 MAC w34 MAC w41 MAC w42 MAC w43 MAC w44 输出结果(累加后) y1 y2 y3 y4 图例: 输入数据流(水平) 部分和传递(垂直) MAC单元(含权重)

这种设计的好处是什么?数据复用率极高。每个输入数据被多个MAC单元共享,每个权重也被多个输入数据共享。相比GPU那种从寄存器文件反复取数的做法,脉动阵列的功耗低得多。

我个人习惯:在设计类似架构时,我会先画数据流图,看看哪些数据可以被复用。脉动阵列的本质就是“用空间换时间,用数据流换控制流”。

3.3 TPU v2:从推理到训练,引入BF16

TPU v2发布于2017年,最大的变化是:支持训练。训练和推理不一样,推理只需要前向传播,训练还需要反向传播和梯度更新。这意味着芯片需要更高的精度和更灵活的控制。

TPU v2引入了几个关键设计:

  • BF16(Brain Floating Point 16):Google自己搞的格式,动态范围和FP32一样,但精度只有7位。我一开始觉得这玩意儿不靠谱,但后来发现训练时真的够用,而且省带宽省功耗。
  • 二维脉动阵列升级:从v1的256x256变成128x128,但每个MAC单元支持混合精度(BF16乘法 + FP32累加)。
  • 增加向量单元(VPU):用于处理非矩阵运算,比如激活函数、BatchNorm等。
  • HBM高带宽内存:带宽从34 GB/s飙升到600 GB/s以上。

TPU v2还有一个有意思的点:它把多个芯片组成一个2D Torus拓扑,通过高速互联(ICI)连接。我记得当时Google的论文里提到,一个TPU v2 Pod有64个芯片,算力达到11.5 PFLOPS。这个规模在当时是相当惊人的。

3.4 TPU v3:液冷与算力翻倍

TPU v3在2018年发布,本质上是对v2的“暴力升级”。

特性 TPU v2 TPU v3
制程 16nm 16nm(同代)
算力(BF16) 45 TFLOPS 123 TFLOPS
HBM容量 8 GB 16 GB
HBM带宽 600 GB/s 900 GB/s
散热方式 风冷 液冷
互联带宽 200 GB/s 400 GB/s

TPU v3把脉动阵列的时钟频率从700MHz提到940MHz,同时增加了HBM的数量。但代价是功耗飙升,不得不上了液冷。我在做数据中心芯片时也遇到过类似问题——性能翻倍容易,散热翻倍难。

我曾经踩过一个坑:在设计某款AI加速器时,只关注了算力指标,忽略了散热设计。结果样片跑起来温度直接破百,不得不重新做封装。TPU v3的液冷方案虽然成本高,但保证了芯片能稳定运行在极限频率下。

3.5 TPU v4:稀疏性与SparseCore

TPU v4在2021年发布,这次的变化更大。Google在架构上做了几个关键创新:

  • SparseCore:专门处理稀疏矩阵的加速器。说白了,很多推荐系统里的Embedding表是稀疏的,用传统脉动阵列算效率极低。SparseCore用了一种“按需加载”的方式,只计算非零元素。
  • 脉动阵列升级:从v3的128x128变成v4的?x?,具体尺寸Google没公开,但算力从123 TFLOPS提升到275 TFLOPS(BF16)。
  • 光互联(OCI):TPU v4 Pod用了光交换机,把芯片间的互联带宽提升到TB/s级别。这个技术在当时非常前沿,我到现在都觉得Google在互联上的投入很值得学习。
  • 可重构拓扑:Pod内的芯片可以动态组成不同的拓扑结构,适应不同的模型并行策略。

TPU v4还有一个细节:它把编译器(XLA)和硬件做了深度协同。比如,编译器会自动识别稀疏模式,然后调度到SparseCore上。这种软硬件协同设计,是我认为Google最厉害的地方。

3.6 脉动阵列的设计哲学:为什么Google一直坚持?

从v1到v4,Google始终没有放弃脉动阵列。为什么?我总结了几点:

  1. 数据局部性:脉动阵列天然适合矩阵乘法,数据在阵列内流动,不需要频繁访问片外内存。这在带宽受限的场景下是巨大优势。
  2. 可扩展性:你可以把多个小阵列拼成大阵列,也可以把多个芯片拼成Pod。脉动阵列的规则结构让物理设计(布局布线)变得简单。
  3. 能效比:相比GPU的通用计算单元,脉动阵列的每瓦性能更高。Google的数据中心对功耗极其敏感,这一点很关键。

但脉动阵列也有缺点。比如,它处理不规则计算(如稀疏矩阵、动态形状)时效率不高。这也是为什么TPU v4引入了SparseCore——用专用单元弥补脉动阵列的短板。

我的看法:脉动阵列不是万能的,但在AI推理和训练的主流场景(密集矩阵乘法)中,它依然是目前能效比最高的方案之一。如果你在做一个AI芯片,不妨先问问自己:我的核心负载是什么?如果是矩阵乘法,脉动阵列值得认真考虑。

3.7 从TPU演进中我们能学到什么?

回顾TPU的四代产品,我看到了几个清晰的趋势:

  • 从专用到通用:v1只做推理,v2开始支持训练,v4加入了稀疏计算。Google在逐步扩大TPU的适用范围。
  • 从单芯片到系统:v1是单芯片,v2/v3是Pod,v4是光互联集群。Google越来越强调系统级设计。
  • 从硬件到软硬件协同:XLA编译器、SparseCore的调度策略,都说明Google在把更多复杂度从硬件转移到软件。

这些趋势对我们做芯片设计也有启发。说白了,没有完美的架构,只有最适合当前负载的架构。TPU的演进史,就是Google不断在“专用”和“通用”之间找平衡的过程。

嗯,今天就聊到这里。下一章我们会深入分析脉动阵列的微架构设计,包括数据流调度、流水线平衡和时序收敛这些实战问题。到时候我会拿一个实际项目中的案例来拆解,敬请期待。


专注资料整理