Skip to content

serve-bench:大模型服务压测 ​

做实验带脚本,结果可复核Python 3.9+,无第三方依赖需要联网下载源码(ZIP)

按泊松到达的请求速率压测 OpenAI 兼容接口,测 TTFT、TPOT、端到端延迟和吞吐,输出 P50/P99,保存每个请求的原始结果。

能做什么 ​

研究大模型推理服务(调度、缓存、批处理、云边协同),每个实验最后都要压测。这个脚本适用于任何 OpenAI 兼容接口(vLLM、SGLang、Ollama、各家 API),在同一套方法下对比不同的框架、配置和硬件:

  • 按泊松到达的请求速率发送流式请求,可以设多档速率,inf 表示一次性发出;
  • 测首字延迟 TTFT、每个输出 token 的时间 TPOT、相邻 token 间隔、端到端延迟,请求和 token 吞吐;
  • 输出每档速率的均值、P50、P90、P99 汇总表;
  • 保存每个请求的原始结果(JSONL),可以直接交给 results-table 制表、paper-figure 画图;
  • 支持自己的提示词文件,以及关闭思考模式、ignore_eos 等附加参数。

安装 ​

装到当前项目(.claude/skills/),macOS / Linux
curl -LO https://skills.bnuai.com/download/skills/serve-bench.zip && mkdir -p .claude/skills && unzip -o serve-bench.zip -d .claude/skills
装到个人目录,所有项目都能用,macOS / Linux
curl -LO https://skills.bnuai.com/download/skills/serve-bench.zip && mkdir -p ~/.claude/skills && unzip -o serve-bench.zip -d ~/.claude/skills
装到当前项目,Windows PowerShell
Invoke-WebRequest https://skills.bnuai.com/download/skills/serve-bench.zip -OutFile serve-bench.zip; Expand-Archive serve-bench.zip -DestinationPath .claude\skills -Force

压缩包从本站下载,不需要 Node.js 或 GitHub。带脚本的技能需要 Python 3.9 以上。更新时重新下载解压、覆盖原文件夹即可。

怎么用 ​

text
压测一下 localhost:8000 上的 qwen3-0.6b,请求速率 1、2、4、8、16,输入 512 词、输出 128 个 token,关掉思考模式,结果存到 results/。

示例 ​

对一个模拟的流式服务运行:

text
# 压测结果:fake

| 请求速率 (req/s) | 完成/失败 | 吞吐 (req/s) | 输出 (tok/s) | TTFT 均值 | TTFT P50 | TTFT P99 | TPOT 均值 | TPOT P99 | 端到端 P99 |
|---|---|---|---|---|---|---|---|---|---|
| 5.0 | 20/0 | 4.18 | 33.5 | 60.5 | 61.8 | 63.0 | 16.1 | 17.3 | 179.9 |
| inf | 20/0 | 106.16 | 849.3 | 60.7 | 60.0 | 70.0 | 15.4 | 16.5 | 177.1 |

延迟单位都是毫秒。

在真实服务上把速率从低到高逐档加大,TTFT P99 急剧上升的那一档就是服务的容量。

直接运行脚本 ​

bash
export OPENAI_API_KEY=...   # 需要时设置,脚本不会打印它
python3 skills/serve-bench/scripts/servebench.py --base-url http://localhost:8000/v1 --model qwen3-0.6b \
    --rates 1,2,4,8,16 --num-prompts 200 --input-len 512 --max-tokens 128 \
    --extra-body '{"chat_template_kwargs": {"enable_thinking": false}}' --out results/vllm.jsonl

权限说明 ​

只访问你指定的接口地址。API Key 从环境变量读取,不会写进结果文件或输出。

局限 ​

  • 随机提示词的长度按词数计,是 token 数的近似值;需要精确长度时用自己的提示词文件。
  • 服务不返回 token 用量(usage)时,输出 token 数按流式块数估计,结果中会注明。
  • 只压测自己有权限的服务,不要压测别人的线上服务或付费 API。