2. GPU硬件与算力基础

要理解云原生环境中的 GPU 算力治理,第一步不是学调度器,而是把一块 GPU 从"芯片内部"到"集群互联"看清楚。GPU 之所以能承担大模型训练与推理,核心在于它把大量算力组织成层次化的并行结构,并用一套专门的存储与互联体系把数据持续喂给计算单元。本节按"计算单元 → 存储层次 → 卡间互联 → 性能指标"的顺序展开,帮助你在后续做资源切分、拓扑感知调度和性能排障时,知道每个数字背后对应的是哪一层硬件。

一、GPU 架构:从 SM 到 Warp 的执行组织

以 NVIDIA 的通用 GPU 为例,整块芯片由若干 GPC(图形处理集群)组成,每个 GPC 内含多个 SM(Streaming Multiprocessor,流式多处理器)。SM 是 GPU 真正执行指令的基本单元,也是资源分配与占用率(Occupancy)计算的对象。一个 SM 内部包含:

  • CUDA Core(FP32/INT32 单元):执行标量浮点与整数运算,是通用并行计算的主力。
  • Tensor Core:执行矩阵乘加(如 D = A×B + C)的专用单元,是深度学习训练与推理算力的主要来源。
  • 寄存器文件与共享内存/L1:SM 内的高速存储,决定线程块能驻留多少。
  • Warp Scheduler 与 Dispatch Unit:以 32 个线程为一个 Warp 进行调度,通过多 Warp 切换隐藏访存延迟。

关键概念是 SIMT(单指令多线程):一个 Warp 内 32 个线程执行同一条指令,但各自操作不同数据。当 Warp 内线程因条件分支走向不同路径时会发生"分支发散",两条路径被串行执行,有效并行度下降。因此写 kernel 时让同一 Warp 内线程走相同分支,是提升效率的基本功。

二、显存层次:为什么"算得快"还要"喂得上"

GPU 的存储是一个明显的金字塔结构,越靠近计算单元越快、越小、越贵:

层级典型容量/带宽(示例量级)作用
寄存器每 SM 数十 KB,单线程最多 255 个线程私有,零延迟访问
共享内存 / L1每 SM 约 100–256 KB线程块内共享,需显式管理
L2 缓存数 MB 至数十 MB全芯片共享,缓存全局访存
HBM 显存如 40/80 GB,带宽约 1.5–3 TB/s存放模型权重、激活、KV Cache

这里有一个常被忽视的工程事实:大模型推理往往是显存带宽受限而非算力受限。以自回归解码为例,每生成一个 token 都要把全部权重从 HBM 读一遍,理论吞吐上限约等于"显存带宽 ÷ 模型字节数"。一块 80 GB、带宽 2 TB/s 的卡跑 FP16 的 70B 模型(约 140 GB 权重,需多卡),单卡每 token 至少读 140 GB 量级数据,这就是为什么推理优化里量化、KV Cache 管理、批处理如此重要。判断一个负载是"算力瓶颈"还是"带宽瓶颈",可用算术强度(Arithmetic Intensity,FLOPs/Byte)与硬件的"算力/带宽比"对比:低于该比值即为带宽受限。

三、CUDA Core 与 Tensor Core:两种算力的分工

CUDA Core 擅长逐元素运算、归约、控制逻辑和精度要求特殊的计算;Tensor Core 则专为矩阵乘加设计,在 FP16/BF16/FP8/INT8 等低精度下提供数倍到数十倍于 CUDA Core 的吞吐。以示例量级说明:某代数据中心 GPU 的 FP32 约 60 TFLOPS,而 FP16 Tensor Core 可达约 1000 TFLOPS(含稀疏),差距接近一个数量级。这解释了为什么现代训练框架都尽量把计算映射到矩阵乘,并启用 TF32/BF16 混合精度。

但 Tensor Core 有使用门槛:矩阵维度需满足对齐要求(如 16 的倍数),否则会走回退路径导致性能骤降。实践中若发现某个 GEMM 层异常慢,先检查 shape 是否对齐,再检查是否被框架自动降级。

GPU 计算—存储—互联层次总览 计算层(SM 内部) CUDA Core FP32/INT32 标量 Tensor Core FP16/BF16/FP8 矩阵 Warp Scheduler(32 线程/Warp) 多 Warp 切换隐藏访存延迟 · 分支发散会降低并行度 存储层次(越上越快越小) 寄存器(线程私有,零延迟) 共享内存 / L1(块内共享) L2 缓存(全芯片共享) HBM 显存(带宽约 1.5–3 TB/s) 卡间互联拓扑 PCIe(约 32–64 GB/s) 跨节点/通用,带宽低 NVLink(数百 GB/s) 卡间高带宽直连 NVSwitch / 跨节点 全互联,拓扑感知关键 性能指标判读 算力:TFLOPS(FP32/FP16/FP8) 带宽:GB/s(HBM / NVLink) 算术强度 = FLOPs / Byte 占用率:活跃 Warp / 最大 Warp MFU:实测算力 / 峰值算力 瓶颈判定:算力受限 or 带宽受限

四、NVLink 与 PCIe:拓扑决定多卡效率

单卡算力再强,大模型也必须多卡协同。卡间通信走哪条路,直接决定扩展效率:

  • PCIe:通用总线,PCIe 4.0 x16 单向约 32 GB/s,5.0 约 64 GB/s。跨节点、跨设备通信默认走它,延迟高、带宽低。
  • NVLink:GPU 间专用高速链路,单链路可达数百 GB/s,是张量并行(TP)和专家并行(EP)的通信基础。
  • NVSwitch:把多张卡做成全互联,避免"某些卡对之间绕路",让 AllReduce、AllToAll 等集合通信更均衡。

这带来一个重要的调度原则:拓扑感知调度。如果一次训练任务需要 8 卡 TP,而调度器把 8 张卡分散到不同节点、只靠 PCIe 通信,通信时间可能超过计算时间,扩展效率断崖式下跌。因此云原生平台在做 GPU 分配时,应尽量把同一任务的卡放在同一 NVLink 域内,并优先选择同型号、同拓扑的节点。这也是为什么 Kubernetes 生态里出现了拓扑感知的 GPU 调度插件。

五、算力单位与性能指标:把数字读成结论

常见指标及其含义:

指标含义使用场景
TFLOPS每秒万亿次浮点运算衡量峰值算力,注意精度前缀
显存带宽 GB/sHBM 每秒可搬运数据量判断推理/大 batch 是否带宽受限
算术强度FLOPs / Byte与硬件算力带宽比对比,定位瓶颈
Occupancy活跃 Warp 占最大 Warp 比例判断延迟隐藏能力
MFU实测算力 / 峰值算力训练效率核心指标,通常 30%–55%

举例说明如何用这些指标做判断:假设某卡 FP16 峰值 1000 TFLOPS、HBM 带宽 2 TB/s,则算力带宽比约 500 FLOPs/Byte。若某算子的算术强度只有 50 FLOPs/Byte,它必然带宽受限,此时优化方向是提高数据复用(分块、融合算子),而不是继续堆算力。反之,若算术强度远高于 500,则应关注 Tensor Core 利用率、shape 对齐和占用率。

排障小技巧:用 nvidia-smi 看显存占用与利用率,用 nvidia-smi topo -m 查看卡间拓扑(NVLink 还是 PCIe),用 Nsight Compute 看 SM 占用率、Tensor Core 活跃度和内存吞吐,三者结合即可快速判断是算力、带宽还是通信瓶颈。
注意:不同代际、不同型号 GPU 的算力、显存、互联能力差异巨大,本文中的数值均为示例量级,用于说明数量关系,实际选型与容量规划必须以官方规格书和实测为准。

把这一节收束成一句话:GPU 的性能不是单一数字,而是"计算单元能力 × 存储供给能力 × 互联扩展能力"三者共同决定的结果。后续做资源切分、拓扑调度和可靠性治理时,你面对的每一个性能问题,几乎都能在这张层次图上找到对应的那一层。