You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DPOTrainer训练后AutoPeftModelForCausalLM加载模型报错求助

解决DPOTrainer保存模型后AutoPeftModelForCausalLM加载报404的问题

问题根源

用DPOTrainer训练完直接调用model.save_pretrained()保存时,不会自动把基础模型(比如facebook/opt-350m)的路径写入adapter配置文件。这导致AutoPeftModelForCausalLM加载时找不到基础模型的关联信息,错误地去Hugging Face Hub拉取名为None的模型,自然触发404。而SFTTrainer会自动处理基础模型路径的关联,所以SFT的checkpoint加载正常。

修复方案

1. 正确保存DPO训练后的模型

别直接用dpo_trainer.model.save_pretrained(),改用DPOTrainer自带的save_model()方法,它会自动把基础模型路径写入配置:

dpo_trainer.save_model(path_save_dpo)
tokenizer.save_pretrained(path_save_dpo)

如果一定要手动保存,需要显式给PeftModel指定基础模型路径:

from peft import PeftModel

# 包装训练后的模型并设置基础模型路径
peft_model = PeftModel.from_pretrained(dpo_trainer.model, path_save_dpo)
peft_model.base_model_name_or_path = "facebook/opt-350m"
peft_model.save_pretrained(path_save_dpo)
tokenizer.save_pretrained(path_save_dpo)

2. 加载时显式指定基础模型

如果已经用错误方式保存了模型,加载时直接指定基础模型路径,避免去Hub查找:

from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer

model = AutoPeftModelForCausalLM.from_pretrained(
    path_save_dpo,
    base_model_name_or_path="facebook/opt-350m",
    token=你的HF_TOKEN  # 替换成你的有效HF Token
)
tokenizer = AutoTokenizer.from_pretrained(path_save_dpo)

3. 手动修改adapter配置文件

打开本地保存目录里的adapter_config.json,检查base_model_name_or_path字段,如果值是None,手动改成"facebook/opt-350m",再重新加载模型即可。

额外注意事项

  • 训练和加载时要使用相同版本的peft、transformers和trl,版本不兼容可能导致配置读取异常。
  • 如果用了自定义LoRA配置,确保所有参数都正确保存到了adapter相关文件里。

内容的提问来源于stack exchange,提问作者naitsu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:25:29