Day30 | LoRA 合并实战——合并完模型没坏,但悄悄替你扣了 3 分
苦猿的大模型日记 · Day30 · LoRA 合并实战-帮普通人把AI学进简历系列前言两次评测一个 87.3一个 82.1上周我在整理一个 LoRA 微调项目的验收报告翻到两行数字愣住了。合并前用 peft 加载 adapter 跑评测集综合得分87.3。合并后执行完merge_and_unload()同一套评测集再跑一遍综合得分82.1。中间掉了5.2 分。我第一反应是代码写错了——重新跑分数没变。我又找了几条模型输出人工看一句一句读下来模型说话完全正常没有乱码没有重复没有答非所问。就是评测分数实打实地掉了。这才是最麻烦的地方。要是模型合并完直接胡言乱语你三秒就能发现回滚重来就行。可它现在看起来一切正常你甚至可能会把这 5 分的差距归咎于评测集有波动——直到某天线上效果被投诉你才想起来查这一步。今天这篇就拆一拆合并这两行代码背后到底藏着哪些容易被忽略的假设。PART 01先搞懂——合并这两个字合的是什么LoRA 的核心公式很简单W W (alpha / r) * B AW是 base 模型冻结的原始权重A、B是训练出来的两个小矩阵alpha和r是缩放系数和秩。训练时推理走的是双路径输入先过一遍冻结的W再单独过一遍B A这条旁路两边算完的结果加起来才是最终输出。W全程没动adapter 是挂在旁边的。合并时你把(alpha/r) * B A这坨东西真正加进W里生成一个新的、单一的权重矩阵。合并完之后A、B可以直接扔掉——模型看起来就是个普普通通的完整模型推理路径变成单路径。理论上这两种算法路径输出应该完全一致。这是合并操作的数学基础也是几乎所有教程讲到这一步就结束的原因——公式写完了代码两行收工。但理论上一致和工程上一致中间隔着不少东西。PART 02三个真实会让合并悄悄掉点的病因我把自己踩过和在 issue 区翻到的案例归了归类基本逃不出这三种。病因 1精度没对齐加法悄悄丢了尾数LoRA 训练时A、B两个矩阵通常用 bf16 或 fp16 存。但很多流程里base 权重W加载进来的精度可能不完全一致——尤其是从 QLoRANF4 量化训练完之后直接合并情况更复杂。merge_and_unload()本质是做一次加法。如果加法发生在低精度上或者中间有一次隐式的类型转换每个权重值的误差可能只有小数点后几位但这个误差会被逐层放大尤其在需要精细数值判断的任务上——比如多选题里几个选项概率很接近、或者长链推理需要保持数值稳定——误差就开始体现在分数上。写代码的时候养成一个习惯合并前后手动 assert 一下 dtype。from peft import PeftModel from transformers import AutoModelForCausalLM import torch base AutoModelForCausalLM.from_pretrained( Qwen/Qwen3-8B, torch_dtypetorch.bfloat16, # 显式指定别让它自动推断 ) model PeftModel.from_pretrained(base, ./lora-adapter) # 合并前检查adapter 和 base 精度是否一致 for name, param in model.named_parameters(): if lora_A in name or lora_B in name: assert param.dtype torch.bfloat16, f{name} 精度不对: {param.dtype} merged model.merge_and_unload() merged.save_pretrained(./qwen3-8b-merged, safe_serializationTrue)症状模型说话完全正常但涉及精细判断的任务选择题、数值推理分数下滑。验证方法合并前后固定同一个输入对比 logits 的分布而不是只看生成文本。病因 2scaling 系数算错幅度对不上方向LoRA 真正生效的增量是(alpha/r) * B A不是单纯的B A。这个缩放系数peft 自带的merge_and_unload()会自动处理——但一旦你为了更灵活手写合并逻辑这一步就是最容易漏掉的地方。我见过最典型的错法合并脚本是从别的项目里抄来的alpha和r直接沿用了那个项目的默认值比如alpha16, r8但自己这次训练用的其实是alpha32, r16——比值凑巧数值上接近但不完全相等合并出来的模型不会报错也不会完全跑偏就是权重方向对幅度悄悄错了。# 手动实现 merge 的核心公式标出最容易漏的一行 def manual_merge(W, A, B, alpha, r): scaling alpha / r # -- 这一行最容易漏乘或算错 delta scaling * (B A) return W delta症状模型整体表现偏保守或偏激进——比如训练目标是让模型更果断地给出结论合并后却发现它又开始模棱两可。验证方法检查合并脚本里alpha、r的取值是否和训练配置文件adapter_config.json里的完全一致而不是手抄或记忆。病因 3多个 adapter 依次合并顺序反了如果你训练了不止一个 LoRA——比如先做了一版领域知识微调又在此基础上做了一版工具调用微调——依次合并时第二个 adapter 训练时用的base到底是原始 base还是已经合并了第一个 adapter 的模型这个问题决定了合并顺序对不对。顺序反了不会报错模型也能正常输出。但等于把工具调用这个增量加到了一个错误的基座上——单独测每项能力可能都还凑合组合能力既有领域知识又会调用工具会明显下降。验证方法合并前回头确认每个 adapter 训练时from_pretrained加载的 base 路径画一条清晰的训练血缘线别凭记忆合并。PART 03实测——两条推理路径差多少光说容易掉点没有说服力做一次最小对比实验。思路很简单同一个 adapter分别用训练态不合并peft 直接加载推理和合并态执行merge_and_unload()后推理固定输入、固定随机种子跑两遍对比输出。import torch from transformers import AutoModelForCausalLM, AutoTokenizer from peft import PeftModel base_path Qwen/Qwen3-8B adapter_path ./lora-adapter prompt 帮我总结一下 LoRA 合并容易踩的坑 tokenizer AutoTokenizer.from_pretrained(base_path) inputs tokenizer(prompt, return_tensorspt) # 路径一训练态adapter 挂载不合并 base AutoModelForCausalLM.from_pretrained(base_path, torch_dtypetorch.bfloat16) model_unmerged PeftModel.from_pretrained(base, adapter_path) model_unmerged.eval() with torch.no_grad(): logits_unmerged model_unmerged(**inputs).logits # 路径二合并态merge_and_unload 之后 model_merged model_unmerged.merge_and_unload() model_merged.eval() with torch.no_grad(): logits_merged model_merged(**inputs).logits # 对比两条路径的 logits 差异而不是只看生成文本 diff (logits_unmerged - logits_merged).abs().max().item() print(f最大 logits 差异: {diff})在我自己跑的这一版小流程里dtype 和 scaling 都对齐的情况下diff是一个非常小的数值接近浮点误差量级——这说明合并操作本身的数学没问题。但当我故意把 base 权重的加载精度改成 fp32和训练用的 bf16 不一致重跑一遍diff直接跳大了两个数量级评测分数也应声下滑。这里补一个合并后自检三件套不需要跑完整评测集也能先做一轮排查diff 一下前后输出上面这段代码固定输入跑两遍看 logits 差异量级是否正常看权重范数变化合并前后对比几层关键权重的 L2 范数如果变化幅度和预期的alpha/r缩放不匹配基本就是系数算错了抽查一遍小型评测集哪怕只有几十条也能比聊几句看着还行更快发现问题检查项训练态基线合并态dtype/scaling 对齐合并态dtype 未对齐评测集综合得分87.387.182.1logits 最大差异—~1e-4 量级明显跳大人工看输出正常正常看起来也正常最后一行才是这篇文章真正想说的东西——人工看输出这一项三种情况下的结论都是正常。合并这一步出问题靠聊几句是发现不了的。结尾模型没变笨是你把它算错了合并这一步代码永远只有两行merged model.merge_and_unload() merged.save_pretrained(./merged-model)但这两行背后是三个容易被默认为理所当然的假设——dtype 对不对scaling 系数对不对合并顺序对不对。少一个模型不会报错也不会说胡话它只会在评测集上悄悄替你多扣几分。这不是模型能力的问题是工程实现的问题——好在可复现也可以修。互动时间你合并 LoRA 的时候踩过哪个坑评论区说说我挑几个案例补充进踩坑实录专栏。下一篇预告合并这一步查明白了下一个问题自然是——怎么科学地评测一个微调完的模型才不会被聊几句感觉还行骗过去Day31 我们聊聊评测集怎么搭才靠谱。— END —苦猿 · 帮普通人把 AI 学进简历

相关新闻

SRE 实战手册(八)|组织架构与高效协作机制

SRE 实战手册(八)|组织架构与高效协作机制

SRE 实战手册(八)|组织架构与高效协作机制对应课程「09|案例:互联网典型的 SRE 组织架构」「10|经验:都有哪些高效的 SRE 组织协作机制?」。 这是实践篇的收尾,也是"…

2026/7/18 20:16:01阅读更多 →
投机解码:从eagle1到dflash

投机解码:从eagle1到dflash

🦅 EAGLE:高质量的顺序“作家” 摘要:本文系统介绍了EAGLE系列投机解码技术的演进历程。EAGLE-1首创特征级预测,将预测目标从Token升级为隐藏特征,提升了鲁棒性但受限于串行生成。EAGLE-2引入动态草稿树结构&#xff0…

2026/7/18 20:16:01阅读更多 →
SRE 实战手册(七)|故障复盘:黄金三问与判定三原则

SRE 实战手册(七)|故障复盘:黄金三问与判定三原则

SRE 实战手册(七)|故障复盘:黄金三问与判定三原则对应课程「08|故障复盘:黄金三问与判定三原则」。复盘是 SRE 闭环里性价比最高、却最常被敷衍的一步。一、为什么复盘比"修好"重要十倍 第 06、0…

2026/7/18 20:16:01阅读更多 →
搜yinheit-SDD规范驱动+Harness驾驭工程AI全栈开发-学习记录

搜yinheit-SDD规范驱动+Harness驾驭工程AI全栈开发-学习记录

SDD规范驱动Harness驾驭:AI全栈开发的工程化跃迁一、出码率90%,为什么项目还是延期?2025年以来,Cursor、Copilot、Codex让开发者体验到了“AI辅助编码”的魔力。出码率从53%提升到80%-90%,但一个尴尬的现实随之而来&am…

2026/7/18 21:28:42阅读更多 →
SRE 实战手册(六)|故障发现与处理:On-Call 与“恢复业务优先“

SRE 实战手册(六)|故障发现与处理:On-Call 与“恢复业务优先“

SRE 实战手册(六)|故障发现与处理:On-Call 与"恢复业务优先"对应课程「06|故障发现:如何建设 On-Call 机制?」「07|故障处理:一切以恢复业务为最高优先级」。 …

2026/7/18 21:28:42阅读更多 →
AI 赋能电商搜索的架构进阶:从关键词匹配到语义理解的全链路优化

AI 赋能电商搜索的架构进阶:从关键词匹配到语义理解的全链路优化

AI 赋能电商搜索的架构进阶:从关键词匹配到语义理解的全链路优化 一、电商搜索的演进痛点 传统电商搜索基于倒排索引 TF-IDF/BM25 评分。核心问题是"词不达意":用户搜索"白色连衣裙适合夏天穿的",分词后变成["白色…

2026/7/18 21:28:42阅读更多 →
AI 工作流的可观测性架构:Trace、Metric 与 Log 的三维性能诊断体系

AI 工作流的可观测性架构:Trace、Metric 与 Log 的三维性能诊断体系

AI 工作流的可观测性架构:Trace、Metric 与 Log 的三维性能诊断体系 一、可观测性在 AI 工作流中的必要性 AI 工作流的复杂性与传统微服务有本质区别。一个典型的 Agent 调用链可能涉及:用户意图解析 → RAG 检索 → 多轮 LLM 推理 → 工具调用 → 结果聚…

2026/7/18 21:28:42阅读更多 →
AI产品的多渠道分发模型:从应用市场上架到API经济与生态伙伴的协同布局

AI产品的多渠道分发模型:从应用市场上架到API经济与生态伙伴的协同布局

AI产品的多渠道分发模型:从应用市场上架到API经济与生态伙伴的协同布局 一、好产品卖不出去的困境:单一渠道的分发瓶颈 AI产品团队最常见的增长误区是"产品做好了自然有人用"。现实中的数据更残酷:在没有任何主动分发策略的情况下&…

2026/7/18 21:28:42阅读更多 →
基于 Intel Cyclone IV EPCS/EPCQ 配置芯片的 Nios II 固化脚本与烧录流程(SOF + ELF → HEX → .POF 完整指南)】

基于 Intel Cyclone IV EPCS/EPCQ 配置芯片的 Nios II 固化脚本与烧录流程(SOF + ELF → HEX → .POF 完整指南)】

第一步:准备阶段(硬件与软件环境)在开始烧录前,请确保以下准备工作已经完成:硬件连接:使用 USB-Blaster 下载器连接电脑和开发板的 AS 接口。确保开发板供电正常,且 MSEL[ ] 引脚跳线设置为 AS …

2026/7/18 21:26:41阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/18 10:49:13阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/18 8:49:08阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/18 14:49:24阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/18 18:49:35阅读更多 →