Skip to content

EvalScope Perf 进行性能压测,相比其他压测工具性能差异显著 #1101

Description

@liguodongiot

自查清单

在提交 issue 之前,请确保您已完成以下步骤:

问题描述

目前对比了 EvalScope Perf 与 Guidellm、Genai Bench、aiperf、inference perf等压测工具,发现EvalScope Perf与其他工具相比性能差异巨大。

模型:Qwen3-8B
输入:1k
输出:128
推理框架:SGLang 0.5.6.post1
硬件:H200 x1
并发:20

Image

即使当并发为1时,发现差异吞吐差异仍然很大。

Image

单并发下,通过打印日志统计:

平均端到端时延:0.7378
平均每个请求之间的间隙:0.922

通过观察SLang 日志发现,EvalScope Perf 不能够使请求饱和。而其他框架不会存在类似问题。

Image

初步观察代码判断,目前EvalScope Perf中采用阻塞等待策略,而不是持续填充策略,导致请求流出现间隙。

EvalScope 版本(必填)

v0.17.1

使用的工具

  • Native / 原生框架
  • Opencompass backend
  • VLMEvalKit backend
  • RAGEval backend
  • Perf / 模型推理压测工具
  • Arena / 竞技场模式

执行的代码或指令

evalscope perf \
  --parallel 20 \
  --number 500  \
  --model Qwen-bf16-isl1k-osl128-056post1 \
  --url http://localhost:8000/v1/chat/completions \
  --api openai \
  --dataset random \
  --max-tokens 128 \
  --min-tokens 128 \
  --prefix-length 0 \
  --min-prompt-length 1024 \
  --max-prompt-length 1024 \
  --tokenizer-path /global/models/Qwen3-8B \
  --extra-args '{"ignore_eos": true}' \
  --swanlab-api-key local \
  --outputs-dir /workspace/outputs/evalscope-perf-qwen3-8b

其他压测工具脚本

guidellm:

MODEL_PATH=/global/models/Qwen3-8B/
OUTPUT_PATH=/workspace/outputs/guidellm-eval/qwen3-8b-bf16-parallel20
rm -rf $OUTPUT_PATH
mkdir -p $OUTPUT_PATH

guidellm benchmark \
--target "http://localhost:8000" \
--processor $MODEL_PATH \
--request-type text_completions \
--profile concurrent \
--rate 20 \
--max-requests 500 \
--data "prompt_tokens=1024,output_tokens=128,samples=2000" \
--output-dir $OUTPUT_PATH \
--outputs json,csv,yaml,console

genai-bench:

BASE_PATH=/workspace/outputs/genai-bench-eval
NAME=qwen3-8b-bf16-parallel20

rm -rf $BASE_PATH/$NAME

genai-bench benchmark \
--api-backend sglang \
--api-base "http://localhost:8000" \
--api-model-name "Qwen3-8B" \
--api-key "xxx" \
--model-tokenizer "/global/models/Qwen3-8B" \
--server-engine "SGLang" \
--server-gpu-type "H200" \
--server-version "v0.5.6" \
--server-gpu-count 1 \
--task text-to-text \
--max-time-per-run 10 \
--max-requests-per-run 500 \
--num-concurrency 20 \
--traffic-scenario "D(1024,128)" \
--experiment-base-dir $BASE_PATH \
--experiment-folder-name $NAME

aiperf:

aiperf profile \
--model qwen3 \
--tokenizer /global/models/Qwen3-8B \
--endpoint-type chat \
--endpoint /v1/chat/completions \
--streaming \
--url localhost:8000 \
--synthetic-input-tokens-mean 1024 \
--synthetic-input-tokens-stddev 0 \
--output-tokens-mean 128 \
--output-tokens-stddev 0 \
--extra-inputs ignore_eos:true \
--concurrency 20 \
--request-count 500 \
--warmup-request-count 0 \
--num-dataset-entries 1000 \
--random-seed 100

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions