深色模式
基准测试:MMLU / GSM8K / IFEval
摘要:本文聚焦三个对工程选型最有参考价值的公开学术基准——MMLU(知识广度)、GSM8K(数学推理)、IFEval(指令遵循),并演示如何用 EleutherAI 的
lm-evaluation-harness一键复现。所有引用的分数都标注了来源版本,强调"协议不同分数不可横比"与"数据污染/天花板"两大陷阱。适用版本:lm-evaluation-harness(主分支,安装见下文,版本号[未实测]);基准协议以原始论文为准。
核心概念
三个基准分别覆盖模型能力的不同切面:
| 基准 | 论文 / 来源 | 类型 | 评测什么 | 标准协议 | 随机基线 |
|---|---|---|---|---|---|
| MMLU | Hendrycks et al., ICLR 2021, arXiv:2009.03300 | 57 学科多选 | 知识广度 | 5-shot | 25% |
| GSM8K | OpenAI Cobbe et al., 2021, arXiv:2110.14168 | 小学数学应用题 | 多步数学推理(CoT) | 8-shot CoT | 0% |
| IFEval | Google Zhou et al., 2023, arXiv:2311.07911 | 可验证指令 | 是否遵循格式/约束 | 0-shot 程序校验 | 无 |
三者互补,不可互相替代
MMLU 高不代表会算数(数学靠 GSM8K),GSM8K 高不代表听指令(格式靠 IFEval)。选型时应三张表一起看,并叠加你的私有业务集(见 dataset.md)。
为什么用 LM Eval Harness
社区事实标准的 runner。模型卡上写的"MMLU 67.3%"几乎都来自它或它的 fork。统一 runner 的意义在于:few-shot 示例、答案抽取方式、长度归一化等微小差异能让分数浮动好几个点。用同一 harness + 同一 task 版本,才能做纵向(跨版本)与横向(跨模型)的可比评测。
安装
bash
# 稳定版
pip install lm-eval
# 需要最新 task 定义或 vLLM/API 后端时,从源码装 extras
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e ".[vllm,api]" # vllm=高吞吐后端, api=OpenAI 兼容后端1
2
3
4
5
6
7
2
3
4
5
6
7
版本相关
task 定义(如 mmlu 的 few-shot 模板)随 harness 版本演进。务必用 --output_path 把结果 JSON 落盘,里面记录了 task 的 version,复现时锁定同一版本。[版本相关:task 版本随仓库更新,未实测固定版本号]
操作步骤:跑三大基准
1. 本地 HuggingFace 模型(MMLU + GSM8K)
bash
lm_eval \
--model hf \
--model_args pretrained=meta-llama/Llama-3.1-8B-Instruct,dtype=bfloat16 \
--tasks mmlu,gsm8k \
--num_fewshot 5 \
--batch_size auto \
--output_path results/llama31-8b1
2
3
4
5
6
7
2
3
4
5
6
7
--num_fewshot 5:MMLU 惯例 5-shot,GSM8K 常用 5/8-shot。--batch_size auto 让 harness 自动选最大可放下显存的批次。
2. 用 vLLM 提速(大模型必备)
bash
lm_eval \
--model vllm \
--model_args pretrained=meta-llama/Llama-3.1-8B-Instruct,dtype=bfloat16,tensor_parallel_size=1 \
--tasks mmlu,gsm8k,ifeval \
--num_fewshot 5 \
--batch_size auto \
--output_path results/llama31-8b-vllm1
2
3
4
5
6
7
2
3
4
5
6
7
3. 评测 OpenAI 兼容端点(自托管推理服务)
bash
lm_eval \
--model local-completions \
--tasks gsm8k,ifeval \
--model_args model=my-model,base_url=http://localhost:8000/v1/completions,num_concurrent=8,tokenized_requests=False \
--apply_chat_template1
2
3
4
5
2
3
4
5
指令微调模型务必加 --apply_chat_template
指令微调模型若用基座的 few-shot 模板,可能低估真实能力 5–15 分。对 chat 模型加 --apply_chat_template,并人工抽查几条原始生成确认 prompt 形态符合预期。
4. IFEval 单独跑(指令遵循,0-shot 程序校验)
bash
lm_eval \
--model hf \
--model_args pretrained=meta-llama/Llama-3.1-8B-Instruct,dtype=bfloat16 \
--tasks ifeval \
--output_path results/ifeval1
2
3
4
5
2
3
4
5
关键分数(来自可核实来源)
分数必须带协议上下文
以下数字均来自原始论文或 HELM 报告,仅作"量级参考"。不同 harness 版本、few-shot 数、prompt 模板都会改变数值,禁止脱离上下文横比。
- MMLU(Hendrycks et al. 2021,5-shot):随机基线 25%;论文估计专家人类 89.8%;GPT-4 报告 86.4%(标准 5-shot)。来源:arXiv:2009.03300 及多家模型卡。
- GSM8K(CoT 协议):HELM 报告(2024 AI Index)中 GPT-4 (0613) 的 GSM8K-EM 为 0.93。来源:Stanford HAI AI Index 2024 第 2 章 / crfm.stanford.edu/helm。
[分数来源 HELM 报告,含特定模型版本,未自行复现] - IFEval(Zhou et al. 2023,0-shot 程序校验):GPT-4 prompt-level strict 76.89%、instruction-level strict 83.57%,loose 分别为 79.30% / 85.37%(论文 Table 3)。来源:arXiv:2311.07911。
验证
bash
# 列出可用 task,确认名称拼写
lm_eval --tasks list | grep -E "mmlu|gsm8k|ifeval"
# 查看结果 JSON 结构(含 config 与 task version,用于复现)
python - <<'PY'
import json
with open("results/llama31-8b/vllm-...json") as f: # TODO(verify): 替换为实际文件名
r = json.load(f)
print(r["results"])
print(r.get("config"))
PY1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
结果示例(示意,非真实输出)[未实测]:
json
{ "results": { "mmlu": { "acc": 0.65, "acc_stderr": 0.004 },
"gsm8k": { "exact_match": 0.78, "exact_match_stderr": 0.006 } } }1
2
2
回滚 / 清理
- 评测是离线只读操作,不影响线上。风险点在于 GPU/API 配额与成本,见下。
- 跑完删除中间
--log_samples产生的大日志,仅保留聚合 JSON:
bash
# 仅保留 results 目录,清理调试样本
rm -rf results/llama31-8b/logs # TODO(verify): 视实际目录结构1
2
2
不要用基准分数做上线许可
公开基准只回答"模型能力基线",不回答"你的 RAG/Agent 业务能否上线"。上线许可必须来自私有黄金集回归(dataset.md + ragas.md)。
故障排查
| 现象 | 可能原因 | 处理 |
|---|---|---|
CUDA out of memory | batch 太大 | --batch_size 4 或更小,或用 vLLM |
| 分数远低于模型卡 | 指令模型未加 --apply_chat_template | 加模板后重跑 |
| IFEval 分数异常低 | 模型加了多余 markdown/寒暄 | 用 loose 指标并做首尾行清理 |
| task 名称找不到 | harness 版本不含该 task | 升级或从源码安装 |
安全与合规
数据污染与泄露红线
- 污染判断:若小版本 MMLU 无架构变化却暴涨 ≥15 分,优先怀疑训练集泄露,而非能力跃迁。可交叉用 MMLU-Redux(人工校正版)或 MMLU-Pro 验证。
- 评测数据泄露:线上推理服务的请求/响应若被写入评测日志,需脱敏(见 online-monitor.md 的 PII 掩码)。
- 不要为刷分改基准:公开基准答案固定,任何"针对性微调到过拟合"都会在生产失效。
成本 / 性能
- GPU 自跑:Llama-3.1-8B 全量 MMLU(约 1.58 万题)+ GSM8K(约 1.3 千题)在单张消费级/数据中心 GPU 上通常几分钟到十几分钟
[未实测,取决于卡与 batch];前沿 70B+ 模型需多卡或 API。 - API 成本:以 token 计,MMLU + GSM8K 全量单次成本通常在数美元到数十美元量级
[未实测,取决于模型单价与并发];IFEval 仅 541 条 prompt,成本低。 - 提速:vLLM 后端 +
tensor_parallel_size可显著缩短时间;--output_path落盘便于事后分析无需重跑。
参考资料
- Hendrycks et al. 2021, Measuring Massive Multitask Language Understanding (MMLU), arXiv:2009.03300
- Cobbe et al. 2021, Training Verifiers to Solve Math Word Problems (GSM8K), arXiv:2110.14168
- Zhou et al. 2023, Instruction-Following Evaluation for Large Language Models (IFEval), arXiv:2311.07911
- EleutherAI lm-evaluation-harness(GitHub)
- Stanford HAI AI Index 2024 Report, Chapter 2 (HELM 数据)