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。