OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  LM Evaluation Harness — 评测大语言模型效果的经典基准工具

LM Evaluation Harness — 评测大语言模型效果的经典基准工具

 
  jet ·  2026-02-27 22:57:47 · 6 次点击  · 0 条评论  

语言模型评估工具集

DOI


最新动态 📣

  • [2025/12] CLI 重构,支持子命令 (run, ls, validate) 和通过 --config 使用 YAML 配置文件。请参阅 CLI 参考配置指南
  • [2025/12] 更轻量的安装:基础包不再包含 transformers/torch。请单独安装模型后端:pip install lm_eval[hf]lm_eval[vllm] 等。
  • [2025/07] 为 hf(token/str)、vllmsglang(str)添加了 think_end_token 参数,用于从支持此功能的模型中剥离思维链推理痕迹。
  • [2025/03] 添加了对引导(steering) Hugging Face 模型的支持!
  • [2025/02] 添加了 SGLang 支持!
  • [2024/09] 我们正在开发原型功能,允许 LM 评估工具集的用户创建和评估文本+图像多模态输入、文本输出的任务,并刚刚添加了 hf-multimodalvllm-vlm 模型类型以及 mmmu 任务作为原型功能。我们欢迎用户试用这个进行中的功能并进行压力测试,并建议他们查看 lmms-eval —— 一个最初从 lm-evaluation-harness 分叉出来的优秀项目,它提供了更广泛的多模态任务、模型和功能。
  • [2024/07] API 模型 支持已更新和重构,引入了对批处理和异步请求的支持,使其更易于定制和使用。要运行 Llama 405B,我们建议使用 VLLM 的 OpenAI 兼容 API 来托管模型,并使用 local-completions 模型类型进行评估。
  • [2024/07] 新增了 Open LLM 排行榜任务!你可以在 leaderboard 任务组下找到它们。

公告

lm-evaluation-harness 的新版本 v0.4.0 已发布

新更新和功能包括:

  • 新增了 Open LLM 排行榜任务!你可以在 leaderboard 任务组下找到它们。
  • 内部重构
  • 基于配置的任务创建和配置
  • 更轻松地导入和共享外部定义的任务配置 YAML 文件
  • 支持 Jinja2 提示词设计,轻松修改提示词 + 从 Promptsource 导入提示词
  • 更多高级配置选项,包括输出后处理、答案提取、每个文档的多次 LM 生成、可配置的少样本设置等
  • 速度提升和新支持的建模库,包括:更快的 HF 模型数据并行使用、vLLM 支持、HuggingFace 的 MPS 支持等
  • 日志记录和可用性改进
  • 新任务,包括 CoT BIG-Bench-Hard、Belebele、用户定义的任务分组等

更多详情请参阅 docs/ 目录下的更新文档。

开发将在 main 分支上继续,我们鼓励您通过 GitHub 上的 issues 或 PRs,或在 EleutherAI discord 中,就期望的功能以及如何进一步改进库提供反馈或提问!


概述

本项目提供了一个统一的框架,用于在大量不同的评估任务上测试生成式语言模型。

功能特性:

  • 超过 60 个 LLM 标准学术基准,实现了数百个子任务和变体。
  • 支持通过 transformers(包括通过 GPTQModelAutoGPTQ 进行量化)、GPT-NeoXMegatron-DeepSpeed 加载的模型,提供灵活的与分词器无关的接口。
  • 支持使用 vLLM 进行快速且内存高效的推理。
  • 支持商业 API,包括 OpenAITextSynth
  • 支持评估 HuggingFace 的 PEFT 库 支持的适配器(例如 LoRA)。
  • 支持本地模型和基准测试。
  • 使用公开可用的提示词进行评估,确保论文间的可重复性和可比性。
  • 轻松支持自定义提示词和评估指标。

语言模型评估工具集是 🤗 Hugging Face 流行的 Open LLM 排行榜 的后端,已被用于 数百篇论文,并被 NVIDIA、Cohere、BigScience、BigCode、Nous Research 和 Mosaic ML 等数十个组织内部使用。

安装

要从 GitHub 仓库安装 lm-eval 包,请运行:

git clone --depth 1 https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e .

安装模型后端

基础安装提供了核心评估框架。模型后端必须使用可选附加组件单独安装

对于 HuggingFace transformers 模型:

pip install "lm_eval[hf]"

对于 vLLM 推理:

pip install "lm_eval[vllm]"

对于基于 API 的模型(OpenAI、Anthropic 等):

pip install "lm_eval[api]"

可以同时安装多个后端:

pip install "lm_eval[hf,vllm,api]"

所有可选附加组件的详细表格见本文档末尾。

基本用法

文档

指南 描述
CLI 参考 命令行参数和子命令
配置指南 YAML 配置文件格式和示例
Python API 使用 simple_evaluate() 进行编程式调用
任务指南 可用任务和任务配置

使用 lm-eval -h 查看可用选项,或使用 lm-eval run -h 查看评估选项。

列出可用任务:

lm-eval ls tasks

Hugging Face transformers

[!重要]
要使用 HuggingFace 后端,请先安装:pip install "lm_eval[hf]"

要评估托管在 HuggingFace Hub 上的模型(例如 GPT-J-6B)在 hellaswag 任务上的表现,可以使用以下命令(假设您使用兼容 CUDA 的 GPU):

lm_eval --model hf \
    --model_args pretrained=EleutherAI/gpt-j-6B \
    --tasks hellaswag \
    --device cuda:0 \
    --batch_size 8

可以使用 --model_args 标志向模型构造函数提供额外参数。最值得注意的是,这支持在 Hub 上使用 revisions 功能存储部分训练好的检查点,或指定运行模型的数据类型:

lm_eval --model hf \
    --model_args pretrained=EleutherAI/pythia-160m,revision=step100000,dtype="float" \
    --tasks lambada_openai,hellaswag \
    --device cuda:0 \
    --batch_size 8

支持通过 Huggingface 的 transformers.AutoModelForCausalLM(自回归、仅解码器的 GPT 风格模型)和 transformers.AutoModelForSeq2SeqLM(例如 T5 等编码器-解码器模型)加载的模型。

可以通过将 --batch_size 标志设置为 auto 来自动选择批大小。这将自动检测您的设备上能容纳的最大批大小。在最长和最短示例差异很大的任务上,定期重新计算最大批大小可能有助于进一步加速。为此,在上述标志后附加 :N 以自动重新计算最大批大小 N 次。例如,要重新计算批大小 4 次,命令如下:

lm_eval --model hf \
    --model_args pretrained=EleutherAI/pythia-160m,revision=step100000,dtype="float" \
    --tasks lambada_openai,hellaswag \
    --device cuda:0 \
    --batch_size auto:4

[!注意]
就像可以向 transformers.AutoModel 提供本地路径一样,您也可以通过 --model_args pretrained=/path/to/modellm_eval 提供本地路径。

评估 GGUF 模型

lm-eval 支持使用 Hugging Face (hf) 后端评估 GGUF 格式的模型。这允许您使用与 transformersAutoModel 和 llama.cpp 转换兼容的量化模型。

要评估 GGUF 模型,请使用 --model_args 标志传递包含模型权重的目录路径、gguf_file 以及可选的单独 tokenizer 路径。

🚨 重要提示:
如果没有提供单独的分词器,Hugging Face 将尝试从 GGUF 文件重建分词器——这可能需要数小时甚至无限期挂起。传递单独的分词器可以避免此问题,并将分词器加载时间从数小时减少到数秒。

✅ 推荐用法:

lm_eval --model hf \
    --model_args pretrained=/path/to/gguf_folder,gguf_file=model-name.gguf,tokenizer=/path/to/tokenizer \
    --tasks hellaswag \
    --device cuda:0 \
    --batch_size 8

[!提示]
确保分词器路径指向有效的 Hugging Face 分词器目录(例如,包含 tokenizer_config.json、vocab.json 等文件)。

使用 Hugging Face accelerate 进行多 GPU 评估

我们支持三种主要方式使用 Hugging Face 的 accelerate 🚀 库进行多 GPU 评估。

要进行数据并行评估(每个 GPU 加载单独的完整模型副本),我们利用 accelerate 启动器如下:

accelerate launch -m lm_eval --model hf \
    --tasks lambada_openai,arc_easy \
    --batch_size 16

(或通过 accelerate launch --no-python lm_eval)。

对于模型可以放在单个 GPU 上的情况,这允许您在 K 个 GPU 上的评估速度比单个 GPU 快 K 倍。

警告:此设置不适用于 FSDP 模型分片,因此在 accelerate config 中必须禁用 FSDP,或必须使用 NO_SHARD FSDP 选项。

第二种使用 accelerate 进行多 GPU 评估的方式是当您的模型太大而无法放在单个 GPU 上时

在此设置中,在accelerate 启动器之外运行库,但向 --model_args 传递 parallelize=True,如下所示:

lm_eval --model hf \
    --tasks lambada_openai,arc_easy \
    --model_args parallelize=True \
    --batch_size 16

这意味着您的模型权重将分布在所有可用 GPU 上。

对于更高级的用户或更大的模型,当 parallelize=True 时,我们还允许以下参数:

  • device_map_option:如何在可用 GPU 之间分割模型权重。默认为 "auto"。
  • max_memory_per_gpu:每个 GPU 加载模型时使用的最大 GPU 内存。
  • max_cpu_memory:将模型权重卸载到 RAM 时使用的最大 CPU 内存。
  • offload_folder:如果需要,模型权重将卸载到磁盘的文件夹。

第三种选择是同时使用两者。这将允许您同时利用数据并行和模型分片,对于太大而无法放在单个 GPU 上的模型尤其有用。

accelerate launch --multi_gpu --num_processes {nb_of_copies_of_your_model} \
    -m lm_eval --model hf \
    --tasks lambada_openai,arc_easy \
    --model_args parallelize=True \
    --batch_size 16

要了解更多关于模型并行性以及如何与 accelerate 库一起使用,请参阅 accelerate 文档

警告:我们不原生支持使用 hf 模型类型进行多节点评估!请参考 我们的 GPT-NeoX 库集成 查看编写自定义多机评估脚本的示例。

注意:我们目前不原生支持多节点评估,建议使用外部托管的服务器来运行推理请求,或者创建与您的分布式框架的自定义集成,就像为 GPT-NeoX 库所做的那样

引导式 Hugging Face transformers 模型

要评估应用了引导向量的 Hugging Face transformers 模型,请将模型类型指定为 steered,并提供包含预定义引导向量的 PyTorch 文件路径,或指定如何从预训练的 sparsifysae_lens 模型推导引导向量的 CSV 文件(您需要为此方法安装相应的可选依赖项)。

指定预定义的引导向量:

import torch

steer_config = {
    "layers.3": {
        "steering_vector": torch.randn(1, 768),
        "bias": torch.randn(1, 768),
        "steering_coefficient": 1,
        "action": "add"
    },
}
torch.save(steer_config, "steer_config.pt")

指定推导的引导向量:

import pandas as pd

pd.DataFrame({
    "loader": ["sparsify"],
    "action": ["add"],
    "sparse_model": ["EleutherAI/sae-pythia-70m-32k"],
    "hookpoint": ["layers.3"],
    "feature_index": [30],
    "steering_coefficient": [10.0],
}).to_csv("steer_config.csv", index=False)

运行应用了引导向量的评估工具集:

lm_eval --model steered \
    --model_args pretrained=EleutherAI/pythia-160m,steer_path=steer_config.pt \
    --tasks lambada_openai,hellaswag \
    --device cuda:0 \
    --batch_size 8

NVIDIA nemo 模型

NVIDIA NeMo 框架 是一个为研究语言模型的研究人员和 PyTorch 开发人员构建的生成式 AI 框架。

要评估 nemo 模型,请首先按照 文档 安装 NeMo。我们强烈建议使用 NVIDIA PyTorch 或 NeMo 容器,特别是在安装 Apex 或任何其他依赖项时遇到问题的情况下(请参阅 最新发布的容器)。还请按照 安装部分 中的说明安装 lm 评估工具集库。

NeMo 模型可以通过 NVIDIA NGC 目录NVIDIA 的 Hugging Face 页面 获得。在 NVIDIA NeMo 框架 中,有转换脚本可以将 llama、falcon、mixtral 或 mpt 等流行模型的 hf 检查点转换为 nemo

在单个 GPU 上运行 nemo 模型:

lm_eval --model nemo_lm \
    --model_args path=<path_to_nemo_model> \
    --tasks hellaswag \
    --batch_size 32

建议解压 nemo 模型以避免在 Docker 容器内解压——这可能会溢出磁盘空间。为此,您可以运行:

mkdir MY_MODEL
tar -xvf MY_MODEL.nemo -c MY_MODEL

使用 NVIDIA nemo 模型进行多 GPU 评估

默认情况下,只使用一个 GPU。但我们支持在单个节点上进行数据复制或张量/流水线并行评估。

1) 要启用数据复制,将 model_args 中的 devices 设置为要运行的数据副本数。例如,在 8 个 GPU 上运行 8 个数据副本的命令是:

torchrun --nproc-per-node=8 --no-python lm_eval \
    --model nemo_lm \
    --model_args path=<path_to_nemo_model>,devices=8 \
    --tasks hellaswag \
    --batch_size 32

2) 要启用

6 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私政策 ·  服务条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 54 ms
Developed with Cursor