LLaMA-Factory 自定义评估指标:一份能直接落地的实践笔记

发布时间:2026/10/23 15:00:54

LLaMA-Factory 自定义评估指标:一份能直接落地的实践笔记 LLaMA-Factory 自定义评估指标一份能直接落地的实践笔记【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100 LLMs VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory你刚用 LLaMA-Factory 微调完模型想验证它在自己的任务上表现如何可现成的评测基准只给你一个叫准确率的数——任务不是选择题的时候就卡住了。这篇聊聊怎么基于 LLaMA-Factory 的评估框架扩展自定义评估指标并直接上手。为什么值得折腾自己评估模型很痛。直接跑公开基准拿到的是一个和业务场景好不好无关的准确率自己写打分脚本又要重新实现一遍仓库里已有的东西few-shot 样本格式化、chat template 编码、batch padding、再算分全是重复劳动。LLaMA-Factory 的评估框架把这条链路封装好了EvalTemplate负责 prompt 格式化含 few-shot 示例拼接Evaluator负责推理和算分参数由EvaluationArguments统一管。关键是这条链路是可插拔的——改模板注册函数、或者子类化评估器就能长出你自己的评估流程。还有个前提要知道这套框架的打分方式是直接取模型在 A/B/C/D 答案 token 上的概率不做文本生成。记住这一点后面自定义的流程就好理解了。核心机制一张图看懂整个评估模块就三样东西各在一个文件里EvaluationArguments→src/llamafactory/hparams/evaluation_args.py一次评估的参数容器。定义task基准名格式为task_split、n_shotfew-shot 示例数默认 5、lang模板语言、save_dir结果保存路径等字段。EvalTemplate→src/llamafactory/eval/template.py评估 prompt 的模板。system、choice、answer三个字段分别控制系统提示、选项行格式和答案引导语。Evaluator→src/llamafactory/eval/evaluator.py执行器。依次加载数据集、格式化、批量推理最后按学科类别算准确率写入results.json和results.log。最值得盯着看的是Evaluator里的打分部分只有几行却是整个指标体系的锚点# src/llamafactory/eval/evaluator.py简化 logits self.model(**batch_input).logits word_probs logits[range(batch), lengths - 1] # 每个样本最后一个有效 token choice_probs softmax(word_probs[:, choice_inputs]) # A/B/C/D 的概率 preds argmax(choice_probs) # 概率最大的字母即预测答案说白了它不是让模型写出答案而是问模型接下来最想吐 A、B、C、D 哪个取概率最高者。所以指标就是outputs labels的字符比较快且稳定——但也意味着想换指标就得改这里或者在它后面加。走一遍从配置到出结果用注册新评估模板 加自定义指标打分走一遍全流程。数据侧遵循框架约定每条样本是带question和 A/B/C/D/answer字段的 dict任务目录里还要有mapping.json声明学科名和类别格式与 CEval、MMLU 一致具体以仓库官方数据为准。先注册模板。在src/llamafactory/eval/template.py末尾调一次注册函数即可_register_eval_template( namemytask, # 对应 lang 参数取值 systemYou are answering questions about {subject}.\n\n, # {subject} 是学科占位符 choice\n{choice}. {content}, answer\nAnswer:, )这段只是告诉框架当 langmytask 时prompt 该怎么拼。{choice}和{content}分别填充选项字母和选项内容现成的en、zh两个模板就是这么注册的。然后跑一次默认评估确认链路通了。Evaluator的构造函数接收一个参数 dict字段对应hparams里的各 dataclass具体以最新文档为准from llamafactory.eval.evaluator import Evaluator Evaluator({ model_name_or_path: your-finetuned-model, # 待评估模型 task: my_benchmark_val, # 任务名必须是 task_split 形式 task_dir: evaluation, # 数据集位置 n_shot: 5, # few-shot 示例数 lang: mytask, # 刚注册的模板 save_dir: ./eval_out/mytask, }).eval()这段跑完就是完整流程加载模型、用mytask模板格式化、批量推理把results.log分类别准确率和results.json每个样本的预测字母写进save_dir。看到这两个文件说明链路通了剩下的只是换怎么算分。加自定义指标推荐走子类化。_save_results是评估流程末尾的回调拿到的两个参数——分类别对错数组和逐样本预测——就是天然的扩展点class MyEvaluator(Evaluator): def _save_results(self, category_corrects, results): super()._save_results(category_corrects, results) # 先照旧保存准确率 # 你的自定义指标用 category_corrects分类别对错数组 # 和 results逐样本预测计算比如分类别加权分、严格匹配率 # 算完按需追加写入 save_dir 下的结果文件改完后实例化MyEvaluator跑同一组参数结果目录里就同时有原准确率和你的自定义指标。这几个坑大概率会踩llamafactory-cli eval直接抛NotImplementedError: Evaluation will be deprecated in the future.→ CLI 入口已标记弃用但 eval 模块本身还在维护 → 改在 Python 里直接调Evaluator(args).eval()。启动时报ValueError: save_dir already exists→EvaluationArguments的__post_init__明确禁止覆盖已存在目录 → 换个新目录或先清掉旧结果再跑。指标为 0 或低得离谱 → 准确率是outputs labels的单字符比较answer 字段写成正确答案是B或带空格就永远不等 → 确认 answer 字段是 A-D 单个字母。IndexError: list index out of range→ 任务名按_拆成 task 和 split如mmlu_val只给名字没有第二段 → 永远用task_split形式写task。收个尾把自定义评估指标的扩展点收拢一下模板扩展点在src/llamafactory/eval/template.py末尾的_register_eval_template四个参数写完即注册。指标扩展点在Evaluator的算分环节之后最实用的钩子是_save_results。参数集中在EvaluationArgumentstask必须task_split形式save_dir不能已存在。评估机制和参数的最新状态以项目官方文档为准具体以最新仓库代码为准。有指标扩展的想法欢迎到项目仓库提 issue 或 PR。下一篇可以接着聊 few-shot 示例的选择与评测集构造。【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100 LLMs VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/21 7:55:07

系统优化中的剪枝艺术:从概念到实践,避开陷阱实现高效精简

1. 从“剪枝”说起:一个被误解的通用概念 “剪枝”这个词,听起来像园艺,也像理发,但在我们这些搞技术、做项目的人眼里,它更像是一种通用的优化哲学。无论是训练一个庞大的神经网络,还是维护一个臃肿的代码…

2026/10/22 19:27:24

Lucas定理:大组合数取模问题的数论利器与工程实现

1. 从一道“简单”的组合数问题说起 前几天,一个刚接触算法竞赛的朋友给我发来一道题,题目大意是:给定两个很大的整数 n 和 m,要求计算组合数 C(n, m) 对一个大质数 p 取模的结果。n 和 m 的范围可以大到 10^18,而 p 是…

2026/10/23 14:58:08

50M Linux虚拟机QEMU/KVM部署、网络与扩容避坑指南

简介:面向希望在Windows环境中零安装体验Linux的初学者、教学演示者与轻量测试用户,这套Qume迷你虚拟机把精简虚拟机程序与LiveCD系统映像打包在一起,解压后运行启动脚本即可进入图形桌面,不必安装也无需重启,适合快速…

2026/10/23 14:58:08

keepalived 1.2.13 编译安装与 VIP 漂移验证

简介:Keepalived 1.2.13 源码压缩包面向具备 Linux 基础的运维工程师、网络架构学习者以及需要构建高可用服务的技术人员,尤其适合初中级读者,围绕 VRRP 虚拟路由冗余与 LVS 负载均衡场景,提供源码研读与配置实践的基础素材。压缩…

2026/10/23 14:58:08

C# MES系统源码拆解:从工单下发到追溯闭环的落地经验

简介:一份基于C#的MES(制造执行系统)源码资料包,定位于.NET开发人员、工业信息化工程师及MES二次开发学习者。资料围绕C#实现MES的核心环节展开,涵盖三层架构、实体类数据模型、数据库访问、实时数据采集、工作流引擎、…

2026/10/23 14:58:08

Windows Server 2012 R2 IIS离线安装实战:DISM源配置与0x800f0906排查

简介:这份离线安装包面向需要在无外网环境中为 Windows Server 2012 R2 部署或更新 IIS 的 IT 管理员与运维人员,解决内网、隔离机房或严格网络策略下无法在线拉取系统组件的问题。压缩包共 1568 个文件,约 99.04MB,以 dll 动态库…

2026/10/23 14:58:08

离线镜像包处理指南:区分docker load与registry存储目录

简介:面向无法访问外网的内网环境运维与开发人员,这份资源提供可直接导入的 Docker Registry 镜像文件,用于在内网快速搭建私有镜像仓库,解决离线部署时镜像拉取困难、仓库搭建缺少基础镜像的问题。压缩包共 18 个文件&#xff0c…

2026/10/23 14:53:04

CUPS 2.3.3 源码编译与打印链路排障实践

简介:CUPS 2.3.3 源代码包面向 Linux 与类 Unix 系统管理员、打印机驱动开发者及需要定制打印服务的技术人员,用于在本地编译、裁剪和调试这套通用 Unix 打印系统。其核心围绕 IPP 作业管理展开,兼容 LPD、IPP Everywhere 与 AirPrint&#x…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑