run, ls, validate) 和通过 --config 使用 YAML 配置文件。请参阅 CLI 参考 和 配置指南。transformers/torch。请单独安装模型后端:pip install lm_eval[hf]、lm_eval[vllm] 等。hf(token/str)、vllm 和 sglang(str)添加了 think_end_token 参数,用于从支持此功能的模型中剥离思维链推理痕迹。hf-multimodal 和 vllm-vlm 模型类型以及 mmmu 任务作为原型功能。我们欢迎用户试用这个进行中的功能并进行压力测试,并建议他们查看 lmms-eval —— 一个最初从 lm-evaluation-harness 分叉出来的优秀项目,它提供了更广泛的多模态任务、模型和功能。local-completions 模型类型进行评估。lm-evaluation-harness 的新版本 v0.4.0 已发布!
新更新和功能包括:
更多详情请参阅 docs/ 目录下的更新文档。
开发将在 main 分支上继续,我们鼓励您通过 GitHub 上的 issues 或 PRs,或在 EleutherAI discord 中,就期望的功能以及如何进一步改进库提供反馈或提问!
本项目提供了一个统一的框架,用于在大量不同的评估任务上测试生成式语言模型。
功能特性:
语言模型评估工具集是 🤗 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
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/model向lm_eval提供本地路径。
lm-eval 支持使用 Hugging Face (hf) 后端评估 GGUF 格式的模型。这允许您使用与 transformers、AutoModel 和 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 等文件)。
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 库所做的那样。
transformers 模型要评估应用了引导向量的 Hugging Face transformers 模型,请将模型类型指定为 steered,并提供包含预定义引导向量的 PyTorch 文件路径,或指定如何从预训练的 sparsify 或 sae_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
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
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) 要启用