从云原生走向 AI 原生:一套面向未来的架构方法论 → 阅读《AI 原生基础设施》

GPU 微架构与 Roofline 模型:算力、带宽与干扰的物理根因

草稿

GPU 的“快”受两道互不相关的上限约束——算力上限与带宽上限,正是 Roofline 模型(屋顶线模型)刻画的两条屋顶线。不知道负载撞上的是哪一条,所有利用率数字、选型决策与共享策略都是在猜。

GPU 基础认知一章建立了“GPU 是吞吐设备”的心智模型。本章把模型落到数字上:芯片里有什么、每层有多快、以及如何用 Roofline 模型判断一个负载的瓶颈。这些数字是后续硬切分与软切分中“为什么 core 份额对某些负载无效”、可观测与计量中“为什么利用率会骗人”的物理根因。

SM、warp 与张量核:算力的三个层级

一块 H100 SXM 有 132 个 SM(Streaming Multiprocessor)。SM 是 GPU 的基本“工作间”,每个 SM 内部:

  • 4 个 warp 调度器:每周期各发射一条指令。调度的最小单位是 warp,即 32 个线程绑在一起执行同一条指令。GPU 不会调度“单个线程”,正如 Kubernetes 不会调度“半个容器”。
  • 普通算术单元(FP32):合计约 67 TFLOPS。
  • 张量核(Tensor Core):专用矩阵乘加单元,稠密 BF16 约 989 TFLOPS,是普通算术单元的 15 倍。
工程含义
训练与推理的算力几乎全部来自张量核。一个没有走张量核路径的 GEMM,等效于只用了一块 1/15 算力的卡。看到训练“莫名其妙地慢”,先查精度路径(TF32/FP16/FP8)再怀疑硬件。

GPU 隐藏内存延迟的方式不是 CPU 式的乱序执行与预测,而是用海量并行 warp 互相填补空转:一个 warp 等显存,调度器立刻切换到另一个就绪的 warp。这解释了为什么 GPU 程序“并发度不足”时性能塌方:不是慢,是没有足够的 warp 可切。

内存层级:一张必须记住的数字表

层级容量延迟带宽与 Kubernetes 世界类比
寄存器256 KB/SM~0极高CPU 寄存器
共享内存/L1228 KB/SM~30 周期~33 TB/s(聚合)本地 L1/L2
L2 缓存50 MB(全卡)~200 周期~5 TB/s节点缓存层
HBM 显存80 GB~500 ns3.35 TB/s节点内存
NVLink(卡间)~1–2 μs900 GB/s(双向)机柜内专线
PCIe Gen5 x16~1–2 μs64 GB/s节点内普通总线
InfiniBand 400G~1–2 μs~50 GB/s跨节点网络
表 1: H100 SXM 的内存与互连层级(数量级)

两个推论:

  1. 数据搬运常常比计算贵。主机到显存走 PCIe,比显存带宽慢 50 倍;跨节点再慢且再窄。这是 GPUDirect RDMA、NVLink 存在的原因,详见互连与集合通信
  2. 要把 3.35 TB/s 吃满,同时在飞行中的数据必须约 1.7 MB(带宽 × 延迟)。没有足够的并发读请求,带宽就是纸面数字,这是 GPU 程序深流水线化的根本原因。

Roofline 模型:判断瓶颈的一行公式

一个负载每从显存读取 1 字节能做多少次浮点运算,称为算术强度(AI)。可达性能为:

可达性能 = min(峰值算力, 算术强度 × 显存带宽)

这就是 Roofline 模型(屋顶线模型):峰值算力与“算术强度 × 显存带宽”各自画出一道上限,取较低者即负载的性能天花板。H100 的屋脊点(ridge point)约为 295 FLOP/字节:AI 高于此撞算力屋顶线,低于此受带宽屋顶线约束。三个典型负载的位置:

负载算术强度可达性能受哪条屋顶线约束
大矩阵乘法(4096³)~1000+~989 TFLOPS(100%)算力
中小矩阵(128³,分块后)~40~140 TFLOPS(14%)带宽
LLM 解码(逐 token 生成)~1~3.4 TFLOPS(0.3%)带宽(灾难性)
表 2: 典型负载在 Roofline 上的位置(H100, BF16)

解码行是理解推理平台一切现象的钥匙:生成每个 token 都要把全部模型权重从显存读一遍,每读 2 字节只做 1 次乘加。单路解码的速度上限 ≈ 显存带宽 ÷ 权重量(H100 跑 70B BF16 ≈ 24 token/s),与买了多少 FLOPS 无关。批量推理之所以能把吞吐拉高几十倍,本质是把“读一遍权重”摊到多个请求上,把算术强度从 1 提到 B。展开见LLM 推理的物理层

由此还能读出选型与优化语言:

  • 换 H200(算力不变、带宽 1.43 倍)能让解码提速 43%:推理选型买的是带宽和容量,不是 FLOPS。
  • 权重量化(FP8/INT4)直接成倍提升解码速度,因为它减少的是要读的字节数。
  • “GPU 利用率只有 5% 算力”的推理集群可能是健康的,判定标准见GPU 指标语义

功耗墙:共享场景的隐形干扰源

H100 满载 700W。多个租户共用一块卡时,总功耗可能触发功率墙,驱动随即降频,所有租户一起变慢 10–20%,而任何“利用率”指标都看不出原因。这是数据平面各共享机制共同的盲区:时间片、MPS、软切分都不管理功耗。

nvidia-smi --query-gpu=clocks.sm,clocks_throttle_reasons.active,power.draw --format=csv -l 1
# 看到 "SW Power Cap" 活跃且 SM 时钟下降,即触发功率墙
工程经验
“加了一个租户,大家慢了 15%”而所有利用率指标正常:先查降频原因,再查缓存争用,最后才怀疑应用。

常见误区

误区真相
利用率 100% = 干满活了利用率只表示“有 kernel 在跑”,与算力、带宽占用无关
算力高就是好卡(对推理)解码受带宽屋顶线约束;H200 只加带宽就能快 43%
张量核是可选加速不走张量核等效 1/15 算力的卡
显存 80GB 就能塞 75GB 负载还有每进程 0.3–0.8GB 上下文、碎片与框架开销,见显存管理
共享卡上变慢一定是邻居抢算力功耗墙降频与 L2 缓存冲刷同样常见且更隐蔽
表 3: 微架构层的常见误区

总结

微架构层的三个事实贯穿全书:张量核贡献了几乎全部算力显存带宽是与算力并列的第二条屋顶线,且是推理负载的真正瓶颈功耗与缓存是共享场景的隐形干扰源。带着 Roofline 模型看后续章节:软切分的 core 份额只管时间、管不了带宽(硬切分与软切分),MIG 之所以隔离强是因为它连显存带宽都切了(MIG),而监控必须同时看算力与带宽两条管道(GPU 指标语义)。

参考资料

创建于 2026/08/28 更新于 2026/08/28 2145 字 阅读约 5 分钟