一、GPU集群压测概述:为什么需要压测、压测的核心指标、常见误区

1.1 为什么需要压测?——别等上线了才后悔

说实话,我见过太多团队踩过这个坑。

模型训练得好好的,一上集群就崩。或者推理服务延迟从10ms飙到500ms,用户直接骂娘。为什么会这样?因为开发环境和生产环境,根本就是两个世界。

我个人习惯,在项目初期就把压测纳入流程。不是等到快上线了才临时抱佛脚,而是从一开始就摸清集群的底牌。

压测的核心目的,说白了就三个:

  • 验证集群能不能扛住预期负载——你算力再强,带宽不够也是白搭
  • 找到性能瓶颈在哪——是卡在GPU计算上,还是卡在PCIe带宽上,还是卡在网络通信上?
  • 给容量规划提供依据——比如你要支撑1000路并发推理,到底需要多少张卡?

我遇到过最典型的案例:某客户买了256张A100,跑大模型训练。结果实际吞吐只有理论值的30%。一查,发现NVLink拓扑配错了,跨节点通信全走IB,带宽直接腰斩。如果早点做压测,这个问题在部署第一天就能发现。

1.2 压测的核心指标——盯住这三个数就够了

很多新手一上来就盯着GPU利用率看,觉得利用率高就是好。嗯,这里要注意——利用率高不一定代表效率高。

我个人习惯,压测时重点看三个指标:

1.2.1 吞吐量(Throughput)

这是最直观的指标。训练场景看的是「每秒处理多少样本」,推理场景看的是「每秒处理多少请求」。

举个例子:

# 训练场景
吞吐量 = 总样本数 / 总耗时
单位: samples/sec 或 tokens/sec

# 推理场景
吞吐量 = 成功响应数 / 总耗时
单位: QPS(Queries Per Second)

我建议你压测时,至少跑3轮取平均值。单次结果波动太大,没有参考价值。

1.2.2 延迟(Latency)

吞吐量高,不代表延迟低。你想想看,如果系统把请求都缓存起来批量处理,吞吐量确实上去了,但单个请求的等待时间可能很长。

延迟指标通常看这几个分位值:

分位值 含义 典型阈值(推理场景)
P50 50%的请求在这个时间内完成 < 50ms
P95 95%的请求在这个时间内完成 < 200ms
P99 99%的请求在这个时间内完成 < 500ms

避坑指南:我曾经遇到一个项目,P50延迟只有30ms,看起来很美。但P99延迟高达2秒。一查,是某个节点偶尔出现网络抖动。如果只看平均值,这个问题根本发现不了。

1.2.3 利用率(Utilization)

利用率要分维度看:

  • GPU计算利用率——核心是否在干活?但注意,利用率高也可能是由于kernel启动开销大导致的假象
  • GPU显存利用率——显存是否够用?OOM了没?
  • NVLink/PCIe带宽利用率——数据传输是否成为瓶颈?
  • 网络带宽利用率——跨节点通信是否饱和?

我见过最离谱的情况:某团队看到GPU利用率95%,以为优化得不错。结果一查NVLink带宽利用率只有10%,说明GPU大部分时间在空转等待数据。这就是典型的「假忙」。

1.3 压测的常见误区——这些坑我替你踩过了

误区一:压测环境跟生产环境不一样

很多人图省事,在开发机上跑压测。但开发机通常只有几张卡,网络拓扑也简单。生产环境动辄几十上百张卡,跨节点通信的延迟和带宽完全不是一个量级。

我曾经见过一个团队,在4卡机器上压测一切正常,上线到64卡集群后,训练速度反而下降了。为什么?因为通信开销随着卡数增加呈指数级增长,小规模压测根本暴露不了这个问题。

误区二:只压测一个场景

有些团队只压测「理想情况」——比如纯计算密集型任务,或者小batch size。但实际生产环境是混合负载:有大batch训练、有小batch推理、有数据预处理、有模型保存。

我建议你至少压测三种场景:

  1. 计算密集型——比如纯矩阵乘法,看GPU算力上限
  2. 通信密集型——比如AllReduce操作,看网络带宽瓶颈
  3. 混合负载——模拟真实训练/推理流程

误区三:压测时间太短

跑个几分钟就下结论,这是大忌。很多问题需要长时间运行才会暴露:

  • 显存泄漏——跑几小时才出现OOM
  • 温度过高——GPU降频导致性能下降
  • 网络抖动——偶发性的丢包和重传

警告:我建议压测至少持续30分钟以上。如果是稳定性测试,建议跑24小时。别问我为什么——我曾经因为只跑了10分钟压测就上线,结果第3小时集群挂了,那个周末我是在机房度过的。

误区四:只看平均指标

平均吞吐量2000 QPS,看起来很漂亮。但如果你看时间序列,会发现它可能是「前10分钟3000 QPS,后20分钟1500 QPS」的平均值。这种波动在实际生产中是不可接受的。

我个人习惯,压测报告里一定要包含:

  • 时间序列图(吞吐量随时间的变化)
  • 分位值分布(P50/P95/P99)
  • 异常点标注(比如延迟突增的时刻)

1.4 本章知识体系

下面这张图,是我自己总结的压测知识框架。每次做压测前,我都会对照着检查一遍:

GPU集群压测知识体系 为什么需要压测? 验证负载能力 定位性能瓶颈 容量规划依据 核心指标 吞吐量 (Throughput) 延迟 (Latency) 利用率 (Utilization) 常见误区 环境不一致 场景单一 时间太短 只看平均 压测流程:定义场景 → 搭建环境 → 执行压测 → 分析数据 → 优化迭代 吞吐量详解 训练:samples/sec 推理:QPS 至少跑3轮取平均 关注时间序列波动 延迟详解 P50 / P95 / P99 关注尾部延迟 排除网络抖动干扰 结合吞吐量一起看 利用率详解 GPU计算利用率 显存利用率 NVLink/PCIe带宽 网络带宽利用率 核心原则:先摸清底牌,再谈优化

这张图把压测的核心逻辑串起来了。你每次做压测前,可以对照着问自己三个问题:

  • 我为什么要压测?——对应左侧
  • 我看哪些指标?——对应中间
  • 我有没有踩坑?——对应右侧

嗯,把这些想清楚了,压测就不会跑偏。

个人经验:我每次压测前都会先画一张类似的图,把目标、指标、风险点列清楚。磨刀不误砍柴工,这个习惯帮我省了不少返工的功夫。

可可精品资料库