跳转到内容

负载类型学

第二部分给了一套分析工具。这一章把它们用到真实负载上。

先说结论:同一批加速器,跑大模型训练能到 40% 的算力利用率,跑推荐系统训练可能只有 4%——而后者并不是"没优化好",它根本不该用算力利用率来衡量。

负载类型决定瓶颈位置。 这是本卷最实用的一条判断。

维度取值决定什么
计算密度稠密 / 稀疏算术强度高还是低(第四章)
数据访问规则 / 不规则有效带宽能拿到峰值的几成(第三章)
状态规模权重主导 / 表主导 / 无状态显存策略与并行方式
时间约束吞吐导向 / 延迟导向批处理与扩缩容策略(下一章)

前三个维度决定"卡在哪一层",第四个决定"怎么部署"。

方面特征
计算稠密矩阵乘主导,算术强度高(数百–上千)
内存权重与优化器状态主导;推理时中间状态随上下文与并发线性增长
通信集合通信密集:all-reduce(TP/DP)、all-to-all(MoE)
瓶颈训练:集合通信 + 显存容量;推理解码:显存带宽
对策多维并行、通信计算重叠、算子融合、量化、批处理

这是唯一一类训练时能真正打满矩阵单元的负载,也因此成了硬件厂商的优化目标。

二、推荐 / 广告系统(稀疏 + 稠密混合)

Section titled “二、推荐 / 广告系统(稀疏 + 稠密混合)”
方面特征
计算embedding 查表(几乎零 FLOPs)+ 小 MLP;总 FLOPs 比大模型低几个数量级
内存embedding 表可达 TB 到几十 TB,远超单机显存
通信查表结果的 all-to-all,消息小而频繁,对延迟敏感
瓶颈内存容量 → 访存带宽 → 小消息延迟。算力几乎从不是瓶颈
对策参数服务器、embedding 分片与多级缓存、CPU/GPU 混合存放、哈希与量化压缩、热 ID 缓存
方面特征
计算卷积或 ViT,稠密、规则、算术强度中等偏高
内存激活主导(高分辨率、大批量),权重相对小
数据解码常常是真正的瓶颈——JPEG/视频解码、增强、缩放
瓶颈数据管道 > 访存 > 算力
对策GPU 上解码、预处理离线化、顺序读友好的分片格式

一个常见现象:加了更多加速器反而没变快,因为 CPU 侧的解码成了瓶颈。这时该做的是把解码搬到 GPU,而不是继续加卡。

方面特征
计算聚合操作、稀疏矩阵乘,访问模式随图结构而变
内存图本身 + 邻居采样的中间结果(采样爆炸)
通信跨分区的邻居访问,最不规则、最难预取
瓶颈不规则访存与通信;缓存命中率低,向量化困难
对策图分区、邻居采样、压缩存储、历史嵌入缓存

有效带宽在这类负载上可能只有峰值的百分之几——回顾第三章的访问模式表。

方面特征
计算常需双精度(分子动力学、CFD、气候),稠密或结构化稀疏
通信强扩展——问题规模固定、加节点求更快,对延迟极敏感
瓶颈通信延迟与同步;节点越多越难扩展
对策拓扑感知放置、通信避免算法、混合精度求解

强扩展 vs 弱扩展是与 AI 负载的根本差异:AI 训练加节点通常同时加批量(弱扩展,通信量不变),科学计算加节点问题规模不变(强扩展,每节点的计算变少而通信不变,扩展性天然更差)。

负载主瓶颈次瓶颈该看的指标不该看的指标
大模型训练集合通信、显存算力MFU、通信占比、goodput—
大模型推理 · 首 token 阶段算力显存MFU、TTFT—
大模型推理 · 逐 token 阶段显存带宽显存容量MBU、TPOTMFU
推荐训练内存容量、访存小消息延迟带宽利用率、samples/sMFU
推荐推理访存、延迟缓存命中QPS、P99、命中率MFU
视觉训练数据管道算力空闲占比、samples/s—
视觉推理解码 + 算力—QPS、P99—
GNN不规则访存通信缓存命中率、采样开销MFU
科学计算通信延迟双精度算力强扩展效率吞吐

用法:拿到一个作业,在左列找到它,只看第四列的指标,忽略第五列。很多"性能玄学"就是因为看错了指标。

为什么同一硬件利用率能差三个数量级

Section titled “为什么同一硬件利用率能差三个数量级”

用第四章的框架解释。H100 的机器平衡点约 295 FLOPs/byte:

算子算术强度算力利用率上限
大矩阵乘~1000+接近 100%
注意力(解码单请求)~1~0.3%
逐元素算子~0.17~0.06%
Embedding 查表≈ 0≈ 0

同一块卡,从算术强度 0.17 的负载到 1000 的负载,算力利用率相差三到四个数量级,硬件毫无问题。

一个重要推论:访存受限算子的优化手段是融合(少读写一次),不是"用更好的算法"。把三个逐元素算子融成一个,能省掉四次显存往返,收益接近 3 倍;而把其中某一个算子的浮点运算优化掉一半,收益接近零。

拿到一个陌生负载:

  1. 总 FLOPs 是多少? 数一遍主要算子。数量级很小 → 大概率不是计算问题。
  2. 要读写多少字节? 权重、激活、表、数据集各算一遍。
  3. 算术强度 = FLOPs / 字节,与机器平衡点比。 高于它看算力,低于它看带宽。
  4. 状态放得下吗? 单卡 → 单机 → 整集群三级判断,决定并行方式。
  5. 通信量与消息大小? 大消息看带宽,小消息看延迟(第六章)。
  6. 吞吐导向还是延迟导向? 决定批处理与扩缩容策略。

六个问题答完,瓶颈基本定位。

一个完整反例:别用大模型的直觉分析推荐系统

Section titled “一个完整反例:别用大模型的直觉分析推荐系统”

假设有人报告:"我们的推荐模型训练 MFU 只有 4%,帮我优化。"

按大模型的直觉,你会去查通信重叠、算子融合、并行策略。但正确的第一步是走上面的流程。

Step 1 · 数 FLOPs。 典型推荐模型:embedding 查表(零 FLOPs)+ 三四层 MLP。假设 MLP 部分每样本 10 MFLOPs,批量 8192,则每步约 8×10108 \times 10^{10} FLOPs。

Step 2 · 数字节。 每个样本查 100 个 embedding,每个 128 维 FP32 = 512 字节,批量 8192 → 每步读约 400 MB(且是随机访问)。加上表的更新写回。

Step 3 · 算术强度。

I≈8×10104×108×2≈100I \approx \frac{8 \times 10^{10}}{4 \times 10^{8} \times 2} \approx 100

看起来不低?但注意这是随机访问——有效带宽可能只有峰值的 5%(第三章的访问模式表)。等效算术强度要按有效带宽折算,实际远在平衡点之下。

结论:这个负载注定是访存受限的,MFU 4% 不是缺陷,是这个负载在这块硬件上的物理上限附近。

真正该优化的:

  • embedding 的存放位置(显存 / 主机内存 / SSD 的分层)
  • 热 ID 的缓存命中率
  • all-to-all 的消息聚合(把很多小消息合并)
  • 用量化或哈希把表压小

这些都跟 MFU 无关。 如果这位同事花两周把 MLP 部分的矩阵乘优化了 30%,端到端会一点变化都没有——回到第二章的 Amdahl 定律。

现实中一个集群常常同时跑多类负载,这带来额外问题:

组合冲突对策
训练 + 在线推理训练的突发通信打破推理的延迟 SLO物理隔离,或只在非核心场景混部
大模型 + 推荐前者要算力,后者要内存容量异构资源池,按负载类型分配机型
批处理 + 交互式交互式占坑不跑任务空闲回收、抢占式配额

第九章讲训练与推理的混部,第八卷讲调度层面的解法。

  • 四个分类维度:计算密度、访问规则性、状态规模、时间约束。
  • 五类负载的瓶颈:大模型看通信与显存、推荐看容量与带宽、视觉看数据管道、GNN 看不规则访存、科学计算看通信延迟。
  • 推荐系统按集群规模常常是最大的 AI 负载,且从不该用 MFU 考核。
  • 算力利用率在不同负载间可差三到四个数量级,这是负载性质而非硬件缺陷。
  • 访存受限算子靠融合优化,不靠减少浮点运算。
  • 六步判断流程:FLOPs → 字节 → 算术强度 → 状态规模 → 通信 → 时间约束。