微调Llama 2后无法生成config.json,模型加载失败求助
解决Llama-2 4bit+LoRA微调后保存无config.json及加载报错问题
问题原因
使用4bit量化+LoRA方案时,trainer.model是PeftModel实例,仅包含LoRA适配器权重,其内置的config指向的是LoRA专属配置而非完整的基础模型配置。直接调用save_pretrained只会生成LoRA相关文件(如adapter_config.json、adapter_model.bin),不会自动导出基础模型的config.json;显式保存失败也是因为误操作了LoRA配置而非基础模型配置。
解决方案
1. 手动保存基础模型配置
训练完成后,从PeftModel关联的base_model中提取并保存完整的基础模型配置:
# 先保存LoRA适配器权重 trainer.model.save_pretrained('finetuned_llama') # 提取并保存基础模型的config trainer.model.base_model.config.save_pretrained('finetuned_llama')
执行后,finetuned_llama目录下会同时生成adapter_config.json、adapter_model.bin和config.json三个关键文件。
2. 正确加载微调模型
加载时不能直接用AutoModelForCausalLM读取LoRA目录,需先加载基础量化模型,再挂载LoRA适配器:
from peft import PeftModel from transformers import AutoModelForCausalLM, BitsAndBytesConfig import torch # 定义4bit量化配置(需与训练时一致) bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16 ) # 加载基础模型 base_model = AutoModelForCausalLM.from_pretrained( "meta-llama/Llama-2-7b-chat-hf", quantization_config=bnb_config, device_map="auto", trust_remote_code=True ) # 挂载LoRA适配器 finetuned_model = PeftModel.from_pretrained(base_model, "finetuned_llama")
若使用peft 0.5.0及以上版本,可简化为:
from peft import AutoPeftModelForCausalLM finetuned_model = AutoPeftModelForCausalLM.from_pretrained( "finetuned_llama", load_in_4bit=True, device_map="auto" )
3. 权限与目录排查
若显式保存config仍失败,检查目标目录是否存在、是否有写入权限,可提前创建目录:
import os os.makedirs('finetuned_llama', exist_ok=True) trainer.model.base_model.config.save_pretrained('finetuned_llama')
4. 可选:升级依赖版本
peft 0.4.0与accelerate 0.21.0的组合在4bit量化场景下存在部分配置保存的兼容性问题,升级peft至0.5.0+、accelerate至0.23.0+可避免此类问题,同时获得更稳定的LoRA保存/加载逻辑。
内容的提问来源于stack exchange,提问作者madsthaks
相关产品推荐
相关产品推荐

