完整实战:3 步跑通开源大模型性能压测,从 QPS 到吞吐指标一次讲清
【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型(LLM)/多模态大模型(MLLM)教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm
刚拉完一个 7B 模型,老板开口就是:"在 A100 上能扛多少 QPS?首 token 延迟多少?"你打开终端,发现除了pip install一无所知。这篇文章就是帮你把"大模型性能压测"这件事跑通的:用 20 分钟时间,在单卡 GPU 上完成一次标准吞吐量测试,拿到可以直接写进汇报的数据。适用环境是 Linux + NVIDIA 显卡(24G 显存起步即可测 7B 级模型),仓库里 Qwen2、Qwen2.5 等目录都自带压测脚本,跟着做即可。
不同开源大模型在 MMLU、Codeforces 等基准上的成绩对比,这类"跑分"和本文要做的性能压测是两回事
压测工具怎么选:benchmark 脚本还是 EvalScope
先说结论:多数情况下,vLLM 自带的benchmark_throughput.py就够了;只有当你需要压测已经对外提供 OpenAI 兼容接口的服务、或要做标准化报告时,才上 EvalScope。
| 候选工具 | 适用场景 | 安装复杂度 | 核心指标 | 是否支持多模态 |
|---|---|---|---|---|
vLLMbenchmark_throughput.py | 离线压测,直接测模型文件 | 装好 vLLM 即可,仓库已带脚本 | 吞吐(tokens/s)、请求速率(req/s) | 不支持 |
EvalScopeperf | 对在线服务(OpenAI API)压测、出标准报告 | 需额外安装,参数较多 | 吞吐、首 token 延迟(TTFT)、生成延迟 | 支持 |
| HuggingFace Transformers 基线 | 对比 vLLM 提升幅度 | 已随环境装好 | 同上,仅作对照 | 不支持 |
建议你先只用前两个:vLLM 脚本看"模型本身上限",EvalScope 看"服务实际表现",两者数据一起交差最有说服力。
pip install vllm==0.6.1.post2 # 仓库脚本适配的 vLLM 版本,版本过新可能报参数错误 pip install "evalscope[perf]" -U # 只有需要压在线服务时才装最小可运行示例:一条命令测出吞吐
仓库里每个模型目录都放好了脚本,以 Qwen2.5 为例,直接使用压测脚本:
# 进入模型目录后执行,参数含义见行内注释 python benchmark_throughput.py \ --model /path/to/Qwen2.5-7B-Instruct \ # 本地模型路径 --backend vllm \ # 推理后端,换成 hf 可测 Transformers 基线 --input-len 64 \ # 每条请求的输入 token 数 --output-len 128 \ # 每条请求的输出 token 数 --num-prompts 25 \ # 测试请求总数,建议 ≥20 --seed 2024 \ # 固定随机种子,保证结果可复现 --dtype float16 \ # 计算精度 --max-model-len 512 # 单条序列上限,防止 KV Cache 爆显存跑完后会打印一行类似这样的结果:
Throughput: 9.14 requests/s, 1754.43 tokens/s几个核心指标的含义:
| 指标 | 含义 | 怎么读 |
|---|---|---|
| requests/s | 每秒完成多少条完整请求 | 换算 QPS 直接用它 |
| tokens/s | 每秒生成多少 token(含输入输出) | 衡量生成速度,越大越好 |
| req 耗时 = 1/(requests/s) | 单条请求平均耗时 | 配合 input/output 长度换算首 token 延迟 |
⚠️ 最容易踩的坑:--max-model-len和--num-prompts设太大,7B 模型在 24G 卡上也会 OOM。显存不够时先降num-prompts,再降max-model-len,不要第一时间动精度。
进阶调参:找拐点、批量验证、留底
拿到第一次结果后,真正有价值的是扫参数找拐点:
- 扫并发:把
--num-prompts从 25 依次加大到 50、100、200(vLLM 会内部批处理),观察 tokens/s 何时不再增长——那就是你这套硬件 + 模型的吞吐上限,再加请求只会堆积延迟。 - 扫序列长度:真实业务是什么长度就测什么长度。
--input-len 64 / --output-len 128适合短对话;RAG 场景建议改成input 1024 / output 512,两者测出的吞吐差距可能有 2-3 倍。 - 跑对照:同一命令把
--backend vllm换成hf(并加--hf-max-batch-size 25),就能算出 vLLM 相比 Transformers 的提升百分比,这个数字放在汇报里非常加分。
批量验证时,建议用循环把不同参数组合的结果重定向落盘,例如:
for out_len in 128 256 512; do python benchmark_throughput.py --model $MODEL --backend vllm \ --input-len 64 --output-len $out_len --num-prompts 50 \ --seed 2024 --dtype float16 --max-model-len 1024 \ | tee result_output_${out_len}.txt # 结果留底,方便复看 done每个组合至少跑 3 次取均值,单次结果受显存碎片和调度影响波动不小;另外用nvidia-smi确认测试时显卡是独占状态,AutoDL 租卡前记得先跑一遍看显存是否为 0 占用。
测试机硬件概况:4 张 A100-40GB,写报告时务必附上 CPU/内存/显卡型号
排障速查:四个高频问题一行解决
CUDA out of memory→ 降--num-prompts和--max-model-len,或加--gpu-memory-utilization 0.85ValueError: max_model_len或参数不识别 → vLLM 版本与脚本不匹配,装回 0.6.1.post2- 吞吐比预期低一半以上 → 用
nvidia-smi查是否有其他进程占卡,或误用了 fp32 精度 - 同一命令两次结果差 20% 以上 → 冷启动影响,先空跑一次预热再正式测
- EvalScope 报连接拒绝 → 先
curl服务地址确认可达,再检查--parallel是否超过服务并发上限
现在你可以把吞吐量、请求速率和硬件配置整理成一张表,直接贴给老板了。脚本和完整参数说明在Qwen2.5 vLLM 部署调用文档的"推理速度测试"一节,Qwen2、GLM-4 等目录下的同名文档流程一致,换模型路径即可复用。
【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型(LLM)/多模态大模型(MLLM)教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考