sora 279a83051d Fix deploy_evalscope.sh: clone code into EVALSCOPE_DIR root instead of evalstone/ subdirectory
- Previously the script cloned code into /evalstone/, so after
  mounting the host directory to /opt/evalscope the container could not find
  bash/run.py and the evalscope package.
- Now the script clones directly into  root, preserving existing
  datasets/ and docker/ directories.
- Also handles migration from old evalstone/ subdirectory layouts.
2026-07-27 07:49:16 +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 import HubApi
api = HubApi()
api.download_file(
    repo_id='SoraAmami/evalscope-sandbox-images',
    repo_type='dataset',
    path='bigcodebench-sandbox.tar.gz',
    local_dir='/data1/sora/evalscope/docker/sandbox_images'
)
api.download_file(
    repo_id='SoraAmami/evalscope-sandbox-images',
    repo_type='dataset',
    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 import HubApi
api = HubApi()
api.download_file(
    repo_id='SoraAmami/evalscope-sandbox-images',
    repo_type='dataset',
    path='bigcodebench-sandbox.tar.gz',
    local_dir='/data1/sora/evalscope/docker/sandbox_images'
)
api.download_file(
    repo_id='SoraAmami/evalscope-sandbox-images',
    repo_type='dataset',
    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 / 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
agent tau2_bench

swe_bench_verified 默认注释掉,如需启用可修改 bash/run.pyofficial suite。

预计时间:视模型速度和是否启用 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

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 ./evalscope

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%