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

如何用Huggingface加载基于Llama的PEFT/LoRa微调模型?加载报错求助

问题描述

本地加载微调模型失败

执行代码:

model = AutoModelForCausalLM.from_pretrained("finetuned_model")

返回 Killed。

从Hub加载模型报错

执行以下代码:

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

peft_model_id = "lucas0/empath-llama-7b"
config = PeftConfig.from_pretrained(peft_model_id)
model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path, return_dict=True, load_in_8bit=True, device_map='auto')
tokenizer = AutoTokenizer.from_pretrained(cwd+"/tokenizer.model")

# Load the Lora model
model = PeftModel.from_pretrained(model, peft_model_id)

返回错误:

AttributeError: /home/ubuntu/empath/lora/venv/lib/python3.10/site-packages/bitsandbytes/libbitsandbytes_cpu.so: undefined symbol: cget_col_row_stats

模型微调背景

使用PEFT和LoRa微调decapoda-research/llama-7b-hf模型,核心流程代码如下:

模型初始化

model = AutoModelForCausalLM.from_pretrained(
"decapoda-research/llama-7b-hf",
torch_dtype=torch.float16,
device_map='auto',
)

Tokenizer设置

tokenizer = LlamaTokenizer(cwd+"/tokenizer.model")
tokenizer.pad_token = tokenizer.eos_token

LoRa配置与训练

from peft import LoraConfig, get_peft_model

config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)

model = get_peft_model(model, config)

data = pd.read_csv("my_csv.csv")
dataset = Dataset.from_pandas(data)
tokenized_dataset = dataset.map(lambda samples: tokenizer(samples["text"]))

trainer = transformers.Trainer(
    model=model,
    train_dataset=tokenized_dataset,
    args=transformers.TrainingArguments(
        per_device_train_batch_size=4,
        gradient_accumulation_steps=4,
        warmup_steps=100,
        max_steps=100,
        learning_rate=1e-3,
        fp16=True,
        logging_steps=1,
        output_dir='outputs',
    ),
    data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False)
)
model.config.use_cache = True  # silence the warnings. Please re-enable for inference!
trainer.train()

模型保存与推送

# 本地保存
trainer.save_model(cwd+"/finetuned_model")
print("saved trainer locally")

# 推送到Hub
model.push_to_hub("lucas0/empath-llama-7b", create_pr=1)

解决方案

一、本地加载Killed问题

Killed是内存/显存不足导致的:7B模型以float16加载需要约13GB显存,CPU加载则需要约26GB内存。解决方法:

  1. 启用8bit量化加载,大幅降低资源占用(仅需约7GB显存),正确加载LoRa模型的代码如下:
from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM, LlamaTokenizer

# 加载LoRa配置
config = PeftConfig.from_pretrained("finetuned_model")
# 加载基础模型并启用8bit量化
base_model = AutoModelForCausalLM.from_pretrained(
    config.base_model_name_or_path,
    load_in_8bit=True,
    device_map='auto',
    torch_dtype=torch.float16
)
# 加载LoRa增量权重
model = PeftModel.from_pretrained(base_model, "finetuned_model")
# 加载tokenizer
tokenizer = LlamaTokenizer(cwd+"/tokenizer.model")
tokenizer.pad_token = tokenizer.eos_token
  1. 优先使用GPU加载模型,若用CPU则确保机器有足够内存。

二、Hub加载的bitsandbytes错误

该错误由bitsandbytes版本不兼容或CPU环境支持不足导致,解决步骤:

  1. 重装兼容版本的bitsandbytes:
    • 若使用CUDA环境,安装对应CUDA版本的bitsandbytes(以CUDA 11.8为例):
      pip uninstall bitsandbytes -y
      pip install bitsandbytes==0.41.1 --index-url https://download.pytorch.org/whl/cu118
      
    • 若为纯CPU环境,安装CPU兼容分支:
      pip uninstall bitsandbytes -y
      pip install bitsandbytes-cpu
      
  2. 修正tokenizer加载逻辑:Llama tokenizer需用LlamaTokenizer而非AutoTokenizer加载,修改代码中tokenizer部分:
    tokenizer = LlamaTokenizer(cwd+"/tokenizer.model")
    tokenizer.pad_token = tokenizer.eos_token
    
  3. 确保PyTorch与bitsandbytes版本匹配(建议PyTorch 2.0+搭配bitsandbytes 0.40+)。

通用注意事项

  • LoRa仅保存增量权重,不能直接用AutoModelForCausalLM.from_pretrained加载LoRa保存的文件夹,必须先加载基础模型,再挂载LoRa权重。
  • 训练和加载时保持device_map、torch_dtype参数一致,避免数据类型不匹配报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:24:56