30 分钟完成大模型性能基准测试:vLLM 与 EvalScope 部署选型实战
这套组合帮你回答一个具体问题:同一块 GPU 上,哪个模型、哪种推理框架更快,快多少。用 vLLM 自带的 benchmark_throughput.py 跑离线吞吐,再用 EvalScope 做并发压测,最终拿到请求吞吐量(req/s)、总 token 吞吐量、输出 token 吞吐量三组可对比的硬指标。文中全部命令取自《开源大模型食用指南》教程,复制即用。
同一块 GPU 上,怎么快速判断谁快、差多少
选型时最常见的问题不是"能不能跑",而是"跑得快不快":两个候选模型同挂一块卡,谁先扛住线上并发?凭感觉不行,需要一套可复现的基准测试流程。这套流程很短——离线吞吐对比定框架,并发压测定并发,全程 30 分钟内可以扫完一轮。
vLLM 与 EvalScope 各管什么
大模型性能基准测试里"性能"有两层:模型本身答得好不好,是准确率问题;跑得快不快、扛不扛并发,是吞吐问题。选型阶段主要看后者,前者可以借用现成的对比图建立心理预期:
工具分工
benchmark_throughput.py:vLLM 生态里的离线吞吐脚本,一次跑完全部请求,直接输出 requests/s 与 tokens/s。适合横向对比不同推理框架、不同模型在同一硬件上的生成速度。仓库 models/Qwen2.5/ 等目录里就有配套脚本,可参考 vLLM 部署调用教程 中的推理速度测试一节。- EvalScope:魔搭社区官方评测框架,装
evalscope[perf]后即可做服务化压测。它面向"已部署的服务端点",按梯度并发打真实请求,适合定线上并发水位。参考 EvalScope 并发测试教程。
一句话决策:比速度用前者,压并发用后者,两者互补不替代。
3 步跑通吞吐量测试
先克隆教程仓库、装好压测依赖:
git clone https://gitcode.com/GitHub_Trending/se/self-llm
pip install "evalscope[perf]" -U
第一步,离线吞吐。把 benchmark_throughput.py 放到模型同目录下执行:
python benchmark_throughput.py \
--model /root/autodl-tmp/qwen/Qwen2.5-7B-Instruct \
--backend vllm \
--input-len 64 --output-len 128 \
--num-prompts 25 --seed 2024 \
--max-model-len 512
关键参数只有四个:--model 指路径,--input-len/--output-len 定输入输出长度,--num-prompts 定样本量。它还能切 --backend(vllm/hf/mii),同一个模型换后端再跑一遍,框架差距立刻现形。
第二步,并发压测。服务起好后用 EvalScope 按梯度打请求:
evalscope perf \
--url http://localhost:8000/v1/chat/completions \
--model qwen2.5-7b \
--parallel 16 --number 100 \
--api openai --stream
--parallel 是并发数,--number 是总请求数。5、10、16、32 这样逐档往上加,每档记一个总吞吐,拐点就是该硬件下的合理并发上限。
结果里看哪三个数
| 指标 | 含义 | 什么时候用它 |
|---|---|---|
| Output token throughput (tok/s) | 单位时间新生成的 token 数 | 用户等回答时长,最贴近体感 |
| Total token throughput (tok/s) | 输入 + 输出总 token 速率 | 长上下文批处理场景 |
| Request throughput (req/s) | 单位时间完成的请求数 | 服务容量与扩卡决策 |
拿真实数据说话:结果怎么读
以 Qwen2.5-7B-Instruct 教程 中的实测为例(单卡 RTX 4090D,输入 64 / 输出 128 / 25 条请求):
| 推理后端 | Request throughput (req/s) | Total token throughput (tok/s) |
|---|---|---|
| vLLM | 9.14 | 1754.43 |
| Transformers (hf) | 6.99 | 1342.53 |
| 差距 | +30.8% | +30.7% |
读法:vLLM 比 Transformers 基线快约 34%,这就是"换框架值不值"的直接答案。另一份并发梯度测试(4 卡 H20 部署 GLM-4.5-Air,每档 100 请求):
| 并发数 | 总 token 吞吐 (tok/s) | 备注 |
|---|---|---|
| 5 | 680 | 爬坡区 |
| 10 | 1050 | 接近峰值 |
| 20 | 1020 | 到达拐点 |
| 32 | 870 | 排队拖慢整体 |
20 并发后吞吐掉头向下,说明再加并发只会堆排队,不会堆吞吐。注意:数字只供同机对比,跨机器横比没有意义,教程里也明确提醒过这一点。
测试翻车时的两个高频问题
- 结果波动大:固定
--seed,把--num-prompts加大到 50 以上,同一配置跑 3 次取均值;同时清掉卡上其他进程——一个后台训练任务就够把吞吐拉低两位数百分比。 - 显存装不下:压低
--gpu-memory-utilization(默认 0.9),或缩短--max-model-len、改用 4bit 量化权重;压测侧则直接降--parallel。
30 分钟快速上手
- 环境就绪:GPU 空闲、vLLM 可
serve目标模型。 - 第 0–10 分钟:跑
benchmark_throughput.py,记下 tokens/s 与 req/s,必要时换后端再跑一遍。 - 第 10–30 分钟:
evalscope perf扫 5/10/16/32 四档并发,记录每档总吞吐与 P99 延迟。 - 决策:输出 token 吞吐高的做在线服务,出现拐点的并发数写入容量规划。
两个工具各司其职,三组指标对上号,选型争论就可以结束了。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




