$ lm-eval run --model local-chat-completions
DeepSeek 接入 LM Evaluation Harness:从 API 到首个可复现结果
LM Evaluation Harness(常简称 lm-eval)把任务加载、Prompt 构造、模型调用、答案提取和指标聚合放进同一套流程。DeepSeek API 提供 OpenAI 兼容格式,因此可以通过 Harness 的 Chat Completions 后端接入,不需要修改框架源码。
一、安装 API 后端
python -m venv .venv
source .venv/bin/activate
pip install "lm_eval[api]"
较新的 Harness CLI 使用 run、ls 和 validate 子命令。先列出本地版本实际提供的任务,不要从旧文章复制可能已改名的 task ID:
lm-eval ls tasks
lm-eval run -h
二、安全设置密钥
Harness 的 OpenAI 兼容后端读取 OPENAI_API_KEY。可以在当前 Shell 中把 DeepSeek 密钥映射给它,但不要把真实密钥写入命令历史、配置文件或结果目录。
export OPENAI_API_KEY="$DEEPSEEK_API_KEY"
三、先跑 10 条烟雾测试
lm-eval run --model local-chat-completions --model_args model=deepseek-v4-flash,base_url=https://api.deepseek.com/chat/completions,num_concurrent=1,max_retries=3 --tasks gsm8k --apply_chat_template --limit 10 --log_samples --output_path ./results/deepseek-smoke
--limit 10 只适合检查链路、Prompt 和答案提取,不能当作正式分数。确认样本输出正常后,移除 --limit 再运行完整评测。首次运行建议保持低并发,观察限流、失败重试、输出长度和费用后再逐步提高。
四、理解 Chat Completions 的限制
官方 Harness 文档明确说明:Chat Completions 后端只支持生成式的 generate_until 请求,不提供 Prompt log-probability,因此不能直接运行依赖 loglikelihood 的多项选择类任务。看到 MMLU 等任务报错时,不要把它误判为 DeepSeek 模型故障。
- 运行前用
lm-eval ls tasks和任务配置确认输出类型。 - 使用
--apply_chat_template,确保输入按聊天消息组织。 - 使用
--log_samples保存模型输入、原始输出和后处理结果。 - API 评测不要添加
--device;计算实际发生在远端服务。
五、把结果变成可复现实验
每次运行至少记录 Harness 版本或 Git commit、任务名和版本、模型名、模型快照、系统指令、few-shot 数量、生成参数、随机种子、运行时间以及失败样本。DeepSeek 的别名可能指向更新后的模型版本;若需要长期对比,应把官方当日展示的底层版本一并写入实验清单。
Harness 统一了评测流程,但不会自动保证比较公平。能复现 Prompt、模型版本和答案提取规则,分数才有解释价值。
参考资料
本文按下列官方资料核验。模型能力、价格与接口可能调整,请以最新文档为准。