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

如何将LLM2Vec模型保存为HuggingFace PreTrainedModel对象?

解决LLM2Vec模型合并后保存为HuggingFace预训练模型的UnboundLocalError问题

问题背景

合并LLM2Vec的基础模型与PEFT适配器后,调用save_pretrained时触发UnboundLocalError,提示active_adapters未定义,环境版本为:

  • transformers==4.38.2
  • peft==0.10.0
  • accelerate==0.29.2

解决方案

方案1:调整依赖版本(推荐)

这个错误是transformers 4.38.x与peft 0.10.x的兼容bug,降级transformers到4.37.x或升级peft到0.11.x以上即可解决:

pip install transformers==4.37.2 peft==0.11.1 --upgrade

重新运行原代码,就能正常调用model.save_pretrained()完成保存。

方案2:手动绕开bug保存模型

如果不想调整版本,可以直接手动保存模型权重、配置和tokenizer,绕过transformers的peft集成模块bug:

import torch
from transformers import AutoTokenizer, AutoModel, AutoConfig
from peft import PeftModel

# 加载并合并模型(原代码不变)
tokenizer = AutoTokenizer.from_pretrained("McGill-NLP/LLM2Vec-Mistral-7B-Instruct-v2-mntp")
config = AutoConfig.from_pretrained("McGill-NLP/LLM2Vec-Mistral-7B-Instruct-v2-mntp", trust_remote_code=True)
model = AutoModel.from_pretrained(
    "McGill-NLP/LLM2Vec-Mistral-7B-Instruct-v2-mntp",
    trust_remote_code=True,
    config=config,
    torch_dtype=torch.bfloat16,
    device_map="cuda" if torch.cuda.is_available() else "cpu",
)
model = PeftModel.from_pretrained(model, "McGill-NLP/LLM2Vec-Mistral-7B-Instruct-v2-mntp")
model = model.merge_and_unload()

# 手动保存模型组件
save_path = "LLM2Vec-Mistral-7B-Instruct-v2-mnt-merged"
# 保存权重
torch.save(model.state_dict(), f"{save_path}/pytorch_model.bin")
# 保存配置文件
config.save_pretrained(save_path)
# 保存tokenizer
tokenizer.save_pretrained(save_path)

这样生成的文件结构和save_pretrained输出的完全一致,后续可以正常用AutoModel.from_pretrained加载。

原因说明

这个错误源于transformers的peft集成模块中active_adapters方法的逻辑漏洞:在特定版本组合下,变量active_adapters未初始化就被判断类型,导致引用错误。调整版本或绕开该方法的调用即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:07:34