EvalScope 魔搭社区模型评测与性能基准测试框架

https://evalscope.readthedocs.io/zh-cn/latest/index.html

multi_perf

快速开始

# 安装
pip install evalscope[perf] -U
# 压测
evalscope perf \
  --parallel 1 10 50 100 200 \
  --number 10 20 100 200 400 \
  --model Qwen2.5-0.5B-Instruct \
  --url http://127.0.0.1:8801/v1/chat/completions \
  --api openai \
  --api-key xxxx\
  --dataset random \
  --max-tokens 1024 \
  --min-tokens 1024 \
  --prefix-length 0 \
  --min-prompt-length 1024 \
  --max-prompt-length 1024 \
  --tokenizer-path Qwen/Qwen2.5-0.5B-Instruct \
  --extra-args '{"ignore_eos": true}'

参数说明

基本设置

参数类型说明默认值
--modelstr测试模型名称,或模型路径-
--urlstrAPI地址,支持/chat/completion/completion端点-
--namestrwandb/swanlab数据库结果名称和结果数据库名称{model_name}_{current_time}
--apistr服务API类型 • openai: OpenAI兼容API(需提供--url) • openai_embedding: OpenAI兼容Embedding API • openai_rerank: OpenAI/Cohere兼容Rerank API • local: 启动本地transformers推理 • local_vllm: 启动本地vLLM推理服务 • 自定义:参考自定义API指南-
--portint本地推理服务端口 仅对locallocal_vllm有效8877
--attn-implementationstrAttention实现方式 仅在api=local时有效None (可选:flash_attention_2eagersdpa
--api-keystrAPI密钥None
--debugbool是否输出调试信息False

网络配置

参数类型说明默认值
--total-timeoutint每个请求的总超时时间(秒)21600(6小时)
--connect-timeoutint网络连接超时(秒)None
--read-timeoutint网络读取超时(秒)None
--headersstr额外的HTTP头 格式:key1=value1 key2=value2 将用于每个查询-
--no-test-connectionbool不发送连接测试,直接开始压测False

请求控制

参数类型说明默认值
--parallellist[int]并发请求的数量 可传入多个值,空格分隔1
--numberlist[int]发出的请求总数量 可传入多个值(需与parallel一一对应)1000
--ratefloat请求生成速率(请求/秒) • -1: 请求不限速,立即全部生成并放入队列 • > 0: 请求按泊松到达模型生成,生成间隔服从均值为 1/rate 的指数分布,即平均每秒生成 rate 个请求-1
--log-every-n-queryint每N个查询记录日志10
--streambool是否使用SSE流输出 需要启用以测量TTFT(Time to First Token)指标True
--sleep-intervalint每次性能测试之间的休眠时间(秒) 避免过载服务器5

小技巧

--rate--parallel 控制的是两个独立阶段:

  • 生成阶段(由 --rate 控制):请求按指定速率生成并放入队列。

    • rate=-1:不限速,请求立即全部入队。

    • rate=R:请求间隔服从均值 1/R 秒的指数分布(泊松到达模型),平均每秒入队 R 个。

  • 发送阶段(由 --parallel 控制):最多 parallel 个请求同时在飞行中(已发出但未收到回复),每个 worker 收到回复后才从队列取下一条发送。

两个参数相互独立:rate 决定请求以多快的节奏送进队列,parallel 决定同时有多少个请求处于发送状态。

SLA设置

参数类型说明默认值
--sla-auto-tunebool是否启用SLA自动调优模式False
--sla-variablestr自动调优的变量 可选:parallel(并发数)、rate(请求速率)parallel
--sla-paramsstrSLA约束条件 JSON字符串 支持指标:avg_latency, p99_latency, avg_ttft, p99_ttft, avg_tpot, p99_tpot, rps, tps 支持操作符:<=, <, min (延时类); >=, >, max (吞吐类) 示例:'[{"p99_latency": "<=2"}]'None
--sla-upper-boundint被调优变量的搜索上界65536
--sla-lower-boundint被调优变量的搜索下界1
--sla-fixed-parallelint--sla-variable=rate 时使用的固定并发数;未设置时默认回退到 --sla-upper-bound 以兼容旧行为None
--sla-num-runsint每个并发级别的运行次数(取平均值)3
--sla-number-multiplierfloat每次测试时请求总数相对于被调优变量(并发数或速率)的倍数,即 number = round(variable × N);未设置时默认为 2None

参见

SLA自动调优功能使用详见自动调优指南

Prompt设置

参数类型说明默认值
--max-prompt-lengthint最大输入prompt长度 超过该值时将丢弃prompt131072
--min-prompt-lengthint最小输入prompt长度 小于该值时将丢弃prompt0
--prefix-lengthintprompt的前缀长度 仅对random数据集有效0
--promptstr指定请求prompt 字符串或本地文件(通过@/path/to/file指定) 优先级高于dataset 示例:@./prompt.txt-
--query-templatestr指定查询模板 JSON字符串或本地文件(通过@/path/to/file指定) 示例:@./query_template.json-
--apply-chat-templatebool是否应用聊天模板None(根据URL后缀自动判断)
--image-widthint随机VL数据集图像宽度224
--image-heightint随机VL数据集图像高度224
--image-formatstr随机VL数据集图像格式RGB
--image-numint随机VL数据集图像数量1
--image-patch-sizeint图像的patch大小 仅用于本地图像token计算28

数据集配置

参数类型说明默认值
--datasetstr数据集模式,详见下表-
--dataset-pathstr数据集文件路径 与数据集结合使用-

dataset 模式说明

模式说明支持dataset-path
openqa从ModelScope自动下载OpenQA prompt长度较短(一般<100 token) 指定dataset_path时使用jsonl文件的question字段
longalpaca从ModelScope自动下载LongAlpaca-12k prompt长度较长(一般>6000 token) 指定dataset_path时使用jsonl文件的instruction字段
line_by_line逐行将txt文件的每一行作为一个prompt 必需提供dataset_path✓(必需)
flickr8k从ModelScope自动下载Flick8k 构建图文输入,数据集较大,适合评测多模态模型
kontext_bench从ModelScope自动下载Kontext-Bench 构建图文输入,约1000条数据,适合快速评测多模态模型
random根据prefix-lengthmax-prompt-lengthmin-prompt-length随机生成prompt 必需指定tokenizer-path 使用示例
random_vl随机生成图像和文本输入 在random基础上增加图像相关参数 使用示例
embedding从文件加载文本数据评测Embedding模型 支持Line-by-line(TXT)或JSONL格式(含text字段)✓ (必需)
random_embedding根据max-prompt-lengthmin-prompt-length随机生成query评测Embedding模型 必需指定tokenizer-path
embedding_batch批量发送文本数据评测Embedding模型 从文件加载数据 支持--extra-args '{"batch_size": 8}'设置批次大小✓ (必需)
random_embedding_batch批量发送根据max-prompt-lengthmin-prompt-length随机生成query数据评测Embedding模型 必需指定tokenizer-path 支持--extra-args '{"batch_size": 8}'设置批次大小
rerank从文件加载Query-Document对评测Rerank模型 支持JSONL格式 (含querydocuments字段)✓ (必需)
random_rerank根据max-prompt-lengthmin-prompt-length随机生成query数据评测Rerank模型 必需指定tokenizer-path 支持--extra-args '{"num_documents": 10, "document_length_ratio": 5}'设置文档数量和相对query的长度倍数
custom自定义数据集解析器 参考自定义数据集指南

模型设置

参数类型说明默认值
--tokenizer-pathstr分词器权重路径 用于计算输入和输出的token数量 通常与模型权重在同一目录None
--frequency-penaltyfloatfrequency_penalty值-
--logprobsbool是否返回对数概率-
--max-tokensint可以生成的最大token数量-
--min-tokensint生成的最少token数量 注意:并非所有模型服务都支持 对于vLLM>=0.8.1,需额外设置 --extra-args '{"ignore_eos": true}'-
--n-choicesint生成的补全选择数量-
--seedint随机种子None
--stopstr停止生成的tokens-
--stop-token-idslist[int]停止生成的token ID列表-
--temperaturefloat采样温度0
--top-pfloattop_p采样-
--top-kinttop_k采样-
--extra-argsstr额外传入请求体的参数 JSON字符串格式 示例:'{"ignore_eos": true}'-
--tokenize-promptbool在客户端将prompt tokenize为token ID列表,绕过服务端重新tokenize,通过/v1/completions直接发送False

数据存储

参数类型说明默认值
--visualizerstr可视化工具 可选:wandbswanlabclearml 设置后指标将保存到指定工具None
--enable-progress-trackerbool是否开启进度追踪,将层级压测进度实时写入progress.json,可通过服务接口查询False
--wandb-api-keystrwandb API密钥 已废弃,请使用--visualizer wandb-
--swanlab-api-keystrswanlab API密钥 已废弃,请使用--visualizer swanlab-
--outputs-dirstr输出文件路径./outputs
--no-timestampbool输出目录不包含时间戳False

其他参数

参数类型说明默认值
--db-commit-intervalint在写入SQLite数据库前缓冲的行数1000
--queue-size-multiplierint请求队列的最大大小 计算方式:parallel * multiplier5
--in-flight-task-multiplierint最大调度任务数 计算方式:parallel * multiplier2