sora 44303d8953 Allow resume when only sample limit changes, and keep CSV rows across runs.
Identity fingerprints ignore limit so later larger runs reuse cached predictions. Summary tables upsert by benchmark and take agent TTFT/latency from the report's per-request stats.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-03 03:54:26 +00:00
all
2026-07-21 09:32:49 +00:00
all
2026-07-21 09:32:49 +00:00
all
2026-07-21 09:32:49 +00:00
all
2026-07-21 09:32:49 +00:00
all
2026-07-21 09:32:49 +00:00
all
2026-07-21 09:32:49 +00:00

EvalScope 评测脚本与配置

本仓库包含一组基于 EvalScope 的评测脚本、配置和辅助工具,用于通过 OpenAI-compatible API 统一运行各类 LLM benchmark。

代码本身与具体模型无关,当前默认配置以 DeepSeek-V4-Flash-INT8 为例,可通过命令行参数或配置文件切换到其他模型。


1. 代码组成

/data1/sora/evalscope/
├── bash/                           # 可执行脚本
│   ├── run.py                      # 统一 benchmark 入口
│   ├── collect_results.py          # 汇总分数到 Excel/CSV
│   ├── perf_backup.py              # 断点续跑:备份与恢复 predictions/perf
│   ├── pull_swe_bench_images.py    # 预拉 SWE-bench Docker 镜像
│   └── test.sh                     # 本地测试脚本示例
├── config/
│   └── dpv4-int8_nothinking.yaml   # benchmark 生成参数配置
├── tools/docker/                   # Docker 镜像构建上下文
│   ├── Dockerfile.py312
│   ├── bash/
│   ├── evalscope/
│   └── tau2-bench/
├── myread.md                       # 详细使用手册
└── DOCKER_BUILD.md                 # Docker 镜像构建说明

2. 核心脚本

2.1 bash/run.py

统一的 benchmark 启动入口,支持 suite、自定义 datasets、thinking 模式、输出目录组织、断点续跑、自动汇总等。

python bash/run.py \
  --model DeepSeek-V4-Flash-Int8 \
  --api-url http://localhost:30000/v1 \
  --dataset-dir /data1/sora/evalscope \
  --output-dir /data1/sora/evalscope/output \
  --suite official \
  --limit none

2.2 bash/collect_results.py

读取各 benchmark 的 reports/{benchmark}.json,汇总成:

  • results/{folder_name}.xlsx
  • results/{folder_name}.csv

run.py 在每个 benchmark 结束后自动调用,也可单独运行。

2.3 bash/perf_backup.py

实现断点续跑:

  • 每次 benchmark 完成后把 predictions/ 和 report JSON 备份到 durable 目录。
  • 再次运行同一 benchmark 前自动恢复到 work_dir,避免重复推理。
  • 记录 active_timekill 后重启不会重复计算等待时间。

2.4 bash/pull_swe_bench_images.py

根据数据集实例批量预拉 SWE-bench 评测所需的 Docker 镜像,支持:

  • --dataset:指定 swe_bench_verified / swe_bench_lite 等,支持逗号分隔多数据集
  • --max-workers:控制并发数
  • 国内源加载数据集元数据

2.5 config/dpv4-int8_nothinking.yaml

各 benchmark 的 temperaturetop_pmax_tokenssubset_listagent_config 等参数。未在此文件中的 benchmark 会回退到 run.py 里的默认生成参数(temperature=0.0, top_p=1.0, max_tokens=32768)。


3. Docker 镜像下载与部署

最简方式:直接运行一键部署脚本。

# 默认不下载 SWE-Bench 镜像(体积大)
bash scripts/deploy_evalscope.sh /data1/sora

# 如果需要跑 SWE-Bench加 --download-swe
bash scripts/deploy_evalscope.sh --download-swe /data1/sora

脚本会自动完成:安装 modelscope、登录、下载数据集、下载/加载 Docker 镜像、配置 Docker/containerd、加载 sandbox 镜像。重复执行时会通过 checkpoint 自动跳过已加载的镜像。

如果需要手动分步操作,参考下面两种方式。

3.1 方式 A不测 SWE-bench 的 Docker 配置

如果只跑常规 benchmark不含 swe_bench_*),不需要迁移 Docker data-root,只需配置国内镜像加速并加载基础镜像:

# 1. 暂停服务
sudo systemctl stop docker.socket
sudo systemctl stop docker

# 2. 配置 Docker 国内镜像加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://hub.rat.dev",
    "https://docker.1panel.live",
    "https://dockerproxy.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.tuna.tsinghua.edu.cn"
  ]
}
EOF

# 3. 重启 Docker
sudo systemctl start docker

# 4. 加载 evalscope 环境镜像(含 Python 3.12 + 全部依赖)
docker load -i /data1/sora/evalscope/docker/evalscope-complete-py312.tar.gz

# 5. 准备代码执行 sandbox 镜像humaneval / bigcodebench 必须)
# 从 ModelScope 下载预打包的 sandbox 镜像(避免 DockerHub 限流/超时)
python3 -c "
from modelscope.hub.file_download import model_file_download
model_file_download(
    model_id='SoraAmami/evalscope-sandbox-images',
    file_path='bigcodebench-sandbox.tar.gz',
    local_dir='/data1/sora/evalscope/docker/sandbox_images'
)
model_file_download(
    model_id='SoraAmami/evalscope-sandbox-images',
    file_path='python-3.11-slim.tar.gz',
    local_dir='/data1/sora/evalscope/docker/sandbox_images'
)
"
docker load -i /data1/sora/evalscope/docker/sandbox_images/bigcodebench-sandbox.tar.gz
docker load -i /data1/sora/evalscope/docker/sandbox_images/python-3.11-slim.tar.gz

验证:

docker images | grep -E 'evalscope-complete-py312|bigcodebench-sandbox|python:3.11-slim'

3.2 方式 B测 SWE-bench 的 Docker 配置(大容量存储路径)

SWE-bench 镜像数量多、体积大,必须把 Docker data-root 和 containerd root 都迁移到 /data1 大容量盘:

# 1. 暂停服务
sudo systemctl stop docker.socket
sudo systemctl stop docker
sudo systemctl stop containerd

# 2. 创建新的数据目录
mkdir -p /data1/sora/evalscope/docker/images
mkdir -p /data1/sora/evalscope/docker/containerd

# 3. 配置国内镜像加速 + 大容量 data-root
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "data-root": "/data1/sora/evalscope/docker/images",
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://hub.rat.dev",
    "https://docker.1panel.live",
    "https://dockerproxy.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.tuna.tsinghua.edu.cn"
  ]
}
EOF

# 4. 配置 containerd 数据目录
sudo tee /etc/containerd/config.toml <<-'EOF'
root = "/data1/sora/evalscope/docker/containerd"
state = "/run/containerd"
EOF

# 5. 重启
sudo systemctl reset-failed docker.service
sudo systemctl start containerd
sudo systemctl start docker

# 6. 加载 evalscope 环境镜像
docker load -i /data1/sora/evalscope/docker/evalscope-complete-py312.tar.gz

# 7. 准备代码执行 sandbox 镜像
# 从 ModelScope 下载预打包的 sandbox 镜像(避免 DockerHub 限流/超时)
python3 -c "
from modelscope.hub.file_download import model_file_download
model_file_download(
    model_id='SoraAmami/evalscope-sandbox-images',
    file_path='bigcodebench-sandbox.tar.gz',
    local_dir='/data1/sora/evalscope/docker/sandbox_images'
)
model_file_download(
    model_id='SoraAmami/evalscope-sandbox-images',
    file_path='python-3.11-slim.tar.gz',
    local_dir='/data1/sora/evalscope/docker/sandbox_images'
)
"
docker load -i /data1/sora/evalscope/docker/sandbox_images/bigcodebench-sandbox.tar.gz
docker load -i /data1/sora/evalscope/docker/sandbox_images/python-3.11-slim.tar.gz

验证:

docker images | grep -E 'evalscope-complete-py312|bigcodebench-sandbox|python:3.11-slim'

4. bash/run.py 完整参数

参数 默认值 说明
--model DeepSeek-V4-Flash-Int8 模型名,传给 OpenAI API 的 model 字段
--api-url http://localhost:30000/v1 模型服务地址
--dataset-dir /data1/sora/evalscope 数据集父目录evalscope 会自动找其下的 datasets/
--output-dir /data1/sora/evalscope/output 评测输出根目录
--folder-name model_namemodel_name_THINKING 顶层输出文件夹名
--config config/dpv4-int8_nothinking.yaml YAML 配置文件路径
--tokenizer-path /data1/models/DeepSeek-V4-Flash-INT8 本地 tokenizer 路径,用于长文本 middle-truncation
--suite full 预置套件:full / lite / mid / full / lite / mid / k3 / tencent_hunyuan / group1 / group2 / group3 / official
--datasets None 逗号分隔自定义 benchmark 列表,覆盖 --suite
--exclude None 从当前 suite 中排除的 benchmark
--limit None 每数据集最多跑几条;none / all 表示全量
--seed 42 随机种子
--batch-size 4 评测并发
--thinking False 开启 thinking 模式
--no-thinking - 关闭 thinking 模式
--thinking-max-tokens-scale 1.0 thinking 开启时max_tokens 乘以该系数
--max-tokens-add 0 每个 benchmark 的 max_tokens 额外增加的值
--judge-model DeepSeek/DeepSeek-V4-Pro LLM-as-judge 模型名
--judge-api-url Vectron 地址 裁判模型 API 地址
--judge-api-key 内置 key 裁判模型 API key
--judge-max-tokens 10240 裁判模型最大输出长度
--truncation-tokens 131072 长文本 middle-truncation token 上限
--no-summary - 跳过每次 benchmark 后的汇总 Excel/CSV

5. 套件与 Benchmark 覆盖

4.1 full 全量套件

覆盖全部 benchmark含 multi-run

  • multi-runhumaneval, live_code_bench, aime24, aime25, aime26, hmmt26, imo_answerbench, gpqa_diamond
  • single-runbigcodebench, bfcl_v3, competition_math, gsm8k, hle, super_gpqa, arc, bbh, cmmlu, drop, hellaswag, mmlu, mmlu_pro, simple_qa, trivia_qa, winogrande, openai_mrcr, longbench_v2
  • agenttau2_bench, general_fc

预计时间:约 75h(已含 multi-run基于 CSV 实测)。

4.2 official 官方对比套件

当前默认配置:

类型 Benchmark
multi-run aime25, aime26, live_code_bench
single-run hle, mmlu_pro, gpqa_diamond, longbench_v2, swe_bench_verified
agent tau2_bench

注意hletau2_bench 需要 LLM-as-judge默认 DeepSeek/DeepSeek-V4-Pro @ Vectron。如果裁判 API 余额/配额不足,会报 402/429,需要充值或换用其他 judge 模型。

预计时间:视模型速度和是否启用 swe 而定,通常 数小时到数十小时

4.3 lite 快速冒烟

  • multiaime24, humaneval
  • singlegsm8k, arc, longbench_v2
  • agentgeneral_fc

预计时间:约 5h

4.4 mid 平衡套件

  • multiaime24, humaneval
  • singlelive_code_bench, bigcodebench, competition_math, gsm8k, gpqa_diamond, mmlu_pro, simple_qa, longbench_v2, openai_mrcr
  • agentgeneral_fc, tau2_bench

预计时间:约 25h

4.5 group1/2/3 多机组分组

用于多机并行,合计覆盖 full 全部 benchmark

套件 multi single agent 预计时间
group1 live_code_bench, aime24, aime25, aime26, hmmt26, imo_answerbench, humaneval bigcodebench, competition_math, gsm8k, drop, arc, hellaswag, winogrande - ~22h
group2 - hle, mmlu_pro, trivia_qa - ~26h
group3 gpqa_diamond openai_mrcr, longbench_v2, bfcl_v3, mmlu, cmmlu, bbh, simple_qa tau2_bench, general_fc ~27h

4.6 多机同时跑 official 套件示例

official 套件可在多台机器上并行执行,每台调用各自的本地模型服务:

# 01 跑 swe_bench_verified
python bash/run.py \
  --api-url http://174.1.51.1:30000/v1 \
  --datasets swe_bench_verified \
  --folder-name DP4-flash-int8-thinking-add0 \
  --thinking --max-tokens-add 0

# 02 跑 mmlu_pro / gpqa_diamond / longbench_v2
python bash/run.py \
  --api-url http://174.1.51.2:30000/v1 \
  --datasets mmlu_pro,gpqa_diamond,longbench_v2 \
  --folder-name DP4-flash-int8-thinking-add0 \
  --thinking --max-tokens-add 0

# 04 跑 hle需要可用 judge API否则会失败
python bash/run.py \
  --api-url http://174.1.51.4:30000/v1 \
  --datasets hle \
  --folder-name DP4-flash-int8-thinking-add0 \
  --thinking --max-tokens-add 0

跑完后所有机器的 output/DP4-flash-int8-thinking-add0/ 可合并到同一目录,再运行 bash/collect_results.py 生成汇总表。


6. Multi-run 配置

以下 benchmark 默认会重复跑多次再取平均,次数在 bash/run.pyMULTI_RUN_CONFIG 中定义:

Benchmark 次数 说明
aime24 / aime25 / aime26 / hmmt26 12 样本少,多次采样稳定结果
live_code_bench 5 约 100 样本
imo_answerbench 4 约 120 样本
humaneval 3 约 164 样本
gpqa_diamond 2 约 198 样本

7. 输出目录与统计

6.1 目录结构

output/
└── {folder_name}/                  # 默认 model_namethinking 时默认 model_name_THINKING
    ├── {benchmark}/
    │   ├── seed_{seed}/            # 单次或 multi-run 第 1 次
    │   │   ├── predictions/
    │   │   ├── reviews/
    │   │   ├── reports/{benchmark}.json
    │   │   └── logs/
    │   ├── seed_{seed}_run_1/      # multi-run 第 2 次
    │   ├── seed_{seed}_run_2/      # multi-run 第 3 次
    │   └── ...
    └── active_time/                # 每个 benchmark 的真实运行时间累计

results/
└── {folder_name}.xlsx              # 汇总表格

6.2 汇总表格字段

Excel / CSV 通常包含:

字段 说明
benchmark benchmark 名
score 最终分数
num 样本数
active_time(h) 真实运行时间(小时)
latency(s) 平均推理延迟
ttft(s) 首 token 时间
tps 每秒 token 数
input_tokens / output_tokens 平均输入/输出 token 数

6.3 查看单个 benchmark 分数

cat output/{folder_name}/aime25/seed_42/reports/aime25.json

6.4 查看汇总分数

python3 -c "
import json, glob
for f in sorted(glob.glob('output/{folder_name}/*/seed_*/reports/*/*.json')):
    data = json.load(open(f))
    score = data.get('score', data.get('mean_acc', 'N/A'))
    print(f'{f}: {score}')
"

8. 快速开始

7.1 安装依赖

conda create -n evalscope python=3.12 -y
conda activate evalscope
cd /data1/sora/evalscope
pip install -e .

7.2 运行单个 benchmark

python bash/run.py --datasets gsm8k --limit 50

7.3 运行 suite

# 官方对比套件
python bash/run.py --suite official --limit none

# thinking 模式
python bash/run.py --suite official --thinking --thinking-max-tokens-scale 2.0

# 自定义输出文件夹
python bash/run.py --suite official --folder-name my_exp --limit none

7.4 预拉 SWE-bench 镜像

python bash/pull_swe_bench_images.py --dataset swe_bench_verified --max-workers 4

详细参数见:

python bash/run.py --help

9. 设计说明

  • 模型无关run.py 通过 --model / --api-url 接入任意 OpenAI-compatible 服务。
  • 配置可覆盖YAML 配置 + 命令行参数,未配置的 benchmark 自动使用默认生成参数。
  • 可恢复:基于 perf_backup.py,适合长时间评测任务在 kill/中断后继续。
  • 可汇总:基于 collect_results.py,自动产出可对比的 Excel/CSV。
  • 可扩展:新增 benchmark 只需在 YAML 配置参数,或在运行时依赖默认生成参数。

10. 相关文档

Description
No description provided
Readme 67 MiB
Languages
Python 83.2%
TypeScript 11%
HTML 3.2%
JavaScript 1.1%
CSS 0.6%
Other 0.8%