5.7 KiB
5.7 KiB
如何评测新模型
本指南假设模型已通过 sglang/vllm 等部署为 OpenAI 兼容 API,只需修改配置即可用本框架评测。
目录
最小改动:只换模型名和 API 地址
如果新模型能力和 DeepSeek-V4-Flash-INT8 接近,只想换个名字和 API 地址:
cd /data1/sora/evalscope
python bash/run.py \
--model Your-Model-Name \
--api-url http://your-api:30000/v1 \
--dataset-dir /data1/sora/evalscope \
--output-dir /data1/sora/evalscope/output_your_model \
--limit none
--limit none跑完整数据;测试时用--limit 2或--limit 20。
推荐做法:复制一份配置文件
不同模型的最佳 temperature / max_tokens 可能不同,建议为每个模型单独维护一个 YAML。
1. 复制默认配置
cd /data1/sora/evalscope/bash
mkdir -p config
cp config/dpv4-int8_nothinking.yaml config/your-model.yaml
2. 按需修改 config/your-model.yaml
下面是重点需要改的字段:
# 示例: reasoning 模型可能需要 temperature=1.0 多测几次求平均
aime24:
generation_config:
temperature: 1.0 # 多测 benchmark 用 1.0;只测一次用 0.0
top_p: 1.0
stream: true
max_tokens: 32768 # 根据模型输出长度能力调整
# 示例:知识类 benchmark 通常 greedy decoding
mmlu_pro:
generation_config:
temperature: 0.0
top_p: 1.0
stream: true
max_tokens: 8192
# 示例:Agent benchmark 的 judge model
# 如果你不想改 judge model,保持默认 deepseek-v4-pro 即可
tau2_bench:
generation_config:
temperature: 0.0
top_p: 1.0
stream: true
max_tokens: 16384
dataset_args:
extra_params:
user_model: deepseek-v4-pro
api_key: sk-9ed86ef546ca47e3afa7c3b014dea268
api_base: https://api.deepseek.com/v1
generation_config:
temperature: 0.0
max_tokens: 4096
agent_config:
mode: native
strategy: react
max_steps: 50
3. 修改 run.py 中的截断/tokenizer 配置(长上下文模型必看)
打开 bash/run.py,找到下面几行:
MODEL_PATH = '/data1/models/DeepSeek-V4-Flash-INT8'
如果你的新模型本地有 tokenizer 目录,改成对应路径;如果通过 API 跑,这条基本不影响运行,但建议保持和模型一致。
再找到:
TRUNCATION_CONFIG = {
'longbench_v2': 32768*4,
'openai_mrcr': 32768*4,
}
这表示长上下文 benchmark 最多保留 131072 tokens(头尾各一半)。
- 如果新模型 context length 更大且显存足够,可以调大(如
32768*8)。 - 如果显存紧张,可以调小(如
32768*2= 65536)。
4. 修改 judge model(可选)
如果 tau2_bench 需要换 judge:
JUDGE_MODEL_ARGS = {
'model_id': 'deepseek-v4-pro',
'api_url': 'https://api.deepseek.com/v1',
'api_key': 'sk-9ed86ef546ca47e3afa7c3b014dea268',
...
}
如果不需要 judge(例如只跑非 Agent benchmark),可以忽略。
配置参数说明
| 参数 | 作用 | 建议 |
|---|---|---|
temperature |
采样温度 | 需要多次采样求平均的 benchmark(aime/hmmt/imo/live_code_bench/humaneval/gpqa)用 1.0;其余 greedy 0.0 |
max_tokens |
最大输出长度 | 短输出知识题 8192;推理/代码 32768;Agent 16384;具体看模型能力和任务 |
top_p |
nucleus sampling | 一般保持 1.0 |
stream |
流式输出 | 建议 true,兼容性好 |
agent_config.max_steps |
Agent 最大步数 | 默认 50;复杂任务可调大,简单任务可调小 |
TRUNCATION_CONFIG |
长上下文截断 | 根据模型 context length 和显存调整 |
运行命令
全量跑
cd /data1/sora/evalscope
python bash/run.py \
--config bash/config/your-model.yaml \
--model Your-Model-Name \
--api-url http://your-api:30000/v1 \
--dataset-dir /data1/sora/evalscope \
--output-dir /data1/sora/evalscope/output_your_model \
--limit none
只跑某个分组
python bash/run_group1.py \
--config bash/config/your-model.yaml \
--model Your-Model-Name \
--api-url http://your-api:30000/v1 \
--dataset-dir /data1/sora/evalscope \
--output-dir /data1/sora/evalscope/output_your_model_group1 \
--limit none
Docker 方式
docker run -it --rm \
--network host \
-v /data1/sora/evalscope/datasets:/opt/evalscope/datasets \
-v /data1/sora/evalscope/output_your_model:/opt/evalscope/output_your_model \
-v /var/run/docker.sock:/var/run/docker.sock \
evalscope-complete-py312:latest \
bash -c "
cd /opt/evalscope && \
python bash/run.py \
--config bash/config/your-model.yaml \
--model Your-Model-Name \
--api-url http://localhost:30000/v1 \
--dataset-dir /opt/evalscope \
--output-dir /opt/evalscope/output_your_model \
--limit none
"
结果收集
评测完成后,结果在 --output-dir 目录下:
output_your_model/
├── humaneval/seed_42/reports/Your-Model-Name/humaneval.json
├── aime24/seed_42/reports/Your-Model-Name/aime24.json
└── ...
汇总分数:
python3 -c "
import json, glob
for f in sorted(glob.glob('/data1/sora/evalscope/output_your_model/*/seed_*/reports/*/*.json')):
data = json.load(open(f))
score = data.get('score', data.get('mean_acc', 'N/A'))
print(f'{f}: {score}')
"
或者用 bash/update_excel.py(如果有)把结果写入 Excel。