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

5.7 KiB
Raw Permalink Blame History

如何评测新模型

本指南假设模型已通过 sglang/vllm 等部署为 OpenAI 兼容 API只需修改配置即可用本框架评测。


目录

  1. 最小改动:只换模型名和 API 地址
  2. 推荐做法:复制一份配置文件
  3. 配置参数说明
  4. 运行命令
  5. 结果收集

最小改动:只换模型名和 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 采样温度 需要多次采样求平均的 benchmarkaime/hmmt/imo/live_code_bench/humaneval/gpqa1.0;其余 greedy 0.0
max_tokens 最大输出长度 短输出知识题 8192;推理/代码 32768Agent 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。