📂 595 个栏目 · 20019 篇文章
推理性能基准测试方法论:为什么你的基准测试结果和官方差了一倍?
你的基准测试结果,可能全是错的 2026年,AI推理框架的"性能对比"满天飞。vLLM说自己的吞吐量最高,SGLang说自己延迟最低,TensorRT-LLM说自己的性能最强。 但当你自己测试时,结果可能和官方差了一倍。 为什么?因为基准测试不是"跑一下就行"——输入长度、输出长度、batch size、并发数、GPU型号、CUDA版本、推理框架版本——每一个变量都影响结果。 基准测试需要严格的方法论。 以下是2026年推理性能基准测试的标准方法。 基准测试的"六大变量" 变量1:输入长度分布。 你的测试数据的输入长度分布是什么?全是短prompt(100 tokens)?全是长prompt(10000 tokens)?混合长度?输入长度直接影响TTFT。 变量2:输出长度分布。 你的测试数据的输出长度分布是什么?全是短回答(10 tokens)?全是长回答(1000 tokens)?输出长度直接影响TPOT和总吞吐量。 变量3:并发数。 测试时的并发请求数是多少?1个请求(单用户)?100个请求(高并发)?并发数直接影响吞吐量和延迟的trade-off。 变量4:GPU型号和数量。 H100和A100的性能差1.5倍。1张GPU和8张GPU的性能差得更多(考虑通信开销)。 变量5:推理框架版本。 vLLM 0.8和vLLM 0.9的性能可能差20%。必须记录框架版本。 变量6:精度和优化。 FP16、FP8、INT4?FlashAttention开启了吗?投机解码开启了吗?每一项优化都影响结果。 如果你不控制这6个变量,你的基准测试结果没有意义。 标准的基准测试方法 步骤1:定义测试场景。 你的应用场景是什么? 实时对话:短输入(200 tokens),短输出(100 tokens),高并发(100+),低延迟要求(P99<500ms) 批量分析:长输入(5000 tokens),长输出(2000 tokens),低并发(10),高吞吐量要求 混合场景:输入/输出长度混合,并发数混合 步骤2:准备测试数据。 使用标准的测试数据集,保证可复现。 ShareGPT:真实的对话数据,包含多轮对话 LMSYS-Chat-1M:100万条对话数据 自建数据集:根据你的场景构建 步骤3:设置测试参数。 预热(Warmup):先跑100个请求,让GPU进入稳定状态,不作为正式测试结果 持续时间:至少跑5分钟,确保结果稳定 重复次数:至少跑3次,取平均值 步骤4:记录测试条件。 必须记录: 输入/输出长度分布(平均值、P50、P95、P99) 并发数 GPU型号、数量、CUDA版本 推理框架版本、配置参数 精度(FP16/FP8/INT4)、优化(FlashAttention/投机解码) 步骤5:报告测试结果。 必须报告: 吞吐量(tokens/s,请求/s) TTFT(P50、P95、P99) TPOT(P50、P95、P99) 端到端延迟(P50、P95、P99) GPU利用率(%) 显存使用量(GB) 常见的基准测试陷阱 陷阱1:只看平均值,不看分布。 P50延迟很好,但P99延迟可能很差。P99延迟才是用户体验的关键指标。 陷阱2:使用合成数据,而不是真实数据。 合成数据(如"请重复[1000个空格]")的分布和真实数据完全不同。基准测试必须用真实数据(或接近真实分布的数据)。 陷阱3:忽略预热。 第一次推理的延迟很高(因为GPU冷启动、CUDA kernel编译)。预热后的结果才是真实的推理性能。 陷阱4:使用不同的Prompt。 不同的Prompt可能导致不同的输出长度,从而影响结果。基准测试必须使用相同的Prompt(或相同的Prompt分布)。 ...