Lighteval 文档

快速入门

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

快速入门

我们建议使用 --help 标志来获取有关每个命令可用选项的更多信息。 lighteval --help

Lighteval 可以与几个不同的命令一起使用。

基本用法

要使用 🤗 Accelerate 在 Truthful QA 基准上评估 GPT-2 ,请运行

lighteval accelerate \
     "pretrained=gpt2" \
     "leaderboard|truthfulqa:mc|0|0"

在这里,我们首先选择一个后端( acceleratenanotronvllm),然后指定要运行的模型和任务。

模型参数的语法是 key1=value1,key2=value2,etc。有效的键值对与后端配置相对应,并在 [下方](#Model Arguments) 详细说明。

任务规范的语法可能一开始有点难以理解。格式如下

{suite}|{task}|{num_few_shot}|{0 for strict `num_few_shots`, or 1 to allow a truncation if context size is too small}

如果第四个值设置为 1,lighteval 将检查提示(包括少量示例)是否对于任务或模型的上下文大小而言过长。如果是,则会自动减少少量示例的数量。

所有官方支持的任务都可以在 tasks_listextended 文件夹中找到。此外,社区提供的任务可以在 community 文件夹中找到。有关任务实现的更多详细信息,例如提示是如何构建的,或者使用了哪些指标,您可以查看实现它们的 文件

支持运行多个任务,可以使用逗号分隔的列表,或者通过指定文件路径。该文件应结构化为 examples/tasks/recommended_set.txt。当指定文件路径时,它应该以 ./ 开头。

lighteval accelerate \
     "pretrained=gpt2" \
     ./path/to/lighteval/examples/tasks/recommended_set.txt
# or, e.g., "leaderboard|truthfulqa:mc|0|0|,leaderboard|gsm8k|3|1"

在一个或多个 GPU 上评估模型

数据并行

要在单个或多个 GPU 上评估模型,首先运行以下命令创建多 GPU 配置。

accelerate config

然后,您可以像下面这样在 8 个 GPU 上使用数据并行来评估模型

accelerate launch --multi_gpu --num_processes=8 -m \
    lighteval accelerate \
    "pretrained=gpt2" \
    "leaderboard|truthfulqa:mc|0|0"

在这里, --override_batch_size 定义了每个设备的批处理大小,因此有效的批处理大小将是 override_batch_size * num_gpus

流水线并行

要在 2 个或更多 GPU 上使用流水线并行来评估模型,请运行

lighteval accelerate \
    "pretrained=gpt2,model_parallel=True" \
    "leaderboard|truthfulqa:mc|0|0"

这将自动使用 accelerate 在 GPU 之间分配模型。

数据并行和流水线并行都可以通过设置 model_parallel=True 并使用 accelerate 在 GPU 之间分配数据来组合使用。

后端配置

model-args 参数接受一个字符串,表示模型参数列表。允许的参数因您使用的后端(vllm 或 accelerate)而异。

Accelerate

  • pretrained (str):HuggingFace Hub 模型 ID 名称或要加载的预训练模型的路径。这实际上是 HuggingFace transformers API 中 from_pretrainedpretrained_model_name_or_path 参数。
  • tokenizer (Optional[str]):将用于分词的 HuggingFace Hub 分词器 ID。
  • multichoice_continuations_start_space (Optional[bool]):是否在多项选择生成的每个延续的开头添加空格。例如,上下文:“法国的首都是什么?”,选项:“巴黎”、“伦敦”。将被分词为:“法国的首都是什么?巴黎”和“法国的首都是什么?伦敦”。True 添加空格,False 删除空格,None 不执行任何操作
  • subfolder (Optional[str]):模型仓库中的子文件夹。
  • revision (str):模型的修订版本。
  • max_gen_toks (Optional[int]):要生成的最大 token 数。
  • max_length (Optional[int]):生成的输出的最大长度。
  • add_special_tokens (bool, optional, 默认为 True):是否将特殊 token 添加到输入序列。如果为 None,则对于 seq2seq 模型(例如 T5),默认值将设置为 True,对于因果模型,默认值将设置为 False
  • model_parallel (bool, optional, 默认为 False):True/False:强制使用或不使用 accelerate 库在多个设备上加载大型模型。默认值:None,对应于将进程数与 GPU 数进行比较。如果较小,则为模型并行,否则不是。
  • dtype (Union[str, torch.dtype], optional, 默认为 None):):如果指定,则将模型权重转换为 dtype。字符串将转换为 torch.dtype 对象(例如, float16 -> torch.float16)。使用 dtype="auto" 从模型的权重中派生类型。
  • device (Union[int, str]):用于模型训练的设备。
  • quantization_config (Optional[BitsAndBytesConfig]):模型的量化配置,手动提供以在量化精度下加载正常的浮点模型。4 位和 8 位精度需要此配置。
  • trust_remote_code (bool):是否在模型加载期间信任远程代码。

VLLM

  • pretrained (str):HuggingFace Hub 模型 ID 名称或要加载的预训练模型的路径。
  • gpu_memory_utilization (float):要使用的 GPU 内存的比例。
  • batch_size (int):模型训练的批处理大小。
  • revision (str):模型的修订版本。
  • dtype (str, None):模型要使用的数据类型。
  • tensor_parallel_size (int):要使用的张量并行单元的数量。
  • data_parallel_size (int):要使用的数据并行单元的数量。
  • max_model_length (int):模型的最大长度。
  • swap_space (int):每个 GPU 的 CPU 交换空间大小 (GiB)。
  • seed (int):模型要使用的种子。
  • trust_remote_code (bool):是否在模型加载期间信任远程代码。
  • use_chat_template (bool):是否使用聊天模板。
  • add_special_tokens (bool):是否将特殊 token 添加到输入序列。
  • multichoice_continuations_start_space (bool):是否在多项选择生成的每个延续的开头添加空格。
  • subfolder (Optional[str]):模型仓库中的子文件夹。

Nanotron

要在单 GPU 上评估使用 nanotron 训练的模型。

Nanotron 模型在没有 torchrun 的情况下无法评估。

 torchrun --standalone --nnodes=1 --nproc-per-node=1  \
 src/lighteval/__main__.py nanotron \
 --checkpoint-config-path ../nanotron/checkpoints/10/config.yaml \
 --lighteval-config-path examples/nanotron/lighteval_config_override_template.yaml

nproc-per-node 参数应与 lighteval_config_template.yaml 文件中配置的数据、张量和流水线并行度匹配。即:nproc-per-node = data_parallelism * tensor_parallelism * pipeline_parallelism

< > 在 GitHub 上更新