GPU 利用率为什么上不去:五个常见原因
「GPU 利用率低」是一个结果,不是一个原因。往下查,通常是这五个位置之一。
① 数据供给跟不上
GPU 在等 CPU 准备数据 —— 典型表现是 GPU 利用率周期性锯齿。
常见原因:数据加载没用多进程、没做预取、样本预处理太重。
② 批大小(Batch Size)太小
批太小,GPU 的并行单元跑不满。
- 太小 → 算力浪费
- 太大 → 显存爆、延迟高
找一个平衡点,或者用动态批处理。
③ 通信成为瓶颈
多卡训练时,梯度同步(AllReduce)要等最慢的那张卡。
表现:GPU 利用率在 60%–70% 附近横着不动,上不去。
解法方向:优化并行策略、让通信和计算重叠、换互联更好的硬件。
④ 显存碎片或 OOM 重试
显存不够时的重试、换出、碎片整理,都会让 GPU 空转。
表现:利用率忽高忽低,日志里有反复的 OOM 或重试记录。
⑤ 请求侧本身就不满
这一条最容易被忽略:
如果实际就没有那么多请求,GPU 利用率低是正常的。
一台闲置的卡利用率是 0,这不是软件问题,是业务问题。
所以排查利用率,第一步应该先确认:
这段时间到底有多少请求进来?
请求量不够,任何优化都无意义。
这段时间到底有多少请求进来?
请求量不够,任何优化都无意义。
怎么定位
按这个顺序查:
- 请求量 —— 有没有足够的活干
- GPU 利用率曲线 —— 是锯齿(等数据)、持平(通信瓶颈)还是抖动(显存)
- 显存占用 —— 是不是被缓存占满
- 卡间通信 —— 带宽用满了没有
- 单卡内部 —— 批大小、算子效率
一句话:先确认有没有活干,再看干得快不快。
这篇能拿走什么
读了不算数,拿去用才算。