# 如何评测新模型 > 本指南假设模型已通过 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` | 采样温度 | 需要多次采样求平均的 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 和显存调整 | --- ## 运行命令 ### 全量跑 ```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。