LoRA 合并是把适配器的变化写进兼容底模,得到独立模型副本。它不是把任意两个不同架构模型拼起来。PEFT 的 merge_and_unload 会移除适配器管理能力,因此应先验证、再保存到新目录,保留底模与适配器原件。本文未运行真实权重合并。
确认适配器确实属于该底模
准备本地 base_model 与 adapter 两个目录,检查 adapter_config.json 记录的底模名称、任务类型与目标模块。模型结构、训练时底模版本及词表必须相容;仅参数量相同不够。先用未合并适配器正常推理,且关闭随机采样,避免把采样波动误当合并错误。

比较相同输入的 logits
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained("base_model")
tok = AutoTokenizer.from_pretrained("base_model")
model = PeftModel.from_pretrained(base, "adapter").eval()
x = tok("请用一句话描述雨后的街道。", return_tensors="pt")
with torch.no_grad():
before = model(**x).logits.clone()
merged = model.merge_and_unload(safe_merge=True).eval()
with torch.no_grad():
after = merged(**x).logits
print("max_abs_diff", (before-after).abs().max().item())
merged.save_pretrained("merged_copy")
tok.save_pretrained("merged_copy")
safe_merge 有助于检查不正常数值,不替代兼容性验证。代码默认普通未量化本地权重,CPU 内存需求取决于实际模型;不承诺普通电脑能加载。特殊量化和部分适配方法可能不支持合并,应先查其文档。
保存之后还要独立回读
关掉原对象,重新从 merged_copy 加载模型与分词器,用同一组输入检查输出,记录最大差值、dtype、库版本与底模版本。不同精度可能产生数值误差,不存在适合所有模型的固定误差阈值;先根据实际任务判断异常,再比较生成文本。不要只验证保存目录存在。
为什么必须保留原件
官方明确说明 merge_and_unload 返回基础模型,不再支持禁用适配器、同时载入多个适配器或反向拆分。合并副本包含完整底模权重,文件体积与只保存 LoRA 不同。出现模块名称或形状报错时停止合并,核对底模版本;如果误覆盖原目录,就失去便捷回滚路径。下一步用新目录完成自己的任务样例回归,再决定是否替换部署资源。
参考资料
依据 2026-10-03 读取的官方资料整理:官方文档 1;官方文档 2。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33086.html