参数说明#
执行 evalscope perf --help 可获取全部参数说明。
基本设置#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
测试模型名称,或模型路径 |
- |
|
|
API地址,支持 |
- |
|
|
wandb/swanlab数据库结果名称和结果数据库名称 |
|
|
|
服务API类型 |
- |
|
|
本地推理服务端口 |
|
|
|
Attention实现方式 |
|
|
|
API密钥 |
|
|
|
是否输出调试信息 |
|
网络配置#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
每个请求的总超时时间(秒) |
|
|
|
网络连接超时(秒) |
|
|
|
网络读取超时(秒) |
|
|
|
额外的HTTP头 |
- |
|
|
不发送连接测试,直接开始压测 |
|
请求控制#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
并发请求的数量 |
|
|
|
发出的请求总数量 |
|
|
|
请求调度速率(请求/秒) |
|
|
|
每N个查询记录日志 |
|
|
|
是否使用SSE流输出 |
|
|
|
每次性能测试之间的休眠时间(秒) |
|
|
|
启用开放环路(open-loop)模式: |
|
|
|
预热请求数量或比例: |
|
|
|
单次压测的墙钟时间预算(秒) |
|
小技巧
Closed-loop 模式(默认) 与 Open-loop 模式(--open-loop)的参数行为对比:
Closed-loop(默认) |
Open-loop( |
|
|---|---|---|
|
控制请求调度速率( |
控制请求发出速率;必须 > 0;支持多值(如 |
|
每轮总请求数,与 |
每轮总请求数,须与 |
|
同时在飞行中的最大请求数;每个 worker 收到响应后才发下一条(背压保护) |
被忽略,并发上限为无穷大(INF);请求按调度立即发出,不等待响应 |
适用场景 |
测量服务在受控并发下的延迟与吞吐 |
模拟真实流量(请求到达与服务时间无关);扫描多速率点的吞吐-延迟曲线 |
SLA设置#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
是否启用SLA自动调优模式 |
|
|
|
自动调优的变量 |
|
|
|
SLA约束条件 |
|
|
|
被调优变量的搜索上界 |
|
|
|
被调优变量的搜索下界 |
|
|
|
在 |
|
|
|
每个并发级别的运行次数(取平均值) |
|
|
|
每次测试时请求总数相对于被调优变量(并发数或速率)的倍数,即 |
|
参见
SLA自动调优功能使用详见自动调优指南。
数据集配置#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
数据集模式,详见下方数据集模式 |
- |
|
|
数据集文件或目录路径 |
- |
|
|
数据集加载源,可选值: |
|
|
|
数据集专属参数(JSON 字符串),按 |
- |
--dataset-args 承载的键按用途分布在下列小节:
键 |
用途 |
所在小节 |
|---|---|---|
|
把真实数据的输入截断到固定长度 |
|
|
长上下文前缀注入,构造超长定长输入 |
|
|
生产流量回放的回放行为 |
|
各类 token 长度参数 |
多轮对话数据集 |
备注
--multi-turn-args 已废弃,请改用 --dataset-args(键名不变)。旧参数仍可用,会自动并入 --dataset-args(同名键以 --dataset-args 为准)。
数据集模式#
文本对话类
模式 |
说明 |
支持dataset-path |
|---|---|---|
|
从ModelScope自动下载OpenQA |
✓ |
|
从ModelScope自动下载LongAlpaca-12k |
✓ |
|
逐行将txt文件的每一行作为一个prompt |
✓(必需) |
|
根据 |
✗ |
|
自定义数据集解析器 |
✓ |
多模态类
模式 |
说明 |
支持dataset-path |
|---|---|---|
|
从ModelScope自动下载Flick8k |
✓(目录) |
|
从ModelScope自动下载Kontext-Bench |
✓(目录) |
|
随机生成图像和文本输入 |
✗ |
Embedding 类
模式 |
说明 |
支持dataset-path |
|---|---|---|
|
从文件加载文本数据评测Embedding模型 |
✓ (必需) |
|
根据 |
✗ |
|
批量发送文本数据评测Embedding模型 |
✓ (必需) |
|
批量发送根据 |
✗ |
Rerank 类
模式 |
说明 |
支持dataset-path |
|---|---|---|
|
从文件加载Query-Document对评测Rerank模型 |
✓ (必需) |
|
根据 |
✗ |
多轮对话类
需配合 --multi-turn 使用,参数见多轮对话,详见多轮对话压测指南。
模式 |
说明 |
支持dataset-path |
|---|---|---|
|
合成多轮对话,每轮随机生成 token 序列 |
✗ |
|
✓ |
|
|
从 ModelScope 自动下载英文 ShareGPT 数据集(约 70k 条),保留完整多轮对话 |
✓ |
|
使用本地 JSONL 文件作为自定义多轮对话数据集 |
✓(必需) |
生产流量回放类
需配合 --open-loop 使用,trace 文件格式与回放参数见生产流量回放。
模式 |
说明 |
支持dataset-path |
|---|---|---|
|
回放录制的生产流量 JSONL:按原始时间戳、请求体、headers 逐字重放,贴近真实负载(突发流量、异构请求、多模型路由) |
✓(必需) |
输入构造#
控制送入模型的输入内容与长度。以下小节的 --xxx 为命令行参数,无前缀的键通过 --dataset-args 的 JSON 传入。
长度控制#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
最大输入prompt长度 |
|
|
|
最小输入prompt长度 |
|
想用真实数据(而非 random)压测某个固定输入长度时,用 --dataset-args 的下列键。支持 openqa、longalpaca、line_by_line(仅纯文本行)、ShareGPT(share_gpt_zh / share_gpt_en),需配合 --tokenizer-path。
键 |
说明 |
默认值 |
|---|---|---|
|
目标输入 token 数。设置后每条 prompt 都会被截断到该长度 |
不启用 |
|
对短于目标的 prompt 怎么处理: |
|
# 把每条输入截断到 2048 token
evalscope perf \
--model qwen2.5 --url http://127.0.0.1:8000/v1/completions \
--dataset share_gpt_zh --tokenizer-path /path/to/tokenizer \
--dataset-args '{"target_input_len": 2048}'
长度口径为不含 chat template 开销的裸内容 token 数。ShareGPT 等多轮数据集默认只对最后一轮 user 内容做截断/过滤(与单轮一致);仅当配置了 prefix_file 时才改为按整段对话所有消息内容之和计量、超长丢弃、不足由前缀补齐(见长上下文前缀注入)。line_by_line 的 JSON 行(messages 数组 / 完整 request body)不走长度控制,同时设置本节参数会直接报错。
它和 --max/min-prompt-length 的区别:
--max/min-prompt-length只筛选、不改内容——长度不在区间内的样本被丢弃,你得到的是长短不一的真实样本;target_input_len会改写内容——把每条 prompt 截到指定长度,适合“固定输入长度”的对照压测。
想让“每条恰好 N token”,只能用
target_input_len;把--min-prompt-length和--max-prompt-length设成相等是做不到的(真实数据几乎没有恰好等于 N 的,会被筛空)。random数据集除外——它是现场生成的,min=max 即可定长,无需本参数。
长上下文前缀注入#
真实指令集大多只有 4K-8K token,直接把 target_input_len 设成 128K 会导致 drop 模式筛空、cap 模式长短不一。prefix_file 允许指定一份长文本(如书籍、文档语料),框架按 token 预算把它精确切成 target_input_len − prompt 长度 的前缀与短 prompt 拼接,使每条请求总输入恰好等于目标长度,且保持真实人类语言的低熵特征(适合测 Prefix-Cache 命中率、MTP 接受率)。适用数据集与长度控制相同。
键 |
说明 |
默认值 |
|---|---|---|
|
长前缀文本文件路径(UTF-8 纯文本)。必须同时设置 |
不启用 |
|
前缀注入角色: |
|
# 用长文本前缀把每条请求精确对齐到 131072 token,前缀注入 system 角色
evalscope perf \
--model qwen2.5 --url http://127.0.0.1:8000/v1/chat/completions \
--dataset openqa --tokenizer-path /path/to/tokenizer \
--dataset-args '{"target_input_len": 131072, "prefix_file": "/path/to/long_text.txt", "prefix_role": "system"}'
行为说明:
预算分配:prompt 保持原样(超长时按
input_len_mode截断),前缀精确切到target_input_len − 所有消息内容 token 数,总长恰为目标值;多轮对话的历史一并计入(见长度控制的长度口径)。与
drop互斥:drop只保留已经填满target_input_len的 prompt,前缀预算恒为 0,注入必然失效,因此配置时直接报错。要定长请用cap+ 前缀补齐。前缀不足:前缀文件 token 数不足以填满剩余预算时,会循环重复(tile)补齐后再精确截断,并打 warning 提示。
降级规则:
apply_chat_template关闭(如/v1/completions端点)时无法注入 system 消息,自动降级为纯文本前缀拼接并打 warning。拼接边界:
prefix_role="user"和纯文本降级模式下前缀与 prompt 直接相接,前缀与 prompt 的 token 数是分别计算的,拼接处两侧字符可能被 tokenizer 合并或拆分,因此实测总长可能与目标相差约 ±1 token。prefix_role="system"(chat template 模式)有消息标记隔断边界,不受此影响,始终精确。缓存友好:所有请求共享同一段前缀开头(长度随各条 prompt 略有差异),天然适配 Prefix-Cache 命中测试。
备注
本节的 prefix_file 注入的是真实文本前缀,用于真实数据集;--prefix-length 注入的是随机 token 前缀,只对 random 数据集有效(见下方随机数据生成)。两者用途不同,不要混用。
随机数据生成#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
prompt 的随机 token 前缀长度 |
|
|
|
随机VL数据集图像宽度 |
|
|
|
随机VL数据集图像高度 |
|
|
|
随机VL数据集图像格式 |
|
|
|
随机VL数据集图像数量 |
|
|
|
图像的patch大小 |
|
random 数据集的长度由 --min-prompt-length / --max-prompt-length 决定(两者相等即定长),无需 target_input_len。
Prompt 与模板#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
指定请求prompt |
- |
|
|
指定查询模板 |
- |
|
|
是否应用聊天模板 |
|
|
|
在客户端将prompt tokenize为token ID列表,绕过服务端重新tokenize,通过 |
|
多轮对话#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
启用多轮对话压测模式; |
|
|
|
每个对话最少用户轮数; |
|
|
|
每个对话最多用户轮数; |
|
|
|
CPU 密集型数据集/请求生成的 worker 进程数。 |
|
swe_smith 等多轮数据集的 token 长度参数通过 --dataset-args 传入。
生产流量回放#
用 --dataset workload_trace 把录制的生产流量按原始到达节奏逐字回放,贴近真实负载。必需 --open-loop,无需 --rate(到达时刻由 trace 时间戳决定)。完整示例见生产流量回放。
trace 文件为 JSONL,每行一条请求记录:
{"body": {"model": "qwen-plus", "messages": [{"role": "user", "content": "hi"}]}, "timestamp": 1700000000.0}
{"body": {"model": "qwen-max", "messages": [{"role": "user", "content": "hello"}]}, "timestamp": 1700000001.5, "headers": {"X-Tag": "exp"}, "request_id": "req-42", "completion_tokens": 256}
字段 |
必需 |
说明 |
|---|---|---|
|
✓ |
完整请求体(dict 或 JSON 字符串),原样发送 |
|
✓ |
到达时刻(数字或 ISO-8601 字符串),仅相对间隔有意义,须单调不减 |
|
该请求专属 HTTP 头(与 CLI headers 合并,CLI 优先;hop-by-hop 头会被剔除) |
|
|
透传到结果,用于与原始请求关联 |
|
|
配合 |
回放行为通过 --dataset-args 调整:
键 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
float |
回放倍速(2.0 = 2× 快,0.5 = 2× 慢) |
|
|
str |
把所有请求的 |
不启用 |
|
dict |
按名映射 |
不启用 |
|
bool |
用记录的 |
|
备注
--model 对 workload_trace 不会改写 trace body——每条请求保留自己的 model,从而保留多模型混合路由。需要改模型请用 model_override / model_mapping。
模型与生成参数#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
分词器权重路径 |
|
|
|
frequency_penalty值 |
- |
|
|
是否返回对数概率 |
- |
|
|
可以生成的最大token数量 |
|
|
|
生成的最少token数量 |
- |
|
|
生成的补全选择数量 |
- |
|
|
随机种子 |
|
|
|
停止生成的tokens |
- |
|
|
停止生成的token ID列表 |
- |
|
|
采样温度 |
|
|
|
top_p采样 |
- |
|
|
top_k采样 |
- |
|
|
额外传入请求体的参数 |
- |
分词器与 chat template#
压测 chat/completions 接口时 --apply-chat-template 默认开启,客户端会先套上 chat template 再统计 token 数,使长度计算与服务端 usage.prompt_tokens 对齐;因此 --tokenizer-path 指向的分词器必须自带 Jinja 格式的 chat template。DeepSeek-V3.2 / V4 官方改为提供 encoding 脚本,base / pretrain 权重也不带模板,这类权重会直接报错,报错信息中列出了可选的处理方式。
两个易错点:不传 --tokenizer-path 时 --min-prompt-length / --max-prompt-length 按字符数而非 token 数过滤;借用其它模型的分词器不会报错,但词表不一致会默默把 token 统计算偏。
结果输出#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
可视化工具 |
|
|
|
是否开启进度追踪,将层级压测进度实时写入 |
|
|
|
wandb API密钥 |
- |
|
|
swanlab API密钥 |
- |
|
|
输出文件路径 |
|
|
|
输出目录不包含时间戳 |
|
其他参数#
参数 |
类型 |
说明 |
默认值 |
|---|---|---|---|
|
|
在写入SQLite数据库前缓冲的行数 |
|
|
|
请求队列的最大大小 |
|
|
|
最大调度任务数 |
|