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

如何在Hugging Face Transformers中合并微调Adapter与预训练模型并推送至Hub

解决方案:Llama-2微调后模型合并与分别推送指南

目标1:合并预训练模型与Adapter并推送至Hugging Face Hub

要将预训练模型与Adapter权重合并为完整模型文件并推送,核心是通过merge_and_unload()方法把Adapter权重整合到主模型中,具体操作如下:

  1. 加载完整精度的预训练模型与Adapter
    注意:合并操作不能用8bit加载模型,必须加载完整精度版本:

    import torch
    from transformers import LlamaForCausalLM, LlamaTokenizer
    
    model_id = "./models_hf/7B"
    adapter_id = "./tmp/llama-output"
    
    tokenizer = LlamaTokenizer.from_pretrained(model_id)
    model = LlamaForCausalLM.from_pretrained(
        model_id,
        load_in_8bit=False,
        device_map='auto',
        torch_dtype=torch.float16
    )
    
    # 加载Adapter权重
    model.load_adapter(adapter_id)
    
  2. 合并权重并保存/推送
    调用merge_and_unload()完成权重整合,之后可选择本地备份或推送至Hub:

    # 合并Adapter与主模型权重
    model = model.merge_and_unload()
    
    # 可选:保存合并后的模型到本地
    model.save_pretrained("./merged-llama-2-7B")
    tokenizer.save_pretrained("./merged-llama-2-7B")
    
    # 推送至Hugging Face Hub
    model.push_to_hub("myrepo/llama-2-7B-ft-summarization")
    tokenizer.push_to_hub("myrepo/llama-2-7B-ft-summarization")
    

    合并后的模型结构与原始预训练模型一致,推送后可像普通大模型直接加载使用。

目标2:分别推送预训练模型与Adapter,并组合加载推理

步骤1:分别推送至Hub

推送预训练模型

直接将本地预训练模型推送到你的Hub仓库:

from transformers import LlamaForCausalLM, LlamaTokenizer

model_id = "./models_hf/7B"
hub_base_repo = "myrepo/llama-2-7B-base"

tokenizer = LlamaTokenizer.from_pretrained(model_id)
model = LlamaForCausalLM.from_pretrained(model_id)

tokenizer.push_to_hub(hub_base_repo)
model.push_to_hub(hub_base_repo)

推送Adapter权重

借助PEFT库将Adapter推送到独立的Hub仓库:

from peft import PeftModel
from transformers import LlamaForCausalLM

model_id = "./models_hf/7B"
adapter_id = "./tmp/llama-output"
hub_adapter_repo = "myrepo/llama-2-7B-summarization-adapter"

# 加载预训练模型与Adapter
base_model = LlamaForCausalLM.from_pretrained(model_id)
peft_model = PeftModel.from_pretrained(base_model, adapter_id)

# 推送Adapter到Hub
peft_model.push_to_hub(hub_adapter_repo)

步骤2:从Hub组合加载并推理

用Hub仓库地址替换本地路径,即可实现和本地一致的组合加载:

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer
from peft import PeftModel

# Hub仓库地址
model_id = "myrepo/llama-2-7B-base"
adapter_id = "myrepo/llama-2-7B-summarization-adapter"

# 加载预训练模型与tokenizer
tokenizer = LlamaTokenizer.from_pretrained(model_id)
model = LlamaForCausalLM.from_pretrained(
    model_id,
    load_in_8bit=True,
    device_map='auto',
    torch_dtype=torch.float16
)

# 加载Adapter
model = PeftModel.from_pretrained(model, adapter_id)

# 推理示例
inputs = tokenizer("请输入你的测试文本", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=150)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:30:59