evalstone/HOWTO_EVAL_NEW_MODEL.md
2026-07-21 09:32:49 +00:00

217 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 如何评测新模型
> 本指南假设模型已通过 sglang/vllm 等部署为 OpenAI 兼容 API只需修改配置即可用本框架评测。
---
## 目录
1. [最小改动:只换模型名和 API 地址](#最小改动只换模型名和-api-地址)
2. [推荐做法:复制一份配置文件](#推荐做法复制一份配置文件)
3. [配置参数说明](#配置参数说明)
4. [运行命令](#运行命令)
5. [结果收集](#结果收集)
---
## 最小改动:只换模型名和 API 地址
如果新模型能力和 `DeepSeek-V4-Flash-INT8` 接近,只想换个名字和 API 地址:
```bash
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. 复制默认配置
```bash
cd /data1/sora/evalscope/bash
mkdir -p config
cp config/dpv4-int8_nothinking.yaml config/your-model.yaml
```
### 2. 按需修改 `config/your-model.yaml`
下面是重点需要改的字段:
```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`,找到下面几行:
```python
MODEL_PATH = '/data1/models/DeepSeek-V4-Flash-INT8'
```
如果你的新模型本地有 tokenizer 目录,改成对应路径;如果通过 API 跑,这条基本不影响运行,但建议保持和模型一致。
再找到:
```python
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
```python
JUDGE_MODEL_ARGS = {
'model_id': 'deepseek-v4-pro',
'api_url': 'https://api.deepseek.com/v1',
'api_key': 'sk-9ed86ef546ca47e3afa7c3b014dea268',
...
}
```
如果不需要 judge例如只跑非 Agent benchmark可以忽略。
---
## 配置参数说明
| 参数 | 作用 | 建议 |
|------|------|------|
| `temperature` | 采样温度 | 需要多次采样求平均的 benchmarkaime/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 和显存调整 |
---
## 运行命令
### 全量跑
```bash
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
```
### 只跑某个分组
```bash
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 方式
```bash
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
└── ...
```
汇总分数:
```bash
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。