PEFT适配器检查点为什么不包含完整基础模型
训练完 LoRA 或其他 PEFT 适配器,打开检查点目录却只看到 adapter_model.safetensors 和 adapter_config.json,这通常不是保存失败。PEFT 的目标就是只保存可训练的适配器参数,把体积较大的冻结基础模型留在外部;恢复时再把两者装配起来。
官方地址:https://huggingface.co/docs/peft/main/developer_guides/checkpoint
检查点不包含完整基础模型,是 PEFT 的参数高效设计。只要适配器配置仍能指向匹配的基础模型,就可以恢复推理或继续训练;只有需要独立部署时,才考虑额外保存或合并完整模型。
先看目录:缺少基础模型不等于保存失败
这次问题往往出现在两个时刻:训练任务结束后检查输出目录,或者把检查点上传到模型仓库后发现文件明显比基础模型小。先不要把“文件少”当成损坏证据,我们要先按职责拆开目录。
| 文件或对象 | 负责什么 | 是否包含完整基础模型参数 |
|---|---|---|
adapter_model.safetensors | 保存适配器的可训练权重 | 否 |
adapter_config.json | 保存 PEFT 类型、目标模块和基础模型标识等配置 | 否 |
| 基础模型目录或 Hub 模型 | 提供冻结的 Transformer 主体权重 | 是 |
官方 checkpoint 文档明确说明,save_pretrained() 保存的是适配器文件与配置,state_dict 只包含适配器模块参数。也就是说,保存动作本身没有把基础模型“删掉”,而是没有重复拷贝它。

故障根因:训练更新范围和保存范围是同一件事
PEFT 训练时,基础模型大部分参数被冻结,优化器真正更新的是 LoRA 矩阵、Prefix 等适配器参数。为了让检查点足够小、便于在多个基础模型副本之间复用,保存器默认沿用这个边界:把会变化的部分保存下来,把不会变化的部分留给加载方提供。
因此需要区分三个容易混淆的对象:
- 训练检查点:用于保存适配器进度,通常还会由 Trainer 维护训练状态,以便从某个 checkpoint 继续训练。
- 适配器发布包:权重加配置,适合在已知基础模型的前提下共享、切换和挂载。
- 独立部署模型:不希望部署环境再寻找基础模型时,才需要把基础模型一起交付,或将适配器合并进基础权重后另存。
换句话说,检查点小并不代表训练结果丢失;它代表结果被表达成“基础模型 + 增量适配器”的组合。
恢复检查点:先加载基础模型,再挂载适配器
恢复的关键顺序是先根据配置加载与训练时一致的基础模型,再将适配器目录交给 PEFT。下面的示例只展示恢复关系,模型名称应替换成训练时实际使用的值。
from transformers import AutoModelForCausalLM
from peft import PeftConfig, PeftModel
adapter_dir = "./my-adapter"
# 先读取适配器配置,取得训练时绑定的基础模型标识。
peft_config = PeftConfig.from_pretrained(adapter_dir)
# 基础模型必须与训练时的架构、词表和关键配置保持匹配。
base_model = AutoModelForCausalLM.from_pretrained(
peft_config.base_model_name_or_path
)
# 将适配器参数挂到基础模型上,得到可用于推理或继续训练的组合模型。
model = PeftModel.from_pretrained(base_model, adapter_dir)
model.eval() # 推理场景关闭训练态行为
如果配置里的基础模型标识不可访问、被移动,或本地使用了不同修订版本,加载失败并不说明适配器文件损坏,而是组合中的另一半没有按原约束准备好。生产环境应记录基础模型的仓库、修订版本、分词器和 PEFT 配置。

继续训练还是独立部署:按结果选择保存策略
确定“为什么没有基础模型”之后,下一步是根据交付目标做选择,而不是盲目把大文件复制进每个检查点。
继续训练
保留适配器检查点和训练状态,使用同一基础模型恢复。这样能继续沿用轻量检查点的优势;如果换了基础模型、词表或关键架构配置,原适配器不一定仍然适用。
保留可切换适配器
把基础模型作为共享依赖,把多个适配器放在不同目录。推理服务可以按任务加载或切换适配器,适合一个基础模型对应多个领域能力的场景。发布清单中至少要同时写明基础模型标识、适配器版本和兼容的 PEFT/Transformers 范围。
导出独立模型
当部署侧不想再管理适配器依赖,可以使用适配器模型提供的合并能力,将增量权重写入基础模型后保存新的模型目录。合并前先保留原始适配器包;合并后的目录适合直接交付,但会失去轻量切换和单独更新适配器的便利。
# 仅在确认目标是独立部署时才执行合并导出。
merged_model = model.merge_and_unload()
# 保存合并后的完整模型;分词器仍要与模型一起交付。
merged_model.save_pretrained("./merged-model", safe_serialization=True)
复查清单:把“文件缺失”改成“依赖完整”
- 确认目录中有适配器权重和配置,而不是只检查是否存在基础模型大文件。
- 从
adapter_config.json记录基础模型标识、PEFT 类型和目标模块。 - 用与训练时一致的基础模型和分词器加载,再恢复适配器。
- 继续训练保留适配器检查点;独立部署再考虑合并或额外交付基础模型。
- 在模型仓库说明组合关系,避免接收方把适配器目录误当成完整模型直接加载。
最后可以把这个问题记成一句话:PEFT 保存的是“变化量”,不是“完整世界”。只要基础模型和适配器的契约没有断,检查点体积小反而说明参数高效微调正在按设计工作。
相关问题
为什么 adapter_config.json 很重要?
它记录了适配器类型以及加载所需的关键配置,通常还会提供基础模型标识。没有配置时,加载方可能无法自动判断如何把权重注入正确的模块。
可以只把 adapter_model.safetensors 发给别人吗?
不建议。权重文件需要与配置和匹配的基础模型一起解释;至少应同时交付配置,并明确基础模型来源和版本。
合并后还能像原来一样切换多个适配器吗?
合并后的目录更接近独立完整模型,通常不再保留原来的适配器切换边界。需要灵活切换时,应保留未合并的适配器包。
Transformers生成结果为什么包含输入提示词
- 上一篇
- Transformers生成结果为什么包含输入提示词
- 下一篇
- Hugging Face Datasets map怎样同时删除旧字段
-
- 科技周边 · 人工智能 | 48分钟前 | python · 人工智能 · Transformers apply_chat_template 聊天模板 chat_template 角色标签
- Transformers聊天模板与手写角色标签有什么兼容性差异
- 492浏览 收藏
-
- 科技周边 · 人工智能 | 53分钟前 | PyTorch checkpoint Accelerate 随机数状态 恢复训练
- Accelerate恢复训练时如何保存随机数状态
- 326浏览 收藏
-
- 科技周边 · 人工智能 | 54分钟前 |
- Diffusers怎样使用Generator复现同一张生成图
- 118浏览 收藏
-
- 科技周边 · 人工智能 | 55分钟前 | 模型 混合精度 优化器 分布式训练 Accelerate Accelerator.prepare
- Accelerate prepare为什么要同时接收模型与优化器
- 386浏览 收藏
-
- 科技周边 · 人工智能 | 58分钟前 | 人工智能 · Hugging Face Datasets streaming IterableDataset Dataset.shuffle shuffle buffer
- Datasets流式读取与内存数据集的shuffle有什么区别
- 130浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Hugging Face Datasets map怎样同时删除旧字段
- 421浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | python · Hugging Face 提示词 Transformers generate input_ids
- Transformers生成结果为什么包含输入提示词
- 111浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | 解码 token Transformers generate 新生成内容
- Transformers怎样只解码新生成的token
- 461浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | python · 人工智能 · Transformers offset_mapping 原始文本 Fast tokenizer 文本偏移
- Transformers分词偏移怎样映射回原始文本片段
- 330浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | Transformers 固定长度 tokenizer 动态补齐 DataCollatorWithPadding
- Transformers批次分词时动态补齐与固定长度补齐怎么选
- 153浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 463次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 526次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 543次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 492次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 311次使用
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览
-
- Canva手机闪退解决方法及适配指南
- 2026-05-25 501浏览

