Lighteval 文档
快速入门
并获得增强的文档体验
开始使用
快速入门
我们建议使用 --help
标志来获取有关每个命令可用选项的更多信息。 lighteval --help
Lighteval 可以与几个不同的命令一起使用。
lighteval accelerate
: 使用 🤗 Accelerate 在 CPU 或一个或多个 GPU 上评估模型lighteval nanotron
: 使用 ⚡️ Nanotron 在分布式设置中评估模型lighteval vllm
: 使用 🚀 VLLM 在一个或多个 GPU 上评估模型lighteval endpoint
inference-endpoint
: 使用 🔗 Inference Endpoint 在一个或多个 GPU 上评估模型tgi
: 使用 🔗 Text Generation Inference 在一个或多个 GPU 上评估模型openai
: 使用 🔗 OpenAI API 在一个或多个 GPU 上评估模型
基本用法
要使用 🤗 Accelerate 在 Truthful QA 基准上评估 GPT-2
,请运行
lighteval accelerate \
"pretrained=gpt2" \
"leaderboard|truthfulqa:mc|0|0"
在这里,我们首先选择一个后端( accelerate
、 nanotron
或 vllm
),然后指定要运行的模型和任务。
模型参数的语法是 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_list 和 extended 文件夹中找到。此外,社区提供的任务可以在 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_pretrained
的pretrained_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
。