本文为《AI 硬件体系深度调研》系列第 05 篇。上一篇我们给"芯片篇"画了总纲:AI 芯片是算力体系的最小核心单元,分训练三高、推理三低两大阵营。本篇开始往里钻,把一颗训练芯片"拆开",看它内部五大核心模块是如何分工、如何配合的。


黄金 100 字开头

你是否好奇:一颗训练芯片里,到底塞了些什么才让它这么能算?芯片手册里的一堆模块名词,看得人头大却不知彼此怎么配合。本文按数据流顺序,把训练芯片五大核心模块逐个拆开讲明白。


一、张量计算核心阵列:算力的发动机

训练芯片的"心脏",是一块由数千个专用计算单元排成的二维阵列。它的唯一任务,就是做矩阵乘加(Multiply-Accumulate,简称 MAC)。这一块,是整颗芯片里最值钱、也最烧电的部分。

1.1 先搞懂"张量"到底在算什么

"张量"听起来高大上,其实你可以把它理解成多维数组。一维是向量,二维是矩阵,三维以上统称张量。深度神经网络的每一层,本质上都是张量之间的运算——其中最核心、最耗时的,就是矩阵乘法

为什么矩阵乘法这么重要?我们看一个最简单的全连接层:输入是一个向量 x,权重是一个矩阵 W,输出就是 W 乘以 x。一次矩阵乘法,就是成千上万次"乘再加"。模型越大,矩阵越大,乘加次数就越多。千亿参数的大模型,一次前向传播要做的乘加运算,是天文数字。

具体到硬件层面,一次"乘再加"(MAC)就是先做一次乘法、再做一次加法。张量核心里的每个计算单元,每个时钟周期就能完成一次这样的 MAC。几千个单元同时开工,一个周期就是几千次 MAC,这就是并行算力的来源。

💡 一句话:AI 计算 90% 以上的时间,都在做同一件事——矩阵乘加。所以谁能把矩阵乘加做得最快,谁就是算力王者。

1.2 为什么是"二维阵列"而不是"一堆核心"

你可能会想:CPU 里也有乘法单元,为什么训练芯片要专门排一个二维阵列?

答案在并行度和数据复用。矩阵乘法有一个黄金特性:同一个数据可以被反复使用。算 A×B 时,A 的每一行要和 B 的每一列相乘,一个数据会被用到几十次、几百次。

二维阵列的妙处,就是让数据"横向流、纵向流":权重从一侧流入,激活值从另一侧流入,每个交叉点上的计算单元同时做乘加。这样,几千个单元可以同时工作,而不是像 CPU 那样一个接一个地算。

这里的关键是"数据复用":一个权重数据进入阵列后,会被同一行的所有单元同时使用;一个激活值进入阵列后,会被同一列的所有单元同时使用。一次搬运,多个单元共享,数据搬运的开销就被摊薄了。反观 CPU,同样的数据要反复从寄存器里取,搬运开销高得多。

打个比方:CPU 是"一个老师批改作业",一本本慢慢批;张量阵列是"几百个老师同时改",每人负责一道题。速度差就在这里。

这个比喻还能再延伸一层:CPU 的老师不但改得慢,还得自己翻作业本(从内存取数);张量阵列的老师们则排成整齐的方阵,作业本自动流转到每个人面前(数据流驱动)。一边是"人找活",一边是"活找人",效率自然天差地别

1.3 卷积也是矩阵乘加

可能有读者会问:卷积神经网络(CNN)里用的是卷积,不是矩阵乘法啊?

其实卷积可以通过"数据重排"(im2col)转换成矩阵乘法。把滑动的卷积窗口展开成矩阵的行,把卷积核展开成矩阵的列,卷积运算就变成了一个规整的矩阵乘加。所以无论 CNN 还是 Transformer,底层通通收敛到矩阵乘加——这也是为什么训练芯片只要把矩阵乘加做到极致,就能通吃各种模型。

im2col 的本质,是把"滑动窗口"这种带位置变化的运算,摊平成一个没有位置概念的矩阵乘法。代价是数据会有冗余(相邻窗口有重叠),但换来的是运算模式的统一——芯片只需要做好矩阵乘加这一件事,就能覆盖所有层的计算。

⚠️ 避坑警告:不要以为"张量核心"和"GPU 的 CUDA Core"是一回事。张量核心是专门做矩阵乘加的专用单元,一个张量核心一个时钟周期能完成一个小矩阵的乘加;而普通 CUDA Core 是通用标量单元。两者在芯片里是并存的,各司其职。

1.4 阵列规模决定算力上限

张量阵列里,计算单元的数量直接决定芯片的峰值算力。单元越多、频率越高,算力越强。旗舰训练芯片的张量阵列,通常由数千个单元组成,每个单元每周期完成一次乘加,再乘上频率和阵列规模,就得到了我们熟悉的"2000 TFLOPS"级别的恐怖数字。

但这个"发动机"有个前提:它必须被"喂饱"数据。阵列再快,如果数据送不上来,单元就只能空转。于是,芯片设计者要解决的下一个问题就是——怎么把数据以最快的速度送到阵列嘴边。这就是下一节要讲的片上内存。

这里引入一个关键概念:算力与带宽的"比例匹配"。阵列算力翻一倍,数据供给能力也得翻一倍,否则新增的算力就是摆设。训练芯片设计里,"算力/带宽比"是一个必须精打细算的指标,失衡了就会一头是瓶颈。


二、三级片上内存:把数据放在手边

张量阵列算得飞快,但它有一个"致命"需求:每个时钟周期都要有新数据送进来。如果数据要跑到片外的显存里去取,来回一趟的延迟,够阵列空转几百个周期。所以,芯片里必须有贴近阵列的、极高速的缓存

2.1 三级缓存的分工

训练芯片的片上内存,通常分成三级,每一级都有明确的职责:

层级 名称 作用 特点
1 激活值缓存(Activation Buffer) 存放当前层的输入/输出激活值 频繁读写,带宽极高
2 权重缓存(Weight Buffer) 存放当前层要用的权重 只读为主,反复使用
3 SRAM 缓存 通用高速缓存,缓冲中间结果 灵活调度,容量稍大

这三级的共同特点:容量都很小(通常几十 KB 到几 MB),但带宽极高,且离计算阵列极近

给一个数量级感受:三级片上缓存加起来可能只有 几 MB,而片外 HBM 动辄 80GB,差了四个数量级。但片上缓存的访问延迟只有纳秒级,带宽却是 HBM 的几倍到十几倍。容量和速度,永远是反比,芯片设计就是在中间找平衡。

2.2 为什么必须"分级"

你可能会问:为什么不直接把所有数据都塞进最快的缓存?

答案是成本与面积。最快的 SRAM,单位面积的成本和功耗都远高于片外显存。芯片的硅面积就那么大,全堆 SRAM 就放不下计算单元了。所以只能"分级"——把最常用、最紧急的数据放在最快的地方,把大块数据放在稍慢但更大的地方

打个比方:计算阵列是灶台,三级缓存是灶台边的调料架,片外 HBM 是十米外的冷库。炒菜时常用的油盐酱醋放调料架(缓存),大量的菜放冷库(HBM),需要时再往灶台搬。这样既不用把整个冷库搬到灶台边(面积不允许),又能保证炒菜不停火。

这个"分级"策略,其实是计算机体系结构里一条经典原则的极致应用——数据访问越频繁、越紧急,就放得离计算越近。训练芯片把它做到了三层,甚至更多层,本质都是同一个思路:让最快的存储,伺候最忙的计算。

2.3 激活值和权重为什么要分开缓存

这里有个容易被忽略的细节:激活值和权重的读写模式完全不同

权重在一次推理或训练的一层里,基本是"只读、反复用"的——同一批权重会被成千上万个输入数据反复乘。所以权重缓存可以设计成"读多写少",甚至支持广播。

激活值则是"频繁读、频繁写"的——每一层的输出,就是下一层的输入,数据不停地产生、不停地被消费。所以激活值缓存要支持高频读写。

正因为两者模式不同,把它们分成两个独立的缓存(Weight Buffer 和 Activation Buffer),可以各自优化,避免互相干扰。这是芯片设计师从数据流里"抠"出来的效率。

举一个"广播"的例子:同一批权重要同时喂给阵列里的几千个单元,如果权重缓存放不下、要去 HBM 反复取,那带宽早就被拖垮了。把权重独立缓存并支持广播,一次取出来就能同时送到所有单元,这就是分开缓存的实际价值。

💡 一句话:三级片上缓存,本质是"用面积换速度"——把离灶台最近的黄金位置,留给最常用的数据

2.4 缓存虽小,却是性能关键

别看三级缓存容量加起来可能才几 MB,它直接决定了张量阵列能不能持续满负荷运转。缓存命中率高,阵列就满血;缓存命中率低,阵列就空转等数据

这也是为什么下一篇要讲的"脉动阵列"如此重要——脉动阵列的设计目标之一,就是让数据在阵列里"流动"起来,最大程度复用缓存里的数据,减少与片外的交互。缓存和阵列的配合,是训练芯片性能的生死线。

换句话说,训练芯片真正的瓶颈往往不在"算",而在"喂"——谁能把数据喂得更快、更准,谁就能把峰值算力兑现得更高。这个判断,会贯穿后面每一篇硬件分析。


三、HBM 控制器:打通片外显存

片上缓存虽快,但容量太小,装不下大模型的权重。真正的大块数据,存在片外的 HBM(高带宽内存) 里。而连接"片上缓存"和"片外 HBM"的,就是 HBM 控制器

3.1 HBM 是什么

HBM,全称 High Bandwidth Memory,是一种堆叠式的高带宽内存。它把多层 DRAM 芯片像"三明治"一样垂直堆叠起来,通过极宽的数据通路与主芯片相连。

普通显卡用的 GDDR 内存,带宽一般在几百 GB/s;而训练芯片用的 HBM,带宽动辄 几个 TB/s,是前者的好几倍。上一篇我们讲过,训练芯片"三高"之一就是超高内存带宽,这个带宽的实现,靠的就是 HBM

为什么 HBM 能做到这么高带宽?核心是堆叠 + 超宽总线。普通 GDDR 是平铺在电路板上的,走线长、位宽有限;HBM 则把多层 DRAM 垂直堆叠,紧贴着主芯片封装,用上千条短走线直连,把"距离"和"位宽"这两个带宽的天花板同时捅破

3.2 HBM 控制器的职责

有了 HBM 还不够,还得有人"指挥"数据进出。HBM 控制器,就是芯片里专门负责调度显存与片上缓存之间数据交换的模块

它的工作包括:

  • 发起读写:根据计算需求,把权重、激活值从 HBM 搬到片上缓存;
  • 调度顺序:决定先搬谁、后搬谁,尽量让计算不中断;
  • 批量传输:把零散的小请求,合并成大的连续传输,提高效率。

这四点里,“批量传输"尤其重要。HBM 对"连续大块读写"效率最高,对"零散小请求"效率极低。控制器把无数小请求合并成大传输,才能把 HBM 的带宽真正吃满。这也是为什么"数据排布”(layout)在训练里如此关键——排布得好,访问就是连续的;排布得差,访问就是碎片化的。

打个比方:HBM 是大仓库,片上缓存是车间的小货架,HBM 控制器就是那个"仓库管理员"。他的本事在于——提前预判车间接下来要什么料,在车间用完之前就把下一批料从仓库送到货架上,让车间永不停工。

3.3 "预取"是隐藏延迟的关键

HBM 再快,从片外到片上还是有一段物理距离,单次访问的延迟依然存在。HBM 控制器的核心技巧,就是"预取"(Prefetch):在计算还没用完当前数据之前,就提前把下一步要用的数据搬进缓存。

这样,当张量阵列真正需要新数据时,数据已经在缓存里等着了,片外访问的延迟就被"隐藏"在了计算时间里。这就像餐厅里,服务员在你吃完这道菜之前,就已经把下一道菜端到了传菜口——你几乎感觉不到等待。

反过来,如果预取判断错了——提前搬来的数据用不上,真正要用的数据反而没搬来——阵列就会"断粮",只能空转等待。预取的命中率,直接决定训练芯片实际能发挥出几成算力。这也是为什么大模型训练时,框架层的数据加载策略和芯片层的预取策略同样重要。

💡 效率技巧:评估训练芯片时,不要只盯着峰值算力,还要看内存带宽和预取能力。带宽不够,算力再高也是"饿着肚子"跑。


四、多芯片互联模块:为多卡训练而生

上一篇我们提到,训练芯片"三高"的第三高是"多芯片高速协同"。这一节,我们就看这颗芯片里,专门为多卡协同而生的互联模块

4.1 为什么单卡不够

大模型的参数量早就超过了一颗芯片能装下的范围。以千亿参数模型为例,即使用 BF16 精度,权重就有 200GB 以上,远超单卡显存(通常 80GB)。所以,训练必须把模型切分到几十张、几百张甚至几千张卡上,让它们协同工作。

切分的方式有很多种:按层切(流水并行)、按张量切(张量并行)、按数据切(数据并行)。但无论哪种切法,卡与卡之间都必须通信——因为模型是一个整体,切开的每一块都依赖其他块的结果。

协同训练时,卡与卡之间要频繁交换数据——梯度要同步、激活值要传递、权重要广播。如果卡与卡之间的通信慢,整批训练就会被最慢的那张卡拖住。

4.2 互联模块的作用

多芯片互联模块,就是芯片上专门负责芯片间直接数据交互的接口。它的作用可以概括为三点:

  • 点对点直连:让两颗芯片之间可以直接传输数据,不必绕道 CPU 或系统总线;
  • 高速带宽:卡间互联带宽动辄几百 GB/s 甚至上 TB/s,尽量追平片内通信;
  • 低延迟:让跨卡的数据交换,几乎感觉不到"跨机"的延迟。

在大规模集群里,互联还涉及拓扑结构——几百上千张卡怎么连,是全互联、还是分组、还是环状。不同的拓扑,决定了通信效率和成本之间的权衡。互联模块提供的是"单芯片级"的直连能力,而拓扑则是系统层面怎么把这种能力组织起来

打个比方:多卡训练是一群人一起算一道大题,互联模块就是他们之间的"对讲机"。对讲机越清晰、越同步,协作效率越高;对讲机一卡壳,大家就得停下来等。

4.3 芯片间"直接"交互有多重要

这里的关键词是"直接"。如果芯片之间不能直接通信,就必须通过 CPU、PCIe、网络层层中转,每一层中转都是一次延迟和带宽损耗

训练芯片把互联模块直接集成在芯片内部,让芯片 A 的数据可以"点对点"直达芯片 B,中间不绕任何弯路。这就是为什么大规模训练集群里,卡间通信能做到接近片内通信的速度——因为互联模块把"卡与卡"的距离,压缩到了"芯片与芯片"的距离

不过要诚实地说,卡间通信再快,也快不过片内。所以大规模训练的"理想状态",是把通信和计算重叠起来:一边算、一边传,让通信的时间"藏"在计算里。这需要互联模块、调度器和上层框架三方配合,是训练系统优化的核心战场之一。

💡 一句话:互联模块是训练芯片从"单打独斗"走向"千卡军团"的桥梁。没有它,大模型训练无从谈起。


五、全局控制单元:芯片的"大脑"

前面四个模块,分别负责"算"(张量阵列)、“缓存”(三级片上内存)、“取数”(HBM 控制器)、“协同”(互联模块)。但谁来决定"什么时候算什么、数据从哪里来、结果往哪里去"?答案是 全局控制单元——芯片的"大脑"。

5.1 解析框架指令

训练框架(如 PyTorch、TensorFlow)会下发一条条计算指令,比如"执行这个矩阵乘法"“把结果写回缓存”。全局控制单元负责解析这些指令,把它们翻译成芯片内部各个模块能理解的信号。

现代训练框架的指令,往往已经是高度抽象的"计算图"节点,而不是最底层的硬件信号。从"图"到"电路"之间,隔着好几层翻译:先拆成算子,再拆成微操作,最后才是控制信号。全局控制单元就站在最底层,负责把这最后一步翻译做对、做快。

这一步看似简单,实则关键:框架的指令是"高层语言",芯片的模块是"底层硬件",控制单元就是中间的翻译官。翻译得准不准、快不快,直接影响整颗芯片的利用率。

5.2 拆分调度到各核心

一条矩阵乘法指令,往往要拆分成无数个"小任务",分配到阵列里成千上万个计算单元上。全局控制单元负责这个拆分和调度——哪个单元算矩阵的哪一块、哪些数据先送、哪些后送,都由它统一安排。

打个比方:全局控制单元是工厂的调度中心,张量阵列是车间里的机器,控制单元负责把订单拆成工序、派发给每台机器。调度得好,机器满负荷;调度得差,机器空转等料。

调度的"粒度"也很讲究:拆得太粗,单元之间负载不均,快的等慢的;拆得太细,调度本身的开销又太大。一个好的调度器,要在"负载均衡"和"调度开销"之间找到最优解,这是芯片设计里极吃经验的环节。

5.3 同步时序

训练芯片是高度并行的——几千个计算单元同时干活,数据在缓存、显存、阵列之间不停流动。如果各模块的节奏对不上,就会出现"算得太快、数据没到"或"数据到了、还没轮到算"的错乱

全局控制单元的第三个职责,就是同步各模块的时序,让"取数—缓存—计算—写回"这条流水线严丝合缝地运转。这也是为什么训练芯片的运行,非常依赖精确的时钟和调度——一个时序上的失误,就可能让整颗芯片的效率腰斩

可以想象一条流水线:取数、缓存、计算、写回,四个工位同时开工。任何一个工位节奏快了或慢了,都会让后面的工位要么等、要么堵。全局控制单元就像流水线的节拍器,让每个工位踩着同一个节拍,整体吞吐才能最大化。

💡 一句话总结:张量阵列是肌肉,三级缓存是近处的补给,HBM 控制器是远端的后勤,互联模块是对外的协作,全局控制单元是大脑。五大模块缺一不可,共同组成一台精密的"算力机器"。


配图

图 1:训练芯片五大模块结构图

flowchart LR
    CTRL[全局控制单元<br/>解析指令/调度/同步] --> ARRAY[张量计算核心阵列<br/>数千专用单元·矩阵乘加]
    CTRL --> CACHE[三级片上内存<br/>SRAM / Weight Buffer / Activation Buffer]
    CACHE <--> ARRAY
    HBMCTRL[HBM 控制器] <--> CACHE
    HBMCTRL <--> HBM[片外 HBM 高带宽内存]
    LINK[多芯片互联模块] <--> ARRAY
    LINK <--> OTHER[其他训练芯片]

五大模块各司其职:控制单元是大脑,阵列是肌肉,缓存是近补给,HBM 是远后勤,互联是对外协作。

图 2:数据在三级片上内存与 HBM 之间的流动示意图

sequenceDiagram
    participant HBM as 片外HBM
    participant CTRL as HBM控制器
    participant CACHE as 三级片上缓存
    participant ARRAY as 张量计算阵列
    CTRL->>HBM: 预取权重/激活值
    HBM-->>CTRL: 返回数据
    CTRL->>CACHE: 写入缓存
    CACHE->>ARRAY: 按需供给数据
    ARRAY->>CACHE: 写回中间结果
    CACHE->>CTRL: 溢出回写
    CTRL->>HBM: 写回显存

数据从 HBM 经控制器预取到缓存,再以极低延迟供给阵列;算完的中间结果写回缓存,最终溢出回写 HBM。预取的目标,就是让阵列"永远有数据可算"。


看到这里你会发现,训练芯片的五大模块,其实都围绕同一个目标转:让张量阵列一刻不停地做矩阵乘加。缓存是为了喂饱它,HBM 控制器是为了搬得动它,互联是为了放大它,控制单元是为了调度它。理解了这条主线,训练芯片就不再是一堆神秘名词的堆砌。

写在最后

一颗训练芯片,拆开来看,就是这五大模块:张量计算核心阵列负责"算",三级片上内存负责"喂",HBM 控制器负责"搬",多芯片互联负责"连",全局控制单元负责"指挥"。它们环环相扣,把海量的矩阵乘法变成一场有条不紊的流水线。


【思考题】

三级片上缓存容量都很小,却要喂饱庞大的阵列,调度策略出错会怎样?欢迎评论。(提示:想想缓存未命中时,阵列会不会空转,以及预取失败对整体吞吐的影响。)

【系列文章预告】

下一篇讲训练芯片的"灵魂"——脉动阵列,为什么它能把数据搬运开销降一个数量级。


标签:训练芯片架构、张量核心、片上内存、HBM、多芯片互联、AI芯片、硬件架构


张量计算核心阵列(数千专用单元二维阵列,专做矩阵乘加/卷积)、分层高带宽片上内存(SRAM 缓存 + 权重缓存 Weight Buffer + 激活值缓存 Activation Buffer 三级)、HBM 控制器(对接外部 HBM,调度显存与片上缓存大规模交互)、多芯片互联模块(支持大规模多卡协同,芯片间直接数据交互)、全局控制单元(解析框架指令,拆分调度到各核心,同步时序)。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐