使用PEFT库将原始模型与LoRA权重合并

使用PEFT库将原始模型与LoRA权重合并

步骤如下:
  • 基础模型加载:需保持与LoRA训练时相同的模型配置
  • merge_and_unload():该方法会执行权重合并并移除LoRA层
  • 保存格式:合并后的模型保存为标准HuggingFace格式,可直接用于推理
  • 代码如下:

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

def merge_and_save_model(base_model_path, lora_path, output_path):
    # 1. 加载基础模型和tokenizer
    print(f"Loading base model from {base_model_path}")
    base_model = AutoModelForCausalLM.from_pretrained(
        base_model_path,
        torch_dtype=torch.bfloat16,
        device_map="auto",
        trust_remote_code=True
    )
    tokenizer = AutoTokenizer.from_pretrained(
        base_model_path,
        trust_remote_code=True
    )

    # 2. 加载LoRA适配器
    print(f"Loading LoRA adapter from {lora_path}")
    lora_model = PeftModel.from_pretrained(
        base_model,
        lora_path,
        torch_dtype=torch.float16
    )

    # 3. 合并权重并卸载适配器
    print("Merging LoRA weights with base model")
    merged_model = lora_model.merge_and_unload()

    # 4. 保存合并后的模型
    print(f"Saving merged model to {output_path}")
    merged_model.save_pretrained(output_path)
    tokenizer.save_pretrained(output_path)
    print("Merge completed successfully!")

# 使用示例
if __name__ == "__main__":
    merge_and_save_model(
        base_model_path= 基础模型路径
        lora_path= lora训练后的权重
        output_path= 合并后模型的输出路径
    )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为啥全要学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值