徐令予博客

考槃在涧,硕人之宽。独寐寤言,永矢弗谖。考槃在阿,硕人之薖。独寐寤歌,永矢弗过。考槃在陸,硕人之轴。独寐寤宿,永矢弗告。
个人资料
正文

谁是AI算力的未来之王?英伟达GPU vs 谷歌TPU

(2025-12-14 20:02:50) 下一个

谁是AI算力的未来之王?英伟达GPU vs 谷歌TPU 

撰文|徐令予

摘要

英伟达 GPU 长期一统 AI 算力天下的局面,正在面临严峻的挑战。随着谷歌张量处理器(TPU)的持续演进,一种不同于 CPU 和 GPU 的计算路线正在重新进入人们的视野。从硬件结构上看,TPU 的核心更接近于早期计算机系统结构中的“阵列处理器”,而非传统意义上的通用处理器。它以高度规则的二维阵列和数据流驱动的计算方式,专门服务于大规模张量运算,这恰恰契合了当代人工智能的计算本质。

令人感慨的是,阵列处理器并非新生事物。早在上世纪八十年代初,我的硕士论文题目便是《微阵列机上平行快速沃尔什–阿达马变换之实现》。未曾想到,当年被认为小众甚至逐渐淡出的阵列机技术,会在四十年后的 AI 革命中重新焕发生机,并成为推动大模型计算的重要技术基础。每念及此,不免唏嘘,这也是我写下这篇科普文章的缘由。

正文

在现代人工智能中,不论是大语言模型、图像生成模型,还是视频分析与多模态系统,它们的训练和推理都依赖一种共同的计算:高阶张量(4 阶、5 阶甚至更高阶)的乘法运算。

注意力机制是张量运算,卷积是张量运算,Embedding lookup 隐含张量运算,序列模型和多头机制依然是张量运算。深度学习本质上就是一台处理巨大张量的机器。

张量(Tensor)这个词看起来“高级”,其实它与程序员日常使用的多维数组(Multidimensional Array)完全对应:

  • 标量( A )         对应 0 阶张量
  • 向量(vector[i])   对应 1 阶张量
  • 矩阵(matrix[i][j])对应 2 阶张量
  • 三维数组(image[height][width][channel])对应 3 阶张量
  • 四维数组(slide[batch][height][width][channel])对应 4 阶张量
  • 五维数组(video[batch][time][height][width][channel])对应5阶张量

程序员在 C/C++、Python 中使用的 ndarray 或 tensor,其实就是张量的直接描述。

张量 = 有物理意义的多维数组

张量运算 = 多维数组之间的线性代数运算

深度学习的所有中间数据(激活)、模型参数(weights)、序列数据(tokens)、图像、视频,本质上都可以用多维数组来描述,因此也全部属于张量。

一个非常关键的数学事实是:高阶张量之间的乘法可以通过 reshape(重排维度)变换成矩阵乘法(GEMM)。

例如,一个 (A, B, C) 张量与一个 (C, D) 的矩阵相乘,可以 reshape 成:(A×B, C) × (C, D)

这就是训练 Transformer 时常见的 Q·K?、AV、FFN 中发生的事情。

LLM 的主要运算量,最终都落在巨大的矩阵乘法上。因此,现代 AI 可以被概括为:深度学习 -> 高维张量运算 -> 超大规模矩阵乘法。

矩阵越大,运算量呈平方级增长。在较常见的模型规模下,注意力机制中的 Q 和 K 是四阶张量,其规模大致为:16×2048×32×128。当 Q 与 K 参与乘法运算时,会通过 reshape 被转化为一个非常大的矩阵乘法。其乘加次数大约落在:10^10~10^11之间,也就是数百亿级别的乘加运算。因此一次完整训练 step 的总计算量非常容易达到百万亿到千万亿级别的乘加运算。

而 CPU 的结构天生不适合:并行度低、SIMD 宽度有限、内存带宽不足、执行计算的单元数量太少。即便堆叠数百颗 CPU,也无法在合理时间内训练一个大模型。

GPU 的大量并行计算单元本来就是为计算机图形处理中的大规模向量和矩阵运算而设计,因此在深度学习领域被迅速采用,成为算力加速器。

但 GPU 的设计目标是“通用并行处理器”,里面包含:通用 ALU、多级缓存、调度与控制逻辑、图形相关电路、线程控制与寄存器管理。这些组件在深度学习中并不需要,它们对矩阵乘法的有效算力没有什么贡献。

既然深度学习的核心只有一件事:超大矩阵乘法,为什么不造一台只做这件事的“矩阵运算机”呢?谷歌给出的答案不是更复杂的控制逻辑,也不是更灵活的指令系统,而是一种结构极其规则、几乎“笨拙”的计算阵列——二维脉动阵列(2D Systolic Array)。这是一种能够高效执行矩阵乘法的专用硬件结构,它让数据在规则阵列内流动和重复使用,从而以极低开销完成超大型矩阵运算。

一、什么是二维脉动阵列?

二维脉动阵列可以理解为一个由大量完全相同的计算单元按二维网格排列而成的阵列。在谷歌的 TPU 中,这个阵列的规模是 128×128,也就是 16384 个乘加单元(MAC)。每一个单元只做一件事:接收两个数,相乘,再把结果累加到本地寄存器中。

没有复杂指令,没有分支判断,没有线程调度,也没有缓存一致性问题。整个阵列的结构高度规则和单一,几乎像一块“逻辑内存阵列”。

“脉动(systolic)”这个名字,来自于数据在阵列中流动的方式:数据像心脏跳动一样,一拍一拍地在阵列中向前传播,而计算就在传播过程中自然完成。

二、矩阵是如何在阵列中“流动”的?

以最经典的矩阵乘法 C = A x B 为例:

  • A 的行从左侧注入,从左向右流动
  • B 的列从上方注入,从上向下流动
  • partial_sum += A(i,k) * B(k,j)

随着时钟推进,A 的行和 B 的列在阵列中“交汇”,而所有 C_{ij} 的结果会在对应的位置上被逐步累加完成,最后从右下角输出最终结果。这就是 “脉动”(systolic)名称的由来:数据像心跳一样在阵列内流动、碰撞、累加、输出。

这里的关键不在于“每个单元算得多快”,而在于:

    •    所有单元同时工作

    •    数据在阵列内部被反复重用

    •    几乎不需要反复访问外部内存

一旦矩阵被送入阵列,计算就像流水线一样持续进行,直到整块结果自然“流”出来。矩阵不像是被“算出来”的,而是被“流”出来的。

三、为什么TPU是128×128的阵列,而不是更大或更小?

128×128 并不是一个随意的数字,而是工程上的利弊权衡,阵列太小,单次并行度不够,外部数据搬运和控制开销占比会变大;阵列太大,芯片面积、时序收敛、功耗和良率都会迅速恶化。

现实中的大模型矩阵乘法,规模往往远远超过 TPU 单个阵列的大小,这显然不可能一次性塞进一个 128×128 的二维阵列中完成。解决办法并不复杂,核心思想只有一句话:把超大矩阵切分成许多 128×128 的小矩阵块(tile),然后让二维阵列一次处理一个块。TPU 并不是一次性计算整个超大矩阵,而是把它切成许多 128×128 的小块,再用一个高度规则的二维阵列,把这些小块像流水线一样快速“流”完。

四、GPU 与 TPU 的对比

总之:

GPU 是“什么都能算的并行处理器”,

TPU 是“把矩阵运算做到极致的专用部件”。

从硬件结构上看,TPU 的核心更接近于早期计算机体系结构中的“阵列处理器”。其实“陈列处理器”并非什么高新科技,该技术的研发至少在半个世纪前已经开始。七十年代未,笔者在上海交通大学读研,硕士论文的题目是:《微阵列机上平行快速沃尔什-阿达马变换之实现》。论文还发表在《计算机学报》1984年第2期。

我们当时的阵列机只有8x8个处理单元,每个单元只有整数运算功能,速度与效率也非常有限。整个阵列机由几十片中规模集成电路构成,而谷歌的128x128阵列整个集成在一个芯片上,技术的先进程度无法相比,但是整体的想法和思路还是一致的。几十年前的阵列机研究终于在今天开花结果,它将为AI的发展作出巨大贡献。每念及此,不胜唏嘘,当年的上海交通大学的微型计算机教研室的老师们还是挺不错的,他们对未来技术发展趋势极具前瞻性。

 

谨以此文致敬我的交大老师们。

徐令予 作于南加州(2025年12月12日)

[ 打印 ]
评论
目前还没有任何评论
登录后才可评论.