性能基线(Benchmark)建设方法论
一句话定位:没有可信基线,所有”优化了 30%”都是自说自话。基线的全部价值在于可复现与可比较。
1. 五条硬规则
1 固定输入分布
- 输入的长度分布、batch 组成、请求到达模式必须固定并记录(LLM 场景尤其关键:输入/输出长度直接决定吞吐);
- 用固定数据集或固定随机种子生成,避免每次测的其实是不同负载。
2 固定环境
- 固定硬件(GPU 型号、卡数、拓扑)、驱动/CUDA/框架版本、并发数、功耗与时钟模式(必要时锁频,避免降频与 boost 波动);
- 独占机器测量,避免邻居进程干扰。环境变了就不能与旧数据直接比。
3 区分预热与稳定态
- 前若干次迭代包含 CUDA 上下文初始化、显存分配、autotune、cache 预热,耗时显著偏高;
- 必须丢弃预热轮,只统计稳定态;同时明确报告预热轮数(同 5.1 的 profiler schedule)。
4 报告 P50 / P99 而非仅均值
- 均值会掩盖长尾。一个 P99 严重恶化的方案在生产上是不可接受的,哪怕均值更好;
- 延迟必须给分位数(P50/P90/P99),吞吐给稳定态均值 + 波动范围。这也是 4.7 四维评估中”稳定性”维度的数据来源。
5 明确吞吐与延迟的取舍点
- 两者天然对立:增大 batch / 加长聚合窗口 → 吞吐升、延迟升(见 3.6 Dynamic Batching);
- 因此不能只报单点,应给出吞吐-延迟曲线,并标明业务 SLA 约束下(如 P99 < 2s)的最大可用吞吐——这才是有决策价值的数字。
2. 报告应包含的最小信息集
模型与精度 / 硬件与版本 / 输入输出长度分布 / 并发与 batch 设置 / 预热与测量轮数 / P50-P99 延迟 / 稳定态吞吐 / 显存占用峰值。
参考:MLPerf Benchmark 方法论