EvalScope 模型推理性能压测
官方文档:https://evalscope.readthedocs.io/zh-cn/latest/user_guides/stress_test/parameters.html
常用命令如下:
nohup evalscope perf \ # 后台运行 evalscope 性能压测,不因终端关闭而停止
--url http://127.0.0.1:8806/v1/chat/completions \ # 请求发送到本地 8806 端口的 OpenAI 兼容接口
--api openai \ # 使用 OpenAI API 协议格式
--model /data/Qwen3-32B \ # 指定压测的模型路径(Qwen3-32B)
--parallel 14 \ # 并发数 14(同时发 14 个请求)
--number 200 \ # 总共发送 200 个请求
--dataset random \ # 使用随机生成的测试数据
--tokenizer-path /data/Qwen3-32B \ # 使用该路径下的 tokenizer 做分词统计
--min-prompt-length 2048 \ # 最小输入长度 2048 token
--max-prompt-length 2048 \ # 最大输入长度 2048 token(固定 2k 输入)
--min-tokens 2048 \ # 最小生成长度 2048 token
--max-tokens 2048 \ # 最大生成长度 2048 token(固定 2k 输出)
> qwen3-32b-perf.log 2>&1 & # 将日志输出到文件并在后台运行
结果解析:
查看测试日志qwen3-32b-perf.log ,结果如下:(需要记录的值我已经标记成⭐号)
Benchmarking summary:
+-----------------------------------+-----------+
| Key | Value |
+===================================+===========+
| Time taken for tests (s) | 686.558 | ← 整个压测总耗时(秒)
+-----------------------------------+-----------+
| Number of concurrency | 14 | ← 并发数(同时在跑的请求数)
+-----------------------------------+-----------+
| Request rate (req/s) | -1 | ← 未限制请求速率(-1 表示不限速,按并发跑)
+-----------------------------------+-----------+
| Total requests | 200 | ← 总请求数
+-----------------------------------+-----------+
| Succeed requests | 200 | ← 成功请求数
+-----------------------------------+-----------+
| Failed requests | 0 | ← 失败请求数(0 表示稳定)
+-----------------------------------+-----------+
| Output token throughput (tok/s) | 596.599 | ⭐⭐⭐ 整机输出吞吐(每秒生成 token 数),单卡输出吞吐就除以启动用的卡数。
+-----------------------------------+-----------+
| Total token throughput (tok/s) | 1193.2 | ⭐⭐⭐ 整机整体吞吐(输入+输出 token 总和),单卡整体吞吐就除以启动用的卡数。
+-----------------------------------+-----------+
| Request throughput (req/s) | 0.2913 | ⭐⭐⭐ 请求频率(每秒完成多少个请求)
+-----------------------------------+-----------+
| Average latency (s) | 46.1411 | ← 平均完整请求耗时(从发出到全部生成完成)
+-----------------------------------+-----------+
| Average time to first token (s) | 0.9867 | ← ⭐⭐⭐ 平均首 token 时间(TTFT),这次结果为最接近1000ms
+-----------------------------------+-----------+
| Average time per output token (s) | 0.0221 | ← ⭐⭐⭐ 平均每个输出 token 时间(TPOT),这次结果为要求低于50ms
+-----------------------------------+-----------+
| Average inter-token latency (s) | 0.022 | ← token 之间平均间隔(基本等于 TPOT)
+-----------------------------------+-----------+
| Average input tokens per request | 2048 | ← 每个请求平均输入 token 数
+-----------------------------------+-----------+
| Average output tokens per request | 2048 | ← 每个请求平均输出 token 数
+-----------------------------------+-----------+
2026-03-02 21:49:11 - evalscope - INFO:
Percentile results:
+-------------+----------+---------+----------+-------------+--------------+---------------+----------------+---------------+
| Percentiles | TTFT (s) | ITL (s) | TPOT (s) | Latency (s) | Input tokens | Output tokens | Output (tok/s) | Total (tok/s) |
+-------------+----------+---------+----------+-------------+--------------+---------------+----------------+---------------+
| 10% | 0.734 | 0.0208 | 0.022 | 46.1895 | 2048 | 2048 | 44.1533 | 88.3066 | ← 10% 的请求首 token ≤0.734s;完整耗时 ≤46.19s;单请求输出速度 44.15 tok/s;总处理速度 88.31 tok/s(最快那一批)
| 25% | 0.7382 | 0.021 | 0.0221 | 46.2372 | 2048 | 2048 | 44.2582 | 88.5164 | ← 25% 请求首 token ≤0.738s;整体延迟 ≤46.24s;性能仍非常稳定
| 50% | 1.0564 | 0.0214 | 0.0221 | 46.2458 | 2048 | 2048 | 44.2857 | 88.5714 | ← 中位数;50% 请求 TTFT ≤1.056s;完整耗时约46.25s;这是最具代表性的典型请求
| 66% | 1.0597 | 0.0216 | 0.0221 | 46.2664 | 2048 | 2048 | 44.29 | 88.58 | ← 66% 请求 TTFT ≤1.059s;整体延迟略微上升但基本稳定
| 75% | 1.0613 | 0.0217 | 0.0222 | 46.274 | 2048 | 2048 | 44.2936 | 88.5871 | ← 75% 请求 TTFT ≤1.061s;TPOT 22.2ms;系统仍处于平稳区
| 80% | 1.0623 | 0.0218 | 0.0222 | 46.2804 | 2048 | 2048 | 44.2989 | 88.5978 | ← 80% 请求 TTFT ≤1.062s;延迟曲线几乎水平,波动极小
| 90% | 1.2184 | 0.0219 | 0.0223 | 46.3839 | 2048 | 2048 | 44.3394 | 88.6787 | ← 90% 请求 TTFT ≤1.218s;开始出现尾延迟增长,但仍控制在较低范围
| 95% | 1.6039 | 0.022 | 0.0225 | 46.7117 | 2048 | 2048 | 44.4676 | 88.9352 | ← 95% 请求 TTFT ≤1.603s;尾部请求稍慢;TPOT 稍微增加到 22.5ms
| 98% | 2.2917 | 0.0222 | 0.0225 | 47.0182 | 2048 | 2048 | 52.654 | 105.3079 | ← 98% 请求 TTFT ≤2.29s;极少数慢请求;吞吐突增说明调度差异
| 99% | 2.498 | 0.0226 | 0.0225 | 47.7051 | 2048 | 2048 | 52.6565 | 105.3129 | ← 最慢 1% 请求;TTFT 约 2.5s;整体延迟 47.7s;属于尾部排队现象
| Percentiles | 分位数:表示有多少比例的请求落在这个数值以内(比如 90% 表示 90% 请求不超过该值)。
| TTFT (s) | 首 token 延迟:从发请求到生成第一个 token 的时间。
| ITL (s) | token 间隔:相邻两个 token 之间的平均时间。
| TPOT (s) | 单 token 时间:生成一个输出 token 需要多久。
| Latency (s) | 总延迟:一个请求从开始到全部生成完成的总时间。
| Input tokens| 输入 token 数:每个请求的 prompt 长度。
| Output tokens| 输出 token 数:每个请求生成的 token 数量。
| Output (tok/s)| 单请求输出速度:每秒生成多少输出 token。
| Total (tok/s) | 单请求总速度:每秒处理多少输入+输出 token。