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

如何解决加载自定义微调LLaMA 3-8B模型时的OSError报错?

如何加载QLoRA微调后的LLaMA 3-8B模型?

问题背景

我是NLP模型实现领域的新手,已用QLoRA完成LLaMA 3-8B变体的微调并上传至HuggingFace,模型目录包含以下文件:

-  .gitattributes
- adapter_config.json
- adapter_model.safetensors
- special_tokens_map.json
- tokenizer.json
- tokenizer_config.json
- training_args.bin

尝试过的方法及报错

  1. 直接加载adapter目录的代码:
model_id_1 = "ferguso/llama-8b-pcl-v3"

tokenizer_1 = AutoTokenizer.from_pretrained(model_id_1)

quantization_config = BitsAndBytesConfig(
    load_in_8bit=True,
)

model_1 = AutoModelForCausalLM.from_pretrained(
    model_id_1,
    quantization_config=quantization_config,
)

报错:OSError: ferguso/llama-8b-pcl-v3 does not appear to have a file named config.json. Checkout 'https://huggingface.co/ferguso/llama-8b-pcl-v3/tree/main' for available files.

  1. 尝试从原始模型加载config后再加载:
original_model = "meta-llama/Meta-Llama-3-8B"
model_id_1 = "ferguso/llama-8b-pcl-v3"

tokenizer_1 = AutoTokenizer.from_pretrained(model_id_1)

quantization_config = BitsAndBytesConfig(
    load_in_8bit=True,
)

original_config = AutoConfig.from_pretrained(original_model)
original_config.save_pretrained(model_id_1)

model_1 = AutoModelForCausalLM.from_pretrained(
    model_id_1,
    quantization_config=quantization_config,
    config = original_config
)

报错:OSError: Error no file named pytorch_model.bin, model.safetensors, tf_model.h5, model.ckpt.index or flax_model.msgpack found in directory ferguso/llama-8b-pcl-v3.

解决方案

QLoRA微调仅保存了适配器(Adapter)权重,并未存储完整的模型权重,因此必须先加载原始LLaMA 3-8B基础模型,再加载适配器才能得到完整的微调后模型。正确代码如下:

from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
from peft import PeftModel, PeftConfig

# 基础模型与适配器模型ID
base_model_id = "meta-llama/Meta-Llama-3-8B"
adapter_model_id = "ferguso/llama-8b-pcl-v3"

# 定义量化配置(与微调时一致)
quantization_config = BitsAndBytesConfig(load_in_8bit=True)

# 加载基础模型
base_model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    quantization_config=quantization_config,
    device_map="auto"  # 自动分配设备
)

# 加载Tokenizer(若微调时修改过Tokenizer,可从适配器模型目录加载)
tokenizer = AutoTokenizer.from_pretrained(base_model_id)
# tokenizer = AutoTokenizer.from_pretrained(adapter_model_id)  # 微调后修改过Tokenizer时用这行

# 加载适配器并合并到基础模型
model = PeftModel.from_pretrained(base_model, adapter_model_id)

# (可选)若需要将适配器与基础模型合并并保存为完整模型
# model = model.merge_and_unload()
# model.save_pretrained("merged_llama_model")
# tokenizer.save_pretrained("merged_llama_model")

关键说明

  • 必须依赖peft库加载适配器,需确保已安装:pip install peft
  • 加载基础模型时需要访问meta-llama的原始模型,需提前完成HuggingFace的权限申请并登录(huggingface-cli login)
  • 适配器仅存储微调带来的权重增量,因此必须结合基础模型才能正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:50:55