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

PEFT LoRA适配器模型与基础模型合并报错求助

问题:合并PEFT LoRA适配器与基础模型失败

尝试将PEFT LoRA适配器模型ArcturusAI/Crystalline-1.1B-v23.12-tagger与基础模型TinyLlama/TinyLlama-1.1B-Chat-v0.6合并为完整模型时,运行以下代码出现错误:

from transformers import AutoModel, AutoConfig

# Load the pretrained model and LoRA adapter
pretrained_model_name = "TinyLlama/TinyLlama-1.1B-Chat-v0.6"

pretrained_model = AutoModel.from_pretrained(pretrained_model_name)
lora_adapter = AutoModel.from_pretrained("ArcturusAI/Crystalline-1.1B-v23.12-tagger")

# Assuming the models have the same architecture (encoder, decoder, etc.)
# Get the weights of each model
pretrained_weights = pretrained_model.state_dict()
lora_adapter_weights = lora_adapter.state_dict()

# Combine the weights (adjust the weights based on your preference)
combined_weights = {}
for key in pretrained_weights:
    combined_weights[key] = 0.8 * pretrained_weights[key] + 0.2 * lora_adapter_weights[key]

# Load the combined weights into the pretrained model
pretrained_model.load_state_dict(combined_weights)

# Save the integrated model
pretrained_model.save_pretrained("ArcturusAI/Crystalline-1.1B-v23.12-tagger-fullmodel")

错误信息:

OSError: ArcturusAI/Crystalline-1.1B-v23.12-tagger does not appear to have a file named pytorch_model.bin, tf_model.h5, model.ckpt or flax_model.msgpack.

错误原因

  1. LoRA模型加载方式错误:AutoModel.from_pretrained()仅支持加载完整Transformer模型的权重文件,而LoRA适配器仅包含增量权重(如lora_A、lora_B这类参数),没有完整模型的权重文件,因此触发找不到文件的报错。
  2. 权重合并逻辑错误:LoRA并非通过简单加权基础模型与适配器权重实现合并,而是需要将LoRA的增量权重注入到基础模型的对应层结构中。

正确解决方案

使用PEFT库提供的原生工具完成LoRA与基础模型的合并,步骤如下:

1. 安装依赖库

确保安装所需工具库:

pip install transformers peft torch accelerate

2. 合并模型代码

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

# 加载基础模型与配套Tokenizer
base_model_name = "TinyLlama/TinyLlama-1.1B-Chat-v0.6"
base_model = AutoModelForCausalLM.from_pretrained(
    base_model_name,
    device_map="auto",
    torch_dtype="auto"
)
tokenizer = AutoTokenizer.from_pretrained(base_model_name)

# 加载LoRA适配器并合并到基础模型
lora_model_name = "ArcturusAI/Crystalline-1.1B-v23.12-tagger"
merged_model = PeftModel.from_pretrained(base_model, lora_model_name)
merged_model = merged_model.merge_and_unload()

# 保存合并后的完整模型与Tokenizer
merged_model.save_pretrained("Crystalline-1.1B-v23.12-tagger-fullmodel")
tokenizer.save_pretrained("Crystalline-1.1B-v23.12-tagger-fullmodel")

代码说明

  • AutoModelForCausalLM:针对对话类模型(如TinyLlama Chat)使用因果语言模型类加载,比通用AutoModel更适配任务场景。
  • PeftModel.from_pretrained():正确关联基础模型与LoRA适配器,自动识别适配器的权重结构。
  • merge_and_unload():将LoRA增量权重注入基础模型的对应层,生成无适配器依赖的完整模型。
  • 同步保存Tokenizer:确保后续使用模型时,分词逻辑与训练阶段一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:27:43