Repository: modelscope/evalscope
Issue: evalscope perf 和 vllm benchmark_serving TTFT有一些差异，如何配置使其差不多？
Root cause: Documentation Deficiency

## 自查清单

在提交 issue 之前，请确保您已完成以下步骤:
- [x] 我已仔细阅读了[相关使用说明文档](https://evalscope.readthedocs.io/zh-cn/latest/get_started/parameters.html)
- [x] 我已查看了[常见问题解答](https://evalscope.readthedocs.io/zh-cn/latest/get_started/faq.html)
- [x] 我已搜索并查看了现有的 issues，确认这不是一个重复的问题

## 问题描述

和 #443 有一点类似，但是我使用的是已发版的最新版本 evalscope perf，使用本地 vllm serve 部署的 Qwen3-32B 模型测试，均使用随机数据集，输入256，输出2048，忽略eos，evalscope perf 和 vllm benchmark_serving.py TTFT有一些差异，**是否是计算方式的不同，如果是，如何配置使其类似？**

## EvalScope 版本（必填）
v0.17.0 (`python3 -m pip install 'evalscope[perf]' -i https://pypi.tuna.tsinghua.edu.cn/simple -U` 的结果）
## vllm 版本
`vllm/vllm-openai:0.8.5.post1`镜像

## 使用的工具
- [ ] Native / 原生框架
- [ ] Opencompass backend
- [ ] VLMEvalKit backend
- [ ] RAGEval backend
- [x] Perf / 模型推理压测工具
- [ ] Arena / 竞技场模式

## 执行的代码或指令

对比了如下4种方法，后2种主要来自 #443 中评论 @Yunnglin 提到的方法（感谢🙏）。
```bash
# 对于vllm 自带的测试脚本：
for n in 1 2 4 8 16 32 64 96 128 256; do
  echo "=== Running with --num-prompts $n at $(date) ===" >> all_chat_benchmarks.log
  python3 ./benchmark_serving.py \
    --backend openai-chat \
    --port 8000 \
    --dataset-name random \
    --model Qwen3-32B-bench \
    --num-prompts $n \
    --random-input-len 256 \
    --random-output-len 2048 \
    --trust-remote-code \
    --tokenizer /tmp/model \
    --host <本地部署地址> \
    --endpoint /v1/chat/completions --ignore_eos \
    >> all_chat_benchmarks.log 2>&1
  echo -e "\n" >> all_chat_benchmarks.log
  sleep 2
done

# evalscope perf：
python3 -m pip install 'evalscope[perf]' -i https://pypi.tuna.tsinghua.edu.cn/simple -U

# 安装的最新版本为 0.17.0 
evalscope perf --parallel 1 2 4 8 16 32 64 96 128 256 --url "http://<本地部署地址>:8000/v1/chat/completions" --model Qwen3-32B-bench --log-every-n-query 10   --connect-timeout 600   --read-timeout 600   --api openai   --dataset random --min-tokens 2048 --max-tokens 2048  --min-prompt-length 256 --max-prompt-length 256  -n 1 2 4 8 16 32 64 96 128 256 --tokenizer-path Qwen/Qwen3-32B --extra-args '{"ignore_eos": true}'

# 还测试了extra-args指定repetition_penalty为1.0的结果：
evalscope perf --parallel 1 2 4 8 16 32 64 96 128 256 --url "http://<本地部署地址>:8000/v1/chat/completions" --model Qwen3-32B-bench --log-every-n-query 10   --connect-timeout 600   --read-timeout 600   --api openai   --dataset random --min-tokens 2048 --max-tokens 2048  --min-prompt-length 256 --max-prompt-length 256  -n 1 2 4 8 16 32 64 96 128 256 --tokenizer-path Qwen/Qwen3-32B --extra-args '{"ignore_eos": true, "repetition_penalty":1.0}'

# 还测试了指定repetition_penalty为1.0的结果：
evalscope perf --parallel 1 2 4 8 16 32 64 96 128 256 --url "http://<本地部署地址>:8000/v1/chat/completions" --model Qwen3-32B-bench --log-every-n-query 10   --connect-timeout 600   --read-timeout 600   --api openai   --dataset random --min-tokens 2048 --max-tokens 2048  --min-prompt-length 256 --max-prompt-length 256  -n 1 2 4 8 16 32 64 96 128 256 --tokenizer-path Qwen/Qwen3-32B --extra-args '{"ignore_eos": true}' --repetition_penalty 1.0
```

## 结论

括号中为和vllm banchmark_serving对比，假设比例在95%到105%之间的数据为正常误差，隐藏百分比

| 并发               | 1                                                        | 2                                                        | 4                                                         | 8                                                         | 16                                                        | 32                                                           | 64                                                            | 96                                                   | 128                                                              | 256                                                          |
|------------------|----------------------------------------------------------|----------------------------------------------------------|-----------------------------------------------------------|-----------------------------------------------------------|-----------------------------------------------------------|--------------------------------------------------------------|---------------------------------------------------------------|------------------------------------------------------|------------------------------------------------------------------|--------------------------------------------------------------|
| 总测试时间            | 53.59 / 53.9643 / 54.2399 / 55.1305                      | 54.04 / 54.4047 / 54.6997 / 55.048                       | 54.84 / 55.1844 / 55.1554 / 56.2613                       | 56.14 / 56.511 / 57.1147 / 57.5653                        | 63.22 / 63.6344 / 67.6051 (106.9%) / 67.5784 (106.9%)     | 100.43 / 100.682 / 103.204 / 103.539                         | 188.68 / 188.184 / 198.936 (105.4%) / 198.755 (105.3%)        | 269.33 / 270.057 / 276.104 / 276.991                 | 342.97 / 339.149 / 378.34 (110.3%) / 376.966 (109.9%)            | 681.21 / 683.209 / 738.655 (108.4%) / 725.404 (106.5%)       |
| 请求吞吐量（req/s)     | 0.02 / 0.0185 (92.5%) / 0.0184 (92.0%) / 0.0269 (134.5%) | 0.04 / 0.0368 (92.0%) / 0.0366 (91.5%) / 0.0363 (90.8%)  | 0.07 / 0.0725 / 0.0725 / 0.0711                           | 0.14 / 0.1416 / 0.1401 / 0.139                            | 0.25 / 0.2514 / 0.2367 (94.7%) / 0.2368 (94.7%)           | 0.32 / 0.3178 / 0.3101 / 0.3091                              | 0.34 / 0.3401 / 0.3217 (94.6%) / 0.322 (94.7%)                | 0.36 / 0.3555 / 0.3477 / 0.3466                      | 0.37 / 0.3774 / 0.3383 (91.4%) / 0.3396 (91.8%)                  | 0.38 / 0.3747 / 0.3466 (91.2%) / 0.3529 (92.9%)              |
| 输出token吞吐(tok/s) | 38.21 / 37.951 / 37.7582 / 37.1482                       | 75.79 / 75.2877 / 74.8816 / 74.4078                      | 149.39 / 148.448 / 148.526 / 145.606                      | 291.82 / 289.926 / 286.861 / 284.616                      | 518.35 / 514.941 / 484.697 (93.5%) / 484.889 (93.5%)      | 652.53 / 650.92 / 635.011 / 632.959                          | 694.67 / 696.51 / 658.865 (94.8%) / 659.464 (94.9%)           | 729.99 / 728.025 / 712.078 / 709.8                   | 764.34 / 772.947 / 692.879 (90.7%) / 695.405 (91.0%)             | 769.64 / 767.391 / 709.788 (92.2%) / 722.753 (93.9%)         |
| 总token吞吐(tok/s)  | 42.99 / 42.9358 / 42.7176 / 42.0276                      | 85.27 / 84.864 / 84.4063 / 83.8723                       | 168.06 / 167.946 / 168.034 / 164.732                      | 328.29 / 327.423 / 323.962 / 321.426                      | 583.15 / 584.919 / 550.565 (94.4%) / 550.783 (94.4%)      | 734.09 / 736.735 / 718.729 / 716.406                         | 781.50 / 787.799 / 745.22 / 745.897                           | 821.24 / 823.26 / 805.228 / 802.651                  | 859.89 / 876.123 / 785.367 (91.3%) / 788.231 (91.7%)             | 865.84 / 869.222 / 803.975 (92.9%) / 818.66 (94.6%)          |
| 平均 TTFT（ms)      | 65.25 / 77.2 (118.3%) / 95.5 (146.4%) / 86.0 (131.8%)    | 95.12 / 103.0 (108.3%) / 98.8 / 112.2 (118.0%)           | 142.98 / 199.5 (139.5%) / 183.5 (128.3%) / 203.2 (142.1%) | 207.87 / 258.9 (124.5%) / 268.5 (129.2%) / 259.8 (125.0%) | 364.55 / 490.6 (134.6%) / 483.0 (132.5%) / 528.3 (144.9%) | 705.86 / 809.5 (114.7%) / 785.8 (111.3%) / 840.5 (119.1%)    | 1306.22 / 1451.3 (111.1%) / 1449.8 (111.0%) / 1484.1 (113.6%) | 1918.45 / 2075.9 (108.2%) / 1914.9 / 2010.1          | 18065.67 / 14547.5 (80.5%) / 29197.6 (161.6%) / 28254.4 (156.4%) | 212008.54 / 208724.0 / 230521.0 (108.7%) / 228210.0 (107.6%) |
| P50 TTFT(ms)     | 65.25 / 77.2 (118.3%) / 95.5 (146.4%) / 86.0 (131.8%)    | 95.12 / 123.8 (130.2%) / 119.9 (126.1%) / 133.3 (140.1%) | 158.54 / 201.4 (127.0%) / 193.9 (122.3%) / 213.4 (134.6%) | 235.68 / 27.4 (11.6%) / 333.7 (141.6%) / 324.5 (137.7%)   | 417.88 / 596.5 (142.7%) / 571.6 (136.8%) / 600.5 (143.7%) | 840.24 / 1074.2 (127.8%) / 1024.0 (121.9%) / 1084.3 (129.0%) | 1656.32 / 1736.0 / 1613.5 / 1855.3 (112.0%)                   | 1709.27 / 2477.9 (145.0%) / 1686.9 / 2183.5 (127.7%) | 2662.39 / 2888.0 (108.5%) / 3543.1 (133.1%) / 2619.5             | 224893.24 / 224955.2 / 228626.4 / 225016.4                   |
| P99 TTFT(ms)     | 65.25 / 77.2 (118.3%) / 95.5 (146.4%) / 86.0 (131.8%)    | 114.48 / 123.8 (108.1%) / 119.9 / 133.3 (116.4%)         | 160.78 / 297.1 (184.8%) / 256.4 (159.5%) / 274.7 (170.9%) | 242.04 / 319.6 (132.0%) / 334.5 (138.2%) / 326.3 (134.8%) | 427.04 / 597.4 (139.9%) / 575.6 (134.8%) / 601.3 (140.8%) | 859.45 / 1076.7 (125.3%) / 1027.2 (119.5%) / 1087.5 (126.5%) | 1816.56 / 2022.4 (111.3%) / 2039.9 (112.3%) / 2077.8 (114.4%) | 2867.63 / 3072.6 (107.1%) / 2937.7 / 2979.0          | 223044.62 / 224228.64 / 224443.0 / 223921.2                      | 582515.80 / 582162.4 / 590077.5 / 585891.9                   |
| 平均 TPOT（ms)      | 26.15 / 26.3 / 26.4 / 26.9                               | 26.35 / 26.5 / 26.7 / 26.8                               | 26.71 / 26.9 / 26.8 / 27.4                                | 27.32 / 27.5 / 27.7 / 28.0                                | 28.60 / 28.6 / 29.1 / 29.1                                | 37.07 / 37.1 / 38.1 / 38.3                                   | 55.37 / 55.5 / 57.9 / 57.8                                    | 75.42 / 75.6 / 79.0 / 79.1                           | 87.51 / 89.4 / 87.3 / 87.6                                       | 73.44 / 75.2 / 76.9 / 74.9                                   |
| P50 TPOT(ms)     | 26.15 / 26.3 / 26.4 / 26.9                               | 26.35 / 26.5 / 26.7 / 26.8                               | 26.71 / 26.8 / 26.8 / 27.4                                | 27.31 / 27.4 / 27.7 / 27.9                                | 28.43 / 28.5 / 28.7 / 28.7                                | 34.51 / 35.4 / 37.4 (108.4%) / 37.6 (109.0%)                 | 52.27 / 52.8 / 53.7 / 53.5                                    | 75.35 / 75.5 / 77.2 / 77.1                           | 79.49 / 81.1 / 78.0 / 78.1                                       | 59.42 / 60.1 / 66.4 (111.7%) / 62.7 (105.5%)                 |
| P99 TPOT(ms)     | 26.15 / 26.3 / 26.4 / 26.9                               | 26.35 / 26.5 / 26.7 / 26.8                               | 26.73 / 26.9 / 26.9 / 27.4                                | 27.34 / 27.5 / 27.8 / 28.0                                | 30.39 / 30.8 / 32.7 (107.6%) / 32.7 (107.6%)              | 48.50 / 48.6 / 49.9 / 50.0                                   | 90.25 / 90.9 / 96.1 (106.5%) / 96.0 (106.4%)                  | 129.55 / 130.4 / 133.4 / 133.8                       | 159.24 / 161.0 / 162.0 / 162.4                                   | 160.70 / 163.7 / 165.6 / 163.1                               |
| P50 ITL(ms)      | 26.26 / 26.3 / 26.4 / 26.8                               | 26.34 / 26.5 / 26.7 / 26.7                               | 26.67 / 26.8 / 26.8 / 27.2                                | 27.30 / 27.4 / 27.6 / 27.9                                | 28.25 / 28.3 / 28.4 / 28.4                                | 29.50 / 29.6 / 29.7 / 29.8                                   | 30.19 / 30.4 / 30.2 / 30.2                                    | 30.29 / 30.5 / 30.4 / 30.5                           | 30.37 / 30.5 / 30.4 / 30.5                                       | 30.33 / 30.5 / 31.0 / 30.5                                   |
| P99 ITL(ms)      | 26.26 / 26.3 / 29.2 (111.2%) / 30.1 (114.6%)             | 27.78 / 28.2 / 31.8 (114.5%) / 29.9 (107.6%)             | 28.55 / 28.5 / 30.0 (105.1%) / 32.3 (113.1%)              | 29.37 / 29.6 / 33.1 (112.7%) / 31.6 (107.6%)              | 31.61 / 31.4 / 33.4 (105.7%) / 33.4 (105.7%)              | 33.29 / 33.2 / 35.7 (107.2%) / 36.5 (109.6%)                 | 34.61 / 35.1 / 41.7 (120.5%) / 40.3 (116.4%)                  | 38.83 / 38.1 / 46.0 (118.5%) / 46.7 (120.3%)         | 40.46 / 66.1 (163.4%) / 64.6 (159.7%) / 61.6 (152.2%)            | 200.95 / 200.7 / 175.8 (87.5%) / 185.3 (92.2%)               |




## 错误日志

请粘贴完整的错误日志或控制台输出。

## 运行环境

- 操作系统：
- Python版本：

## 其他信息

如果有其他相关信息，请在此处提供。


两者计算TTFT的方法是一致的，具体可以查看代码：

evalscope:
https://github.com/modelscope/evalscope/blob/55a51667095cdbc79d903b198b4d90703d380c1b/evalscope/perf/utils/benchmark_util.py#L33-L36

vllm:
https://github.com/vllm-project/vllm/blob/d31a64712489d7c079fe48515c7ddd8a60bc0e71/benchmarks/backend_request_func.py#L394-L424

参考这个文档来获取与vLLM可比的结果： https://evalscope.readthedocs.io/zh-cn/latest/user_guides/stress_test/vs_vllm_bench.html

> 感谢你的反馈！我们将关闭此问题。如果您有任何疑问，请随时重新打开它。如果EvalScope对您有所帮助，欢迎给我们点个STAR以示支持，谢谢！