lm-evaluation-harness 配置指南:用 YAML 文件定义可复用的语言模型评测方案

发布时间:2026/9/14 19:43:05
lm-evaluation-harness 配置指南:用 YAML 文件定义可复用的语言模型评测方案 lm-evaluation-harness 配置指南用 YAML 文件定义可复用的语言模型评测方案【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness本篇技术指南围绕lm-evaluation-harness的 配置文件指南 展开系统讲解如何用 YAML 配置文件替代冗长的 CLI 参数将模型、任务、采样、日志与结果输出等评测设置沉淀为可复用、可版本化的配置资产。读完本文你将掌握配置文件与命令行参数的完整映射关系、CLI 覆盖 YAML 的合并优先级、配置校验与后处理管线以及如何结合lm-eval validate与 Python API 在运行前提前发现问题。为什么要用 YAML 配置代替命令行参数在lm-evaluation-harness中一次典型的评测往往需要同时指定模型类型、模型参数、任务列表、few-shot 数量、batch 大小、设备与输出路径等多个选项。直接写 CLI 会让命令变得冗长且难以复用# 直接使用 CLI 参数 lm-eval run --model hf --model_args pretrainedgpt2,dtypefloat32 --tasks hellaswag arc_easy --num_fewshot 5 --batch_size 8 --device cuda:0同样的评测需求可以先把这些设置写入一个 YAML 文件再通过--config一次性加载# 使用配置文件 lm-eval run --config eval_config.yaml配置文件把评测什么、用什么模型、如何采样、结果放哪固化为一份声明式描述使同一套评测方案可以被团队成员共享、被脚本反复调用也更容易通过版本控制追踪评测条件的变化。这一点在 EvaluatorConfig 的类文档 中得到了印证配置对象支持三种初始化途径——CLI 参数from_cli()、YAML 文件from_config()以及直接关键字实例化。需要特别强调的是CLI 参数会覆盖配置文件中的同名值。因此推荐的工作方式是配置定默认、CLI 做实验——把稳定的基准设置放进配置文件在命令行上只覆盖本次实验需要调整的项lm-eval run --config eval_config.yaml --tasks mmlu --limit 100上面这条命令会沿用配置文件中的模型、batch 等设置仅在本次运行中把任务换成mmlu并将每个任务的样本数限制为 100。配置字段速查Config Schema配置文件中的所有键与 CLI 参数一一对应完整字段说明可参考 CLI 参考文档。下表整理了EvaluatorConfig数据类见 evaluate_config.py支持的全部字段、类型、默认值及含义字段类型默认值说明modelstringhf模型类型/提供商如hf、vllm、openai-completionsmodel_argsdict{}模型构造参数如pretrained、dtypetaskslist/string必填待评测的任务列表可传任务名、任务组、.yaml路径或目录num_fewshotint/nullnullfew-shot 示例数量batch_sizeint/string1批大小或auto自动调节max_batch_sizeint/nullnullbatch_size: auto时的最大批大小devicestring/nullcuda:0使用的设备cuda、cuda:0、cpu、mps等limitfloat/nullnull每个任务的示例数限制整数或比例samplesdict/nullnull指定各任务要评估的具体样本索引use_cachestring/nullnull模型响应缓存路径sqlite 数据库文件cache_requestsstring/dict{}请求缓存设置true/refresh/deleteoutput_pathstring/nullnull结果输出目录log_samplesboolfalse是否保存模型的输入输出样本predict_onlyboolfalse只保存预测、跳过指标计算apply_chat_templatebool/stringfalse是否应用对话模板或指定 tokenizer 模板名system_instructionstring/nullnull自定义系统提示词fewshot_as_multiturnbool/nullnull将 few-shot 示例作为多轮对话include_pathstring/nullnull外部任务定义所在目录gen_kwargsdict{}生成参数如temperature、top_p、stopwandb_argsdict{}Weights Biases 初始化参数hf_hub_log_argsdict{}Hugging Face Hub 结果上传参数seedlist/int[0,1234,1234,1234]四个随机种子random、numpy、torch、fewshottrust_remote_codeboolfalse是否信任并执行 Hugging Face 远程代码metadatadict{}任务元数据会与model_args合并上表之外evaluate_config.py 中还定义了若干同样可写入配置文件的字段包括check_integrity运行任务自检、write_out打印前几个文档的 prompt、show_config评测结束后打印完整配置、verbosity日志级别已标记为弃用、wandb_config_argsWB config 更新参数、trackio_argsTrackio 日志参数以及confirm_run_unsafe_code确认执行代码类任务的风险。一个完整的配置文件示例以下示例完整覆盖了模型定义、任务选择、采样控制、输出保存与外部日志集成的典型配置与 config_files.md 中的示例保持一致并补充注释# basic_eval.yaml model: hf model_args: pretrained: gpt2 dtype: float32 tasks: - hellaswag - arc_easy num_fewshot: 0 batch_size: auto device: cuda:0 output_path: ./results/gpt2/ log_samples: true wandb_args: project: llm-evals name: mistral-7b-instruct tags: - mistral - instruct - production hf_hub_log_args: hub_results_org: my-org results_repo_name: llm-eval-results push_results_to_hub: true public_repo: false逐块解读这份配置模型与任务model: hf使用 Hugging Face Transformers 模型model_args的pretrained指定模型名或本地路径dtype指定精度。tasks为列表可混用任务名hellaswag与任务组如mmlu。采样控制num_fewshot: 0表示零样本batch_size: auto让框架根据模型显存自动调节批大小必要时可配合max_batch_size设置上限。输出与样本output_path指定结果保存目录log_samples: true会把每个样本的输入、输出与文档一并落盘便于事后分析。注意配置校验器要求log_samples或predict_only为真时必须同时提供output_path见下文配置校验一节。外部集成wandb_args直接透传给wandb.init()hf_hub_log_args用于将聚合结果与样本推送至 Hugging Face Hub。值得一提的是wandb_args、model_args、gen_kwargs、hf_hub_log_args、metadata等字典类字段在 YAML 中可以写成嵌套的映射形式如果在 CLI 上传入的是keyvalue字符串_parse_dict_args()会调用simple_parse_args_string将其解析为字典后再使用见 evaluate_config.py 与DICT_KEYS常量 L21-L29。配置加载与合并优先级CLI YAML 默认值配置文件之所以能被--config加载并接受 CLI 覆盖核心实现是EvaluatorConfig.from_cli()见 evaluate_config.py。其合并逻辑清晰分为三步以内置默认值起步先构造一个EvaluatorConfig()实例并转为字典作为基准合并 YAML 配置若 CLI 提供了--config调用load_yaml_config()读取文件内容并覆盖默认值CLI 参数覆盖遍历所有 argparse 解析出的命名空间参数凡是真值或显式 0且不属于内部参数command、func的都会覆盖 YAML 中的同名值。因此优先级严格为CLI 参数 YAML 配置 内置默认值。这一行为有测试用例直接验证在 test_cli_subcommands.py 的test_cli_overrides_yaml_overrides_defaults中当 CLI 传入的output_path为None假值时最终配置会保留 YAML 中的/yaml/path而同目录的test_cli_overrides_yaml_with_explicit_zeroL1101则验证了显式传0时 CLI 值能够生效——这正是只接受真值或 0这一过滤规则的用意。在读取 YAML 文件时load_yaml_config()见 evaluate_config.py还做了三件事检查文件是否存在不存在则抛FileNotFoundError、捕获 YAML 语法错误、并强制要求 YAML 根节点必须是映射dict否则抛出类型错误。配置校验与后处理管线每次构造EvaluatorConfig后_configure()会串联执行五个步骤见 evaluate_config.py_parse_dict_args() → _validate_arguments() → _process_arguments() → _normalize_seed() → _set_trust_remote_code()其中_validate_arguments()L330-L368负责跨字段约束校验理解这些规则能帮你避免运行到一半才发现配置不合法tasks必填未指定任务时直接抛出ValueError(Need to specify task to evaluate.)limit仅用于测试设置limit会打印警告提示真实指标不应在 limit 条件下计算predict_only隐含log_samples设置predict_only会自动把log_samples置为True因为预测结果需要随样本一起保存输出路径强制要求log_samples或predict_only为真时必须指定output_path多轮 few-shot 约束fewshot_as_multiturn为None且设置了apply_chat_template时自动置为True若显式设为True却未设置apply_chat_template则直接报错samples与limit互斥两者同时非空时报错。此外_normalize_seed()L283-L328会把 YAML 中的标量种子如seed: 42扩展为四个种子值random、numpy、torch、fewshot与 CLI 的--seed语义保持一致_process_arguments()L370-L390支持samples直接传 JSON 字符串或 JSON 文件路径并把model_args与metadata合并成最终元数据_set_trust_remote_code()L483-L498在开启trust_remote_code时同步覆盖datasets库的内部开关并把该选项注入model_args。任务解析则由process_tasks()L392-L481完成它支持标准任务名、task1,task2逗号分隔、.yaml自定义任务文件含 glob 通配、以及指向某个目录目录下所有*.yaml均被加载四种形式对于找不到的任务会汇总后统一抛出Tasks not found错误便于一次定位所有拼写问题。运行前校验lm-eval validate在正式跑评测之前可以用validate子命令提前检查任务是否可用# 检查任务是否存在 lm-eval validate --tasks hellaswag,arc_easy # 使用外部任务定义 lm-eval validate --tasks my_task --include_path /path/to/tasksvalidate子命令的实现见 validate.py它会用TaskManager解析任务名凡是在内置任务与--include_path指定目录中都找不到的任务都会被列出并导致非零退出码sys.exit(1)。从该子命令的帮助文本L36-L44可以看到其校验覆盖范围包括任务是否存在、YAML/JSON 配置语法、数据集路径与 split 是否可访问、必填字段是否齐全、指标函数与聚合方式、filter 管线参数以及 prompt 模板渲染。此外run子命令还提供--check_integrity参数可在评测前运行任务自带的自检用例。在 Python 中以编程方式加载配置配置文件不仅服务于 CLI也能在 Python 脚本中复用。最直接的方式是EvaluatorConfig.from_config()它会加载 YAML、与内置默认值合并并完成全部校验见 evaluate_config.pyfrom lm_eval.config.evaluate_config import EvaluatorConfig import lm_eval # 从 YAML 加载配置 config EvaluatorConfig.from_config(eval_config.yaml) # 解析任务并返回 TaskManager task_manager config.process_tasks() # 运行评测 results lm_eval.simple_evaluate( modelconfig.model, model_argsconfig.model_args, tasksconfig.tasks, num_fewshotconfig.num_fewshot, batch_sizeconfig.batch_size, deviceconfig.device, task_managertask_manager, log_samplesconfig.log_samples, gen_kwargsconfig.gen_kwargs, apply_chat_templateconfig.apply_chat_template, system_instructionconfig.system_instruction, )也可以跳过 YAML直接实例化EvaluatorConfig传入全部参数等价于一份内联配置from lm_eval.config.evaluate_config import EvaluatorConfig config EvaluatorConfig( modelhf, model_args{pretrained: gpt2, dtype: float32}, tasks[hellaswag, arc_easy], num_fewshot5, batch_size8, devicecuda:0, output_path./results/, log_samplesTrue, ) task_manager config.process_tasks()从源码结构看EvaluatorConfig的设计意图正是让 CLI 与 Python API 共享同一套配置模型lm-eval run子命令在入口处先调用EvaluatorConfig.from_cli(args)完成校验与预处理再将其字段逐一透传给simple_evaluate()见 run.py因此配置文件、CLI 与 Python 三种入口的字段语义完全一致。更详细的编程用法可参考 Python API 指南。实践建议从最小配置开始先用model、tasks、num_fewshot、batch_size搭建最小可运行配置再按需追加日志、缓存与输出选项。善用 CLI 覆盖把稳定的默认值写进配置文件实验性参数如--limit、--num_fewshot在命令行上临时覆盖。按关注点拆分配置为不同模型家族、不同任务集合分别建立配置例如gpt2_eval.yaml、llama3_eval.yaml、chat_eval.yaml。配置与结果一同纳入版本控制评测可复现的关键在于记录当时用的什么配置把配置文件与output_path下的结果一起提交。善用 YAML 注释用#在配置文件中说明每个关键选项的取舍理由方便团队协作与后续审计。配置文件把一次评测从一串难以复用的命令行变成了一份自描述的声明式文档配合lm-eval validate的预检能力能够在投入算力之前就发现任务拼写、字段缺失、路径错误等绝大多数问题是使用lm-evaluation-harness进行规模化、可复现评测的推荐姿势。【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询