这个坑值得记一笔。跑 MMLU 得到二十多分,明显低于该模型公开成绩,抽样看输出发现模型没有按选项格式回答。

刚开始盯着「批大小过大导致填充影响生成」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。few-shot 数量设为 0,模型不知道要输出选项;提示模板与模型训练格式不匹配;评测的分词器版本与训练时不一致。

上来先按标准设置五个示例重跑

lm_eval --model hf --model_args pretrained=./model --tasks mmlu --num_fewshot 5

接着抽样打印几条原始输出看格式

python -c "print(samples[:2])"

缩小批大小排除填充影响

lm_eval --model hf --model_args pretrained=./model --tasks mmlu --batch_size 1

剩下的就是确认分词器与模型目录一致

python -c "print(tokenizer.vocab_size)")

同事提醒我看一下最近一次发布,时间点确实对得上。

改完先别撤,确认这几项。分数回到与该模型公开结果接近的区间,输出基本都落在选项字母上。

few-shot 的示例是拼在提示里的,会占用上下文长度,长上下文模型和小窗口模型要用不同的示例数量。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189