再快的 GPU 也要等数据:互连为何常常限制 AI 扩展

再快的 GPU 也要等数据:互连为何常常限制 AI 扩展

再快的 GPU 也要等数据:互连为何常常限制 AI 扩展

一张芯片可以更快地乘矩阵;一整个系统必须让计算、内存、网络和同步同时不掉队。

看一张 AI 加速卡的性能表,很容易产生一种错觉:只要再买几张,数字就应该相加。

一张卡每秒完成一份工作,八张卡就完成八份;芯片继续变快,集群就继续变快。可真正把模型放上去后,新增设备常常没有带来等比例速度。计算单元在等待数据,显存里装不下完整状态,梯度堵在同步路上,一台慢节点又让其他节点一起停下。

单卡性能回答的是“一个引擎有多强”。AI 系统扩展面对的却是另一个问题:多少有用数据能在正确时刻到达正确的计算单元,并让成百上千个并行任务保持一致?

这就是为什么互连比算术峰值更容易成为下一道墙。

一张卡也不只是在计算

一次模型运算至少经过四个层次:

  1. 计算单元执行矩阵乘、归一化和其他算子;
  2. 片上缓存与寄存器搬运可复用的数据;
  3. 设备内存提供权重、激活、优化器状态和缓存;
  4. 多设备互连交换梯度、激活、参数分片或路由后的 token。

只看 FLOPS,相当于只统计厨师每分钟能切多少刀,却不统计食材能否送到案板。

Roofline 模型给出了一个很实用的上界:应用性能受峰值计算能力与“内存带宽乘以算术强度”两者中较小者限制。算术强度是每搬运一个字节能完成多少计算。数据若被重复使用很多次,计算单元可能成为瓶颈;数据只用一次就丢掉,内存带宽会先耗尽。

因此,单卡内部已经存在一堵“内存墙”。当模型放不进一张卡、或者我们想用更多卡缩短时间时,还会再增加一层通信墙。

多卡不是相加,而是缴纳不同的通信税

“多卡训练”不是一种通信模式,而是几种税制。

数据并行让每张卡处理不同样本,再汇总梯度。每轮计算可以相对独立,但梯度最终需要通过 AllReduce 等集合通信达成一致。

张量并行把一个大矩阵运算拆到多卡。模型的一层尚未结束,设备之间就可能要交换部分结果,因此通信频繁,并且处在关键路径上。

流水线并行把不同层放到不同阶段。它减少了某些全局通信,却引入流水线气泡:一个阶段迟到,下游就没有工作;切得太细,微批次调度和边界传输又会侵蚀收益。

专家并行只激活部分专家,但 token 必须被路由到拥有对应专家的设备。它常产生 All-to-All 模式,流量分布还可能因为路由不均而倾斜。

这些并行策略可以组合,却不会让代价消失。它们只是在计算、内存容量、带宽、延迟和实现复杂度之间重新分账。

为什么链路比算术阵列更难扩展

首先,数据必须经过真实的物理路径。芯片内部可以通过更密集的计算阵列和数据复用提高吞吐;跨芯片的数据要经过封装、收发器、链路、交换设备和更长的线路。每一层都有带宽、功耗、信号完整性、端口数量和成本限制。Horowitz 对计算能耗的经典分析也提醒我们,移动数据往往比完成一次简单算术更昂贵;具体数字会随工艺变化,但“距离与层级决定数据移动成本”这个设计事实没有消失。

其次,拓扑限制了总交通量。每条点对点链路很快,不代表所有设备能同时以这个速度互相通信。真正关键的是交换拓扑、二分带宽、链路竞争与路由。宣传页上的单链路峰值,无法描述一次大规模集合通信能得到多少有效带宽。

第三,同步会把局部延迟变成全局等待。同步训练中,快设备不能带着旧梯度先走。数据读取抖动、某次缓存失效、网络拥塞或一台设备降速,都可能把尾延迟传播给整个组。平均带宽不错,仍然可能因为最慢一步而降低利用率。

第四,规模越大,协调问题越多。工作负载需要感知拓扑的放置、通信与计算重叠、内存分片、微批次安排、故障恢复和集合算法选择。硬件链路存在,并不等于软件能把它用满。

单卡算力是一项局部能力;集群吞吐是许多局部能力的乘积。乘积里任何一项接近零,其他峰值都只能等待。

通信不是指数爆炸,扩展效率仍会下降

把多 GPU 通信说成“设备一多,代价就指数上升”并不准确。

以环形 AllReduce 为例,若每个参与者需要归约大小为 S 的数据,在均匀分块、链路平衡且忽略协议额外开销的理想模型下,每个参与者发送的数据量约为 2(N-1)S/N,随着设备数 N 增长趋近 2S,并非指数爆炸;但它需要随 N 增加的通信阶段。树形算法能减少阶段数,却有不同的带宽使用方式。真实表现还取决于消息大小、延迟、拓扑、并发流量、通信库和实现。

问题在于,强扩展时每张卡分到的计算会越来越少,而不可完全消除的同步和启动延迟仍在。假设一个训练步原来计算 100 毫秒、通信 5 毫秒;计算被更多设备分摊到 10 毫秒后,即使通信保持 5 毫秒不变,它也从不起眼的 5% 左右变成了三分之一。互连没有变慢,只是计算把它暴露出来了。

这就是扩展效率下降最常见的形状:不是通信量突然变成天文数字,而是有用计算被压缩后,数据移动和协调无法同比缩短。

并非每个任务都先撞上互连瓶颈

并非所有 AI 工作负载都会先被互连限制。

高算术强度的大型矩阵乘,如果本地批量足够大,仍可能由计算吞吐限制。单设备上的小批量自回归推理,常常先受设备内存带宽约束。一个模型若完整装在单卡并且没有跨卡依赖,集群互连几乎不参与关键路径。

反过来,频繁交换激活的模型并行、细粒度专家路由、低批量的分布式推理,以及计算量很小却需要全局同步的任务,更容易受延迟或带宽限制。

所以“通信比计算更难”不是自然定律,而是扩展后的系统条件。正确的问题不是二选一,而是找出每个阶段的主导比率。

别先数卡,先算五项系统账

判断一个 AI 系统是否真能扩展,应优先测量:

  • 每完成一次有用计算,需要跨内存层级和跨设备移动多少字节;
  • 关键路径上每步有多少次集合通信,最大消息与最小消息分别是什么;
  • 通信有多少被计算真正覆盖,而不是仅在时间线上重叠;
  • 工作负载是否匹配物理拓扑,瓶颈交换链路的利用率和拥塞如何;
  • 设备增加后,端到端时间、能耗和故障率怎样变化,而不只看理论峰值总和。

优化也应围绕这些指标:提高数据复用,减少不必要的全局同步;选择合适的并行维度;把频繁通信的任务放近;在精度允许时压缩通信;平衡专家与流水线阶段;让通信和计算重叠,但验证重叠是否真的缩短关键路径。

Alpa、Megatron-LM 等系统研究的共同启示,不是哪一种并行策略永远最好,而是自动或人工地联合优化算子、并行方式和设备拓扑,比盯住一张卡的峰值更接近真实问题。

性能的下一单位是整个系统

计算芯片当然还会进步。更高效的算术、更大的片上存储和更好的封装,也会缓解数据移动。但模型扩展会不断把新的状态推到芯片之外:先越过寄存器,再越过设备内存,最后越过机箱和网络。

从那一刻起,性能不再是把卡片上的数字相加。它是数据布局、内存带宽、互连拓扑、集合算法、调度与模型结构共同写出的结果。

到了这个尺度,最重要的数字不再是某张卡上印着的最大值,而是每份有用结果都必须经过的那条最窄路径。

事实、条件与来源

已核验事实: Roofline 模型把性能上界与峰值计算、内存带宽和算术强度联系起来;数据移动具有显著成本;数据、张量、流水线和专家并行会产生不同集合通信与调度要求;环形 AllReduce 的理想单参与者数据量不会随设备数指数增长。

条件性判断: “互连比单卡更容易成为瓶颈”适用于模型或状态跨设备、通信进入关键路径且本地计算被并行摊薄的场景,不是所有训练与推理任务的普遍定律。

版本与决策边界: 本文有意不引用某一代 GPU、交换芯片或云实例的峰值,避免把快速过期的产品参数写成长期规律。文章解释的是分析方法,不构成硬件采购或容量承诺;实际决策必须使用目标模型、精度、并行策略、通信库、拓扑和批量下的端到端基准,并在软件栈或固件变化后复测。