0%

GPU 性能瓶颈定位方法

GPU 性能瓶颈定位方法

一句话定位:优化的第一步不是改代码,而是判定瓶颈属于哪一类。判错类别,所有后续努力都白费——这也是面试最爱追问的地方。

1. 瓶颈分类与判定信号

现象 瓶颈类别 首要动作
GPU 利用率低但 CPU 跑满 数据供给 / 前处理瓶颈 调 DataLoader(2.9)、优化解析与数据格式(1.7)
Kernel 之间有明显空隙 调度 / 同步问题 减少同步点与 H2D 拷贝、算子融合、CUDA Graph、增大 batch
多卡吞吐不随卡数线性增长 通信瓶颈 看 NCCL 拓扑与并行策略(3.10)
GPU 利用率高但吞吐不达标 计算 / 访存瓶颈 看是否 IO-bound(3.7)、换更优 kernel、量化(4)

2. 必答题:「你怎么知道是 GPU 而不是 CPU 瓶颈?」

标准答法是给出可观测证据链,而不是凭感觉:

  1. 看 GPU 利用率曲线形态nvidia-smi dmon 或 Nsight 采样。
    • 利用率持续高位 → GPU 是瓶颈;
    • 利用率呈锯齿/周期性掉底 → GPU 在等数据 → CPU 侧(加载、前处理)是瓶颈。
  2. 对照 CPU 侧负载:若 CPU 各核接近满载而 GPU 空闲,结论明确。
  3. 做单变量实验:用合成数据(预先常驻显存的假 batch)替换真实 DataLoader 再跑——
    • 吞吐显著提升 → 瓶颈确实在数据管线;
    • 吞吐几乎不变 → 瓶颈在 GPU 计算本身。
  4. 看时间线归因:Nsight Systems 上统计 GPU Kernel 累计时间占墙钟时间的比例(GPU Kernel 占比)。占比低说明大量时间耗在非 Kernel(等待、拷贝、Python 开销)。

这套”先量化观测 → 提出假设 → 单变量验证”的动作,与 Spark 里通过 UI 判断是 Shuffle、倾斜还是资源不足完全同构(见 5.5)。

参考:Nsight Systems 用户指南;nvidia-smi 手册