【模型测试】大模型评测工具lm-evaluation-harness的使用方法总结

博客文章#模型测试阅读 4,453
【模型测试】大模型评测工具lm-evaluation-harness的使用方法总结

前言

在大模型的测评中,我们往往需要借助一些自动化工具来完成测评任务,本章将介绍常见的自动化测评工具:lm-evaluation-harness。

工具简介

lm-evaluation-harness 是由 EleutherAI 开发的开源工具,用于统一评估语言模型(如 GPT、LLaMA 等)在多样化任务中的性能。支持 200+ 评测任务,涵盖文本生成、逻辑推理、数学计算等领域。

工具使用

1. 工具下载

git clone https://github.com/EleutherAI/lm-evaluation-harness.git

2. 安装工具

2.1 创建虚拟环境

安装依赖之前,最好通过conda创建一个虚拟环境,然后进入虚拟环境安装依赖。

conda create -n lm_eval python=3.10
conda activate lm_eval

2.2 安装工具

进入虚拟环境后,安装工具。

cd lm-evaluation-harness
pip install -e .

2.3 安装依赖

# 安装sentencepiece
pip install torch sentencepiece protobuf
# 安装torch
pip install torch torchvision torchaudio

2.4 测试安装

正常安装之后,可以使用命令lm_eval -h测试是否成功。

通过lm_eval -h命令可以看到,lm_eval可以连接Hugging Face的模型,也可以连接本地模型进行评测。由于国内对Hugging Face的访问受限,所以这里选择连接本地模型。

3. 模型下载

本次测试中,我们使用最近火热的deepseek在Qwen上的蒸馏版本 deepseek-ai/DeepSeek-R1-Distill-Qwen-7B。

第一步:访问modelscope,搜索deepseek模型。

第二步:在搜索的 DeepSeek-R1-Distill-Qwen-7B 模型中,获取下载地址。

第三步:使用git lfs下载模型。

# 进入lm_eval目录
cd lm_evaluation_harness

# 创建models目录
mkdir models

# 进入models目录
cd models

# 安装git lfs
git lfs install

# 下载模型
git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git

运行结果:

4. 下载评测数据集

由于国内Hugging Face访问受限,直接通过lm_eval的命令默认会请求huggingface hub,导致下载数据集异常,报错TypeError: 'NoneType' object is not callable。 所以,我们需要手动下载数据集。

# 切换至lm_eval目录
cd lm_evaluation_harness

# 创建数据集目录
mkdir -p datasets/hellaswag

# 进入数据集目录
cd datasets/hellaswag

# 下载 hellaswag 数据集
git clone https://github.com/rowanz/hellaswag.git

# 将 hellaswag 数据集复制到数据集目录
cd hellaswag
cp -r hellaswag/data/* ./

确保拷贝后的文件组成为:

lm_evalution_harness
├──datasets                 
│   ├──hellaswag
│   │   ├──hellaswag_test.jsonl
│   │   ├──hellaswag_train.jsonl
│   │   ├──hellaswag_val.jsonl

5. 配置数据集

# 切换至lm_eval目录
cd lm_evaluation_harness

# 进入task目录
cd lm_eval/tasks/hellaswag

# 编辑.yaml文件
vim hellaswag.yaml

将.yaml文件中的dataset_path修改为 4.下载评测数据集 中的地址。

tag:
  - multiple_choice
task: hellaswag
dataset_path: /root/autodl-tmp/lm-evaluation-harness/datasets/hellaswag
dataset_name: null
output_type: multiple_choice
training_split: train
validation_split: validation
test_split: null
process_docs: !function utils.process_docs
doc_to_text: "{{query}}"
doc_to_target: "{{label}}"
doc_to_choice: "choices"
metric_list:
  - metric: acc
    aggregation: mean
    higher_is_better: true
  - metric: acc_norm
    aggregation: mean
    higher_is_better: true
metadata:
  version: 1.0
dataset_kwargs:
  trust_remote_code: true

6. 评测执行

确保修改后的文件路径为:

目录结构

lm-evaluation-harness
├──models                   # 保存下载好的模型
├──datasets                 # 保存下载好的数据集
│   ├──hellaswag
├──results                  # 保存评测结果
├──tasks                    # 保存评测任务
├──utils                    # 保存工具函数
├──lm_eval.py               # 评测主程序
├──requirements.txt         # 依赖库
├──README.md                # 说明文档
├──LICENSE

在 lm-evaluation-harness 根目录下,执行评测命令

lm_eval \
    --model hf \
    --model_args pretrained=models/Qwen2.5-7B-Instruct,trust_remote_code=True \
    --tasks hellaswag \
    --batch_size 1 \
    --num_fewshot 3 \
    --output_path ./results.json \
    --verbosity DEBUG

测试中:

测试完毕:

补充说明:

  • Tasks:评估的任务名称,此处为HellaSwag
  • Version:数据集的版本号,此处为1。
  • Filter:数据预处理方式,none表示未对数据额外过滤。
  • n-shot:Few-shot学习中的示例数量,此处为3(每个测试样本提供3个上下文示例)。
  • Metric:评估指标:
    • acc:原始准确率(未经调整)。
    • acc_norm:标准化后的准确率(可能调整了选项长度等偏差,更可靠)。
  • Value:模型在该指标下的得分,↑表示值越高越好。
  • Stderr:标准误差(衡量结果波动范围,±后为误差值)。

由上可知:

  • 原始准确率(acc):46.47% ± 0.35%

    模型直接预测的准确率,可能存在数据集本身的偏差(如选项长度差异)。

  • 标准化准确率(acc_norm):60.92% ± 0.34%

    经过标准化处理的准确率(HellaSwag常用指标),更客观反映模型性能。

参考文献

知乎:LLM模型评测代码实践

CSDN:LLMs之benchmark之lm-evaluation-harness

其他文章

欢迎关注公众号以获得最新的文章和新闻