入门AI模型评测:用lm-evaluation-harness跑出第一份可对比的测试报告
刚接触 AI 模型评测学习时,最容易犯的错是只看一个总分就下结论。
不同评测工具、不同提示词模板、不同显存配置,分数可能差出一大截。
这篇文章用 EleutherAI 的 lm-evaluation-harness,在 Linux 服务器上对一个小尺寸开源模型跑一次完整评测,重点不是追求高分,而是让你理解评测流程、结果含义和可复现的写法。
先想清楚:评测到底在评什么
模型评测的核心是在同一套任务、提示格式和打分规则下比较模型输出。
lm-evaluation-harness 把常见任务(如 ARC、HellaSwag、MMLU)封装成标准流程,你只需要指定模型路径和任务名。
学习阶段建议先选参数量 1B 以下的模型,跑通流程比分数重要。
环境准备:隔离Python环境,避免依赖冲突
评测工具对 transformers、torch、datasets 的版本比较敏感,直接装在系统 Python 里容易和别的项目打架。
用 conda 建独立环境:
conda create -n eval-harness python=3.10 -y
conda activate eval-harness
pip install torch --index-url https://download.pytorch.org/whl/cu121
pip install lm-eval
如果你的服务器没有 GPU,把 torch 换成 CPU 版本也能跑,只是速度慢。
安装完成后用 lm-eval --help 检查命令是否可用。
选模型和任务:从小处开始
选一个 Hugging Face 上公开的小模型,例如 Qwen/Qwen2.5-0.5B。
任务先从简单的开始,一次只跑一个:
lm_eval --model hf \
--model_args pretrained=Qwen/Qwen2.5-0.5B \
--tasks hellaswag \
--batch_size 1 \
--output_path ./results/qwen_hellaswag.json
参数说明:--model hf 表示用 Hugging Face 加载模型;--batch_size 1 是最保守的显存配置;--output_path 指定结果文件。
第一次跑不要加太多任务,先确认输出文件正常生成。
看懂结果:分数背后的三个细节
运行结束后,终端会打印类似 hellaswag: acc,none 0.42 的指标。
学习阶段重点看三件事:
- 任务名和指标名:不同任务默认指标不同,
acc是准确率,acc_norm是按长度归一化后的准确率,两者不能直接混用。 - 样本数量:结果文件里有
n-samples字段,样本太少时分数波动大,不要拿小样本分数做严肃对比。 - 提示模板:harness 内置了多种提示格式,不同模板会影响分数。做对比实验时,确保两次运行的
--tasks和模板版本一致。
避坑:显存不足和加载失败
跑小模型也可能遇到 CUDA out of memory。
按顺序尝试:把 --batch_size 降到 1;
加 --model_args pretrained=...,dtype=float16 用半精度加载;
如果还不行,加 --device cpu 先跑通流程,再回到 GPU 调参。
另一个常见问题是模型下载失败。
检查网络是否能访问 Hugging Face,必要时设置镜像:
export HF_ENDPOINT=https://hf-mirror.com
如果报 KeyError 或任务找不到,先运行 lm-eval --tasks list 确认任务名拼写,不要凭记忆写任务名。
验证:结果可复现才算跑通
同一模型、同一任务、同一参数跑两次,分数应该基本一致。
你可以把 --output_path 换成不同文件名再跑一次,对比两次结果中的 acc 和 n-samples。
如果差异明显,检查是否误改了 --batch_size 或模型路径。
学习 AI 模型评测,关键不是刷出多高的分数,而是能说清楚“在什么条件下、用什么任务、得到了什么结果”。
把本文的命令保存成一个脚本,后续换模型或换任务时只改参数,评测流程就能稳定复用。