lm-evaluation-harness 安装与配置快速上手指南:四步装好并跑通首次评估
【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness
lm-evaluation-harness 是 EleutherAI 出品的开源框架,把同一个语言模型送进 60 多个学术基准统一跑分,让不同模型的分数可直接横向比较。本文带你走完整条上手链路:克隆仓库、分离式安装、YAML 配置、首次评估,每条命令都能直接复制执行。
快速开始:三条命令拿到第一个分数
先不追求完整环境,用 CPU 跑一个小模型、小数据量,确认工具链是通的。执行下面这组命令:克隆仓库、安装核心包和 Hugging Face 后端。
git clone --depth 1 https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness cd lm-evaluation-harness pip install -e . pip install "lm_eval[hf]"装完后用 gpt2(一个 124M 参数的小模型)在 CPU 上跑 hellaswag 任务,--limit 10表示只取前 10 条样例,几秒钟就能看到结果:
lm-eval run --model hf \ --model_args pretrained=gpt2,dtype=float32 \ --tasks hellaswag \ --device cpu \ --limit 10你会看到一张结果表,形如hellaswag | 0-shot | acc,none | 0.2000 | ...。gpt2 得分低很正常——这一步验证的是流程跑通,而不是模型能力。跑通之后,再按下面的章节把环境补齐。
项目速览:lm-evaluation-harness 能做什么
- 定位:生成式语言模型统一评测框架,Hugging Face Open LLM Leaderboard 的后端,已被数百篇论文用于跨论文可比的分数字段。
- 主要语言:Python(包名
lm_eval,硬性要求 Python ≥ 3.10)。 - 核心框架:Hugging Face transformers 加载本地模型、vLLM 做高吞吐推理、OpenAI/TextSynth 等商业 API、PEFT 支持 LoRA 适配器、GPTQ/AutoGPTQ 支持量化权重。
- 适用场景:选型期多模型横评、微调前后回归对比、few-shot 能力测量;结果可落盘为 JSON,也能接 W&B、Zeno 做可视化。
"评测"在这里有明确含义:框架把每道题自动拼装成"任务描述 + 若干示例答案 + 待答题目"的 few-shot 提示,再喂给模型计分。下图是这个提示的构成(task description 是任务说明,examples 是示例,prompt 是真正要回答的那一句):
环境准备:lm-evaluation-harness 前置要求一览
| 项目 | 要求 | 说明 |
|---|---|---|
| Python | ≥ 3.10 | pyproject.toml 中的硬性要求,低版本直接拒绝安装 |
| GPU | 可选 | 无 GPU 可用 CPU 跑小模型;NVIDIA 显卡需装好 CUDA 驱动 |
| 磁盘 | 建议 ≥ 10 GB | 模型权重和任务数据集首次运行时会自动下载 |
| 网络 | 必须 | 任务数据来自 Hugging Face datasets,首次运行拉取 |
| 虚拟环境 | 建议 | venv 或 conda 隔离,避免依赖污染全局 Python |
Mac 用户没有 CUDA 也不影响:把--device cuda:0换成--device mps即可走 Metal 后端(需 PyTorch ≥ 2.1)。
安装步骤:lm-evaluation-harness 核心包与模型后端分开装
1. 克隆仓库。用--depth 1只拉最新一次提交,省掉历史体积:
git clone --depth 1 https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness你会得到本地lm-evaluation-harness目录,顶层有pyproject.toml、lm_eval/和docs/。
2. 安装核心框架。可编辑安装(-e)让源码和站点包共用一份,后续改代码立即生效:
cd lm-evaluation-harness pip install -e .预期输出以Successfully installed lm_eval-0.4.13.dev0 ...结尾。
3. 按需求装模型后端。从 2025/12 起基础包不再捆绑 transformers/torch,后端改用可选扩展(extras)单独安装,常用三组如下:
pip install "lm_eval[hf]" # transformers + torch + accelerate + peft pip install "lm_eval[vllm]" # vLLM 快速推理 pip install "lm_eval[api]" # OpenAI / Anthropic / 本地推理服务器也可以一次装全:pip install "lm_eval[hf,vllm,api]"。装完后pip list里能看到transformers、torch等对应包。
4. 验证 CLI 是否可用。安装入口点注册了两个等价命令lm-eval和lm_eval,用帮助信息确认:
lm-eval --help✅ 你会看到run(执行评估)、ls(列出任务/标签)、validate(校验任务配置)三个子命令的说明。
5.(可选)安装任务依赖。个别任务(math 判分、longbench 的 jieba 分词、IFEval 等)需要额外包;如果你只用 hellaswag、arc 这类基础任务可跳过:
pip install "lm_eval[tasks]"安装完成后,运行lm-eval ls tasks可看到内置的全部任务名(数百行),后续选任务都从这份清单里挑。
配置与首次运行:lm-evaluation-harness 用一份 YAML 跑完整任务
参数多了以后,把配置写进 YAML 文件比一长串命令行更清晰。创建eval_config.yaml,内容如下:
model: hf model_args: pretrained: gpt2 dtype: float32 tasks: - hellaswag - arc_easy num_fewshot: 0 batch_size: auto device: cpu output_path: ./results/gpt2/ log_samples: true逐条解释关键字段:
model:后端类型,hf(transformers)、vllm、local-completions(OpenAI 兼容服务器)等。model_args:透传给模型构造器,pretrained可以是 Hub 名称或本地路径,dtype控制计算精度。tasks:任务名列表,支持通配符,如lambada_openai_mt_*一次选中所有机器翻译 lambada 变体。num_fewshot:提示中放几道示例题,0 即纯 zero-shot。batch_size:auto会自动探测当前显存/内存能塞下的最大批量,auto:4表示重新探测 4 次以进一步提速。device:cuda:0、cpu、mps三选一。output_path+log_samples:评估结果存成results.json,逐条输入输出也落盘,方便事后复查哪道题答错了。
用配置文件启动评估,命令行会覆盖文件中的同名项(比如临时加--tasks mmlu --limit 100):
lm-eval run --config eval_config.yaml你会看到 hellaswag 和 arc_easy 两张得分表依次打印,./results/gpt2/目录下出现results.json和样例文件。
lm-evaluation-harness 单 GPU 评估与 batch_size 调优
有 CUDA 显卡时把设备指到cuda:0,批量交给auto自动探测,能显著减少手动试批量的成本:
lm-eval run --model hf \ --model_args pretrained=EleutherAI/gpt-j-6B \ --tasks hellaswag \ --device cuda:0 \ --batch_size auto预期与 CPU 版一致:任务得分表打印完毕即成功;若中途报显存不足,把auto换成一个较小的整数(如 8)。
lm-evaluation-harness 多 GPU 并行评估配置
模型放得进单卡时,用 accelerate 启动器做数据并行——每张卡加载一份完整模型,K 张卡约 K 倍速度:
accelerate launch -m lm_eval run \ --model hf \ --tasks lambada_openai,arc_easy \ --batch_size 16⚠️ 注意:数据并行与 FSDP 权重切分互斥,accelerate config里需关闭 FSDP 或选 NO_SHARD 模式。
模型大到单卡装不下时,不加启动器、直接在model_args里声明切分,权重会被摊到所有可用 GPU 上:
lm-eval run --model hf \ --tasks lambada_openai,arc_easy \ --model_args parallelize=True \ --batch_size 16两种手段还可以叠加(启动器起多份副本、每份内部再切分)。如果你用 vLLM 后端,并行参数改在model_args里写:tensor_parallel_size(张量并行卡数)、data_parallel_size(副本数),配合--batch_size auto享受其连续批处理。
lm-evaluation-harness 无 GPU 环境(CPU / Mac MPS)运行
纯 CPU 机器把--device cpu加上、模型选 gpt2/pythia 级别即可完整走通;Mac 用户换成--device mps。这条路径与 GPU 版唯一区别就是设备参数,其余命令完全相同,可作为 CI 环境里的冒烟测试。
常见问题:lm-evaluation-harness 安装与运行排错
现象:lm_eval: command not found原因:pip 装的入口点不在当前 shell 的 PATH 里,常见于混用了多个 Python 环境。 解决:先确认包装没装错——运行python -m lm_eval --help,能出帮助说明包本身没问题,重新激活对应虚拟环境再敲lm-eval即可;装错环境就回到正确环境执行pip install -e .重装。
现象:--model hf时报No module named 'transformers'原因:2025/12 起基础包默认不含 transformers 和 torch,这是设计变更而不是安装失败。 解决:执行pip install "lm_eval[hf]"。外层引号别省,否则 bash 会把方括号当通配符解析。
现象:评估中途RuntimeError: CUDA out of memory原因:批量过大,或权重加激活超过了单卡显存。 解决:按从轻到重依次尝试——--batch_size auto或换更小的整数批量;--model_args parallelize=True切分到多卡;给model_args加load_in_4bit=True做 4bit 量化加载。
现象:Task xxx not found原因:任务名拼写有误,或该任务属于外部任务集、未挂进来。 解决:用lm-eval ls tasks核对正确名称;外部任务通过--include_path /path/to/tasks挂载,并可用lm-eval validate --tasks xxx先校验配置再运行。
延伸资源:深入官方文档与任务体系
- CLI 全部参数与子命令说明:docs/interface.md
- YAML 配置文件完整字段参考:docs/config_files.md
- Python API(
simple_evaluate())编程式调用:docs/python-api.md - 内置任务清单与任务 YAML 写法:lm_eval/tasks/README.md
- 各模型后端接口详解:docs/model_guide.md
- 编写新任务指南与空白模板:docs/new_task_guide.md、templates/new_yaml_task/
- 交互式入门 notebook:examples/lm-eval-overview.ipynb
到这里工具链已经就绪。下一步建议先把你真正要评的模型换进model_args,用--limit 10抽查几条生成样例确认打分符合预期,再放开限制跑完整任务。
【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考