lm-evaluation-harness 自定义评估实战指南:5 步搭出自己的评估流水线
发布时间:2026/9/12 5:21:11 锦皓数字建站

lm-evaluation-harness 自定义评估实战指南5 步搭出自己的评估流水线【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness公开基准集分数很高却测不出你内部业务场景里的真实差距。用 lm-evaluation-harness 做自定义评估可以把你的数据、指标和模型都挂上同一条评估流水线。 第 1 步先跑通一个自定义评估别急着改框架先用内置任务把流程走通。评估的入口是 lm_eval/evaluator.py 里的simple_evaluate十几行代码就能起一轮评估from lm_eval import evaluator results evaluator.simple_evaluate( modelgpt2, tasks[arc_easy, hellaswag], num_fewshot5, batch_size4, limit0.1, )三个参数最常用num_fewshot控制提示里放几条示例limit0.1只跑 10% 数据适合先验证流程不报错batch_size决定推理吞吐。跑通之后你就有了一条能随时替换零件的流水线。 第 2 步用 YAML 定义自己的任务想换成自己的数据就写一个任务 YAML。参考仓库里现成的 lm_eval/tasks/arc/arc_easy.yaml关键字段如下字段作用示例task任务名tasks参数里用它引用my_taskdataset_path/dataset_name数据来源allenai/ai2_arc/ARC-Easyoutput_type评估方式multiple_choice、generate_until等multiple_choicedoc_to_text提示模板Question: {{question}}\nAnswer:doc_to_target标注正确答案{{choices.label.index(answerKey)}}metric_list指标与聚合方式accmeandoc_to_text加num_fewshot之后每条样本会被渲染成任务描述 若干示例 待答问题的结构这正是 few-shot 提示的标准形态更完整的字段说明见 docs/API_guide.md。 第 3 步注册与覆盖两种自定义指标内置的acc、acc_norm不够用时有两种方式换指标取舍点在于影响范围。方式一全局注册。用 lm_eval/api/registry.py 提供的register_metric把函数挂进注册表所有任务、所有 YAML 都能按名字引用它适合团队通用的口径from lm_eval.api.registry import register_metric register_metric def custom_acc(references, resps): n sum(r.strip() ref.strip() for ref, r in zip(references, resps)) return n / len(references)方式二运行时覆盖。调用task.override_metric(metric_namecustom_acc)只在当前这次运行里把该任务的指标整体换成你的函数不改动任务文件、不污染注册表。一句话选择要长期复用就注册只做局部实验就覆盖。注意覆盖前指标名必须已在注册表里能找到。 第 4 步接入非标准模型你的模型不是 HuggingFace 格式也没关系。框架把模型抽象成LM基类定义在 lm_eval/api/model.py你只需要继承它、实现两个核心方法from lm_eval.api.model import LM class MyModel(LM): def __init__(self, model_path): super().__init__() self._m load_my_model(model_path) # 你的加载逻辑 def _loglikelihood_tokens(self, requests, disable_tqdmFalse): # 返回 (logprob, answer_logprob) 列表 ... def _generate_until(self, requests, disable_tqdmFalse): # 返回生成的文本列表 ..._loglikelihood_tokens支撑选择题、困惑度这类任务_generate_until支撑生成类任务两个都实现后模型就能跑全部任务类型。实例化后直接把对象传给simple_evaluate的model参数即可examples/transformer-lens.py 是一个完整可用的适配范例。⚡ 第 5 步提速与三个高频坑跑起来之后效率问题通常集中在这三处重复跑太慢给simple_evaluate传use_cachecache.db指向一个 sqlite 文件再打开cache_requestsTrue第二轮起模型输出和请求构建都走缓存。批处理显存爆把batch_size设为auto让框架自动探测安全批大小同时用max_batch_size32封顶防止大任务上探测过头。分数莫名变低先查 YAML 里\n是否被双引号包住否则换行符会失效如果开了apply_chat_template提示格式已被改写loglikelihood 类任务要和基线重新对齐别直接跟旧分数比。更多细节可以翻 docs/footguns.md。接下来可以去哪里读一读 lm_eval/evaluator.py 的simple_evaluate主流程理解请求是怎么分发到模型的。照 examples/transformer-lens.py 给自家模型写一个最小可用的LM子类。对照 docs/new_task_guide.md 把你自己业务的第一个任务 YAML 正式提交进仓库。【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。