LLMs之benchmark之lm-evaluation-harness:lm-evaluation-harness(语言模型评估工具)的简介、安装和使用方法、案例应用之详细攻略

LLMs之benchmark之lm-evaluation-harness:lm-evaluation-harness(语言模型评估工具)的简介、安装和使用方法、案例应用之详细攻略

目录

lm-evaluation-harness的简介

1、功能特点

2、公告

lm-evaluation-harness的安装和使用方法

1、安装

2、基本使用

用户指南

Hugging Face transformers

使用Hugging Face accelerate进行多GPU评估

NVIDIA NeMo模型

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

Tensor + Data Parallel与vLLM的优化推理

模型API和推理服务器

其他框架

附加功能

3、高级使用技巧

4、保存结果

5、可视化结果

Zeno

Weights and Biases

lm-evaluation-harness的案例应用

LLMs之benchmark:利用lm-evaluation-harness对Yi系列/GLM系列/Qwen系列等模型进行C-Eval测试(如Yi-34B、chatglm4-9b、Qwen2-7B等)实战代码并输出得分图文教程之详细攻略


lm-evaluation-harness的简介

2023年12月,lm-evaluation-harness项目提供了一个统一的框架,用于在大量不同的评估任务上测试生成型语言模型

Github地址https://github.com/EleutherAI/lm-evaluation-harness

1、功能特点

为LLMs提供60多个标准学术基准测试,包含数百个子任务和变体。
>> 支持通过transformers加载的模型(包括通过AutoGPTQ进行量化)、GPT-NeoX和Megatron-DeepSpeed,具有灵活的无关标记接口。
>> 支持使用vLLM进行快速和内存高效的推理。
>> 支持商业API,包括OpenAI和TextSynth。
>> 支持评估HuggingFace的PEFT库中支持的适配器(如LoRA)。
>> 支持本地模型和基准测试。
>> 使用公开可用的提示进行评估,确保论文之间的可重复性和可比性。
>> 轻松支持自定义提示和评估指标。

语言模型评估工具是Hugging Face的Open LLM Leaderboard的后台,已在数百篇论文中使用,并被包括NVIDIA、Cohere、BigScience、BigCode、Nous Research和Mosaic ML在内的几十个组织内部使用。

2、公告

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

新更新和功能包括:
>> 内部重构
>> 基于配置的任务创建和配置
>> 更简单的外部定义任务配置YAML的导入和共享
>> 支持Jinja2提示设计,方便修改提示+从Promptsource导入提示
>> 更高级的配置选项,包括输出后处理、答案提取、每个文档的多个LM生成、可配置的少样本设置等
>> 支持更快的新建模库,包括:更快的数据并行HF模型使用、vLLM支持、HuggingFace的MPS支持等
>> 日志记录和可用性改进
>> 新任务包括CoT BIG-Bench-Hard、Belebele、用户定义的任务分组等
请查看我们更新的文档页面以获取更多详细信息。开发将继续在主分支上进行,欢迎大家在GitHub上的问题或PR中,或者在EleutherAI的Discord中反馈所需功能和改进建议或提问!

lm-evaluation-harness的安装和使用方法

1、安装

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

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

我们还提供了许多可选依赖项以扩展功能。在本文件末尾有一个详细的表格。

2、基本使用

用户指南

提供了一个用户指南,详细列出了支持的所有参数,可以在此处和终端中通过调用lm_eval -h查看。或者,可以使用lm-eval代替lm_eval。

可以使用lm-eval --tasks list查看支持的任务列表(或任务分组)。任务描述和相应子文件夹的链接提供在这里。

Hugging Face transformers

要在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上存储部分训练检查点的常见做法,或指定运行模型的数据类型:

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

通过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向lm_eval提供本地路径,方法是设置pretrained=/path/to/model

使用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

在模型可以放入单个GPU的情况下,这允许你在K个GPU上以K倍于单GPU的速度进行评估。
警告:此设置不支持FSDP模型分片,因此在accelerate配置中必须禁用FSDP,或使用NO_ARD 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:在需要时模型权重将卸载到磁盘的文件夹。
这两种选项(accelerate launch和parallelize=True)是互斥的。

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

NVIDIA NeMo模型

NVIDIA NeMo Framework是一个为研究人员和使用PyTorch开发语言模型的开发人员设计的生成性AI框架。

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

NeMo模型可以通过NVIDIA NGC Catalog或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。但我们支持在一个节点上进行评估时,使用数据复制或张量/管道并行。

要启用数据复制,请将devices的model_args设置为要运行的数据副本数量。例如,运行8个数据副本覆盖8个GPU的命令如下:

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

要启用张量和/或管道并行,请设置tensor_model_parallel_size和/或pipeline_model_parallel_size的model_args。此外,还必须将devices设置为tensor_model_parallel_size和/或pipeline_model_parallel_size的乘积。例如,使用4个GPU的一个节点,张量并行度为2,管道并行度为2的命令如下:

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

请注意,建议将python命令替换为torchrun --nproc-per-node=<设备数> --no-python,以便更轻松地将模型加载到GPU中。这对于加载到多个GPU的大型检查点特别重要。

尚不支持的功能:多节点评估以及数据复制与张量或管道并行的组合。

Tensor + Data Parallel与vLLM的优化推理

我们还支持vLLM,用于支持的模型类型进行更快的推理,尤其是在多GPU上分割模型时更快。例如,单GPU或多GPU(张量并行、数据并行或两者结合)推理的命令如下:

lm_eval --model vllm \
    --model_args pretrained={model_name},tensor_parallel_size={GPUs_per_model},dtype=auto,gpu_memory_utilization=0.8,data_parallel_size={model_replicas} \
    --tasks lambada_openai \
    --batch_size auto

要使用vllm,请执行pip install lm_eval[vllm]。有关支持的vLLM配置的完整列表,请参考我们的vLLM集成和vLLM文档。

vLLM的输出偶尔与Huggingface有所不同。我们将Huggingface视为参考实现,并提供一个脚本来检查vllm结果与HF的有效性。

提示:为了获得最快的性能,请尽可能使用--batch_size auto,以利用其连续批处理功能!
提示:通过在模型参数args中传递max_model_len=4096或其他合理的默认值到vLLM,可能会加快速度或防止尝试使用自动批量大小时出现内存不足错误,例如Mistral-7B-v0.1,默认最大长度为32k。

模型API和推理服务器

我们的库还支持通过几个商业API提供的模型进行评估,并希望实现对最常用的性能良好的本地/自托管推理服务器的支持。

要调用托管模型,请使用:

export OPENAI_API_KEY=YOUR_KEY_HERE
lm_eval --model openai-completions \
    --model_args model=davinci \
    --tasks lambada_openai,hellaswag

我们还支持使用您自己的本地推理服务器,使用镜像OpenAI Completions和ChatCompletions API的服务器。

lm_eval --model local-chat-completions --tasks gsm8k --model_args model=facebook/opt-125m,base_url=http://{yourip}:8000/v1

请注意,对于外部托管模型,不应使用--device和--batch_size等配置,并且不起作用。就像您可以使用--model_args为本地模型的模型构造函数传递任意参数一样,您可以使用它为托管模型的API传递任意参数。有关他们支持的参数的信息,请参阅托管服务的文档。

API or Inference ServerImplemented?--model <xxx> nameModels supported:Request Types:
OpenAI Completions✔️openai-completionslocal-completionsAll OpenAI Completions API modelsgenerate_untilloglikelihoodloglikelihood_rolling
OpenAI ChatCompletions✔️openai-chat-completionslocal-chat-completionsAll ChatCompletions API modelsgenerate_until (no logprobs)
Anthropic✔️anthropicSupported Anthropic Enginesgenerate_until (no logprobs)
Anthropic Chat✔️anthropic-chatanthropic-chat-completionsSupported Anthropic Enginesgenerate_until (no logprobs)
Textsynth✔️textsynthAll supported enginesgenerate_untilloglikelihoodloglikelihood_rolling
Cohere⌛ - blocked on Cohere API bugN/AAll cohere.generate() enginesgenerate_untilloglikelihoodloglikelihood_rolling
Llama.cpp (via llama-cpp-python)✔️ggufggmlAll models supported by llama.cppgenerate_untilloglikelihood, (perplexity evaluation not yet implemented)
vLLM✔️vllmMost HF Causal Language Modelsgenerate_untilloglikelihoodloglikelihood_rolling
Mamba✔️mamba_ssmMamba architecture Language Models via the mamba_ssm packagegenerate_untilloglikelihoodloglikelihood_rolling
Huggingface Optimum (Causal LMs)✔️openvinoAny decoder-only AutoModelForCausalLM converted with Huggingface Optimum into OpenVINO™ Intermediate Representation (IR) formatgenerate_untilloglikelihoodloglikelihood_rolling
Neuron via AWS Inf2 (Causal LMs)✔️neuronxAny decoder-only AutoModelForCausalLM supported to run on huggingface-ami image for inferentia2generate_untilloglikelihoodloglikelihood_rolling
Neural Magic DeepSparse✔️deepsparseAny LM from SparseZoo or on HF Hub with the "deepsparse" taggenerate_untilloglikelihood
Neural Magic SparseML✔️sparsemlAny decoder-only AutoModelForCausalLM from SparseZoo or on HF Hub. Especially useful for models with quantization like zoo:llama2-7b-gsm8k_llama2_pretrain-pruned60_quantizedgenerate_untilloglikelihoodloglikelihood_rolling
Your local inference server!✔️local-completions or local-chat-completions (using openai-chat-completions model type)Any server address that accepts GET requests using HF models and mirror's OpenAI's Completions or ChatCompletions interfacegenerate_until

不提供logits或logprobs的模型只能与类型为generate_until的任务一起使用,而本地模型或提供其提示的logits/logprobs的API可以在所有任务类型上运行:generate_until、loglikelihood、loglikelihood_rolling和multiple_choice。

有关不同任务输出类型和模型请求类型的更多信息,请参阅我们的文档。

注意:对于闭环聊天模型API(如Anthropic Claude 3和GPT-4),我们建议首先仔细查看使用--limit 10的几个样本输出,以确认在生成任务上的答案提取和评分表现符合预期。对于anthropic-chat-completions,通过在--model_args中提供system="<some system prompt here>",指导模型如何响应可能很有用。

其他框架

许多其他库中都包含调用评估挑战的脚本。这些包括GPT-NeoX、Megatron-DeepSpeed和mesh-transformer-jax。
要创建自己的自定义集成,可以按照此教程的说明进行操作。

附加功能

注意:对于不适合直接评估的任务 —— 无论是由于执行不受信任代码的风险还是由于评估过程中的复杂性 —— 可以使用--predict_only标志获取解码生成,以进行事后评估。

如果您有兼容Metal的Mac,可以通过将--device cuda:0替换为--device mps(需要PyTorch版本2.1或更高版本)来运行评估挑战。请注意,PyTorch MPS后端仍处于早期开发阶段,因此可能存在正确性问题或不支持的操作。如果您在MPS后端上观察到模型性能异常,我们建议首先检查在--device cpu和--device mps上的模型正向传递是否匹配。

注意,您可以通过运行以下命令来查看LM输入的样子:

python write_out.py \
    --tasks <task1,task2,...> \
    --num_fewshot 5 \
    --num_examples 10 \
    --output_base_path /path/to/output/folder

这将为每个任务写出一个文本文件。

要验证执行任务本身之外的任务数据的完整性,可以使用--check_integrity标志:

lm_eval --model openai \
    --model_args engine=davinci \
    --tasks lambada_openai,hellaswag \
    --check_integrity

3、高级使用技巧

对于使用HuggingFace transformers库加载的模型,通过--model_args提供的任何参数将直接传递给相关的构造函数。这意味着您可以像使用AutoModel一样使用我们的库。例如,您可以通过在model_args参数中添加local path通过pretrained=或使用PEFT微调的模型来运行调用,如下所示:

lm_eval --model hf \
    --model_args pretrained=EleutherAI/gpt-j-6b,parallelize=True,load_in_4bit=True,peft=nomic-ai/gpt4all-j-lora \
    --tasks openbookqa,arc_easy,winogrande,hellaswag,arc_challenge,piqa,boolq \
    --device cuda:0

使用Hugging Face transformers库可以轻松加载提供为增量权重的模型。在--model_args中,设置delta参数以指定增量权重,并使用pretrained参数指定它们将应用于的相对基本模型:

lm_eval --model hf \
    --model_args pretrained=Ejafa/llama_7B,delta=lmsys/vicuna-7b-delta-v1.1 \
    --tasks hellaswag

GPTQ量化模型可以通过在model_args参数中指定文件名,使用autogptq=NAME(或autogptq=True以使用默认名称)加载:

lm_eval --model hf \
    --model_args pretrained=model-name-or-path,autogptq=model.safetensors,gptq_use_triton=True \
    --tasks hellaswag

我们支持任务名称中的通配符,例如,您可以通过--task lambada_openai_mt_* 运行所有机器翻译的lambada任务。

4、保存结果

要保存评估结果,请提供一个--output_path。我们还支持使用--log_samples标志记录模型响应,以进行事后分析。

此外,您可以通过--use_cache提供一个目录,用于缓存先前运行的结果。这样可以避免重复执行相同的(模型,任务)对进行重新评分。

要将结果和样本推送到Hugging Face Hub,请首先确保在HF_TOKEN环境变量中设置了具有写访问权限的访问令牌。然后,使用--hf_hub_log_args标志指定组织、仓库名称、仓库可见性以及是否将结果和样本推送到Hub - 例如,HF Hub上的示例数据集。

lm_eval --model hf \
    --model_args pretrained=model-name-or-path,autogptq=model.safetensors,gptq_use_triton=True \
    --tasks hellaswag \
    --log_samples \
    --output_path results \
    --hf_hub_log_args hub_results_org=EleutherAI,hub_repo_name=lm-eval-results,push_results_to_hub=True,push_samples_to_hub=True,public_repo=False \

这使您可以通过以下方式轻松从Hub下载结果和样本:

from datasets import load_dataset

load_dataset("EleutherAI/lm-eval-results-private", "hellaswag", "latest")

有关支持的参数的完整列表,请查阅我们文档中的接口指南!

5、可视化结果

您可以无缝地使用Weights & Biases(W&B)和Zeno分析和可视化评估挑战运行的结果。

Zeno

您可以使用Zeno来可视化评估挑战运行的结果。
首先,前往hub.zenoml.com创建帐户并在您的帐户页面获取API密钥。将此密钥添加为环境变量:

export ZENO_API_KEY=[your api key]

您还需要安装额外的lm_eval[zeno]包。

要可视化结果,请使用log_samples和output_path标志运行评估挑战。我们期望output_path包含代表各个模型名称的多个文件夹。因此,您可以在任意数量的任务和模型上运行评估,并将所有结果作为Zeno项目上传。

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

然后,您可以使用zeno_visualize脚本上传生成的数据:

python scripts/zeno_visualize.py \
    --data_path output \
    --project_name "Eleuther Project"

这将使用data_path中的所有子文件夹作为不同的模型,并将这些模型文件夹中的所有任务上传到Zeno。如果在多个任务上运行评估挑战,则project_name将用作前缀,并将为每个任务创建一个项目。

您可以在examples/visualize-zeno.ipynb中找到此工作流程的示例。

Weights and Biases

通过Weights and Biases集成,您现在可以花更多时间提取对评估结果的深入见解。该集成旨在通过Weights & Biases(W&B)平台简化记录和可视化实验结果的流程。

集成提供以下功能:
>> 自动记录评估结果,
>> 将样本记录为W&B表格,便于可视化,
>> 将results.json文件记录为版本控制的工件,
>> 如果记录了样本,则记录<task_name>_eval_samples.json文件,
>> 生成包含所有重要指标的全面报告进行分析和可视化,
>> 记录任务和CLI特定配置,
>> 以及更多类似于用于运行评估的命令、GPU/CPU计数、时间戳等的开箱即用功能。

首先,您需要安装lm_eval[wandb]额外包。执行pip install lm_eval[wandb]。使用您的唯一W&B令牌对计算机进行身份验证。访问https://wandb.ai/authorize获取令牌。在命令行终端中运行wandb login。

像往常一样使用wandb_args标志运行评估挑战。使用此标志提供参数以初始化wandb运行(wandb.init)为逗号分隔的字符串参数。

lm_eval \
    --model hf \
    --model_args pretrained=microsoft/phi-2,trust_remote_code=True \
    --tasks hellaswag,mmlu_abstract_algebra \
    --device cuda:0 \
    --batch_size 8 \
    --output_path output/phi-2 \
    --limit 10 \
    --wandb_args project=lm-eval-harness-integration \
    --log_samples

在stdout中,您将找到指向W&B运行页面和生成报告的链接。您可以在examples/visualize-wandb.ipynb中找到此工作流程的示例,以及如何在CLI之外集成它的示例。

lm-evaluation-harness的案例应用

持续更新中……

LLMs之benchmark:利用lm-evaluation-harness对Yi系列/GLM系列/Qwen系列等模型进行C-Eval测试(如Yi-34B、chatglm4-9b、Qwen2-7B等)实战代码并输出得分图文教程之详细攻略

https://yunyaniu.blog.csdn.net/article/details/139640152

MiniGPT-4的安装可以按照以下步骤进行: 1. 首先,克隆MiniGPT-4的GitHub仓库。可以使用以下命令克隆仓库: ``` git clone https://github.com/Vision-CAIR/MiniGPT-4.git ``` 2. 进入克隆的MiniGPT-4目录: ``` cd MiniGPT-4 ``` 3. 使用conda创建并激活一个新的环境。可以使用以下命令创建环境: ``` conda env create -f environment.yml conda activate minigpt4 ``` 4. 下载MiniGPT-4模型的权重文件。具体的下载方式可能因为模型的发布方式而有所不同,请根据提供的模型下载方式进行下载。 5. 在`eval_configs/minigpt4_eval.yaml`文件中设置MiniGPT-4的checkpoint路径。可以修改`ckpt`字段为MiniGPT-4权重文件的路径。 6. 在本地启动MiniGPT-4。可以使用以下命令启动MiniGPT-4: ``` python demo.py --cfg-path eval_configs/minigpt4_eval.yaml --gpu-id 0 ``` 这样,你就可以安装使用MiniGPT-4了。请确保按照上述步骤进行操作,并根据实际情况修改相应的路径和参数。 #### 引用[.reference_title] - *1* [MiniGPT-4引领潮流,GPT-4提前发布图片阅读功能](https://blog.csdn.net/Allen_Tsang/article/details/130454842)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【LLMs系列】没钱玩GPT-4?来试试Mini-GPT4吧!](https://blog.csdn.net/doubleguy/article/details/131407384)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值