PEFT 文档

混合适配器类型

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

混合适配器类型

通常,在 🤗 PEFT 中混合使用不同的适配器类型是不可能的。您可以创建一个具有两个不同 LoRA 适配器的 PEFT 模型(它们可以具有不同的配置选项),但不能组合 LoRA 和 LoHa 适配器。然而,使用 PeftMixedModel,只要适配器类型兼容,就可以实现这一点。允许混合适配器类型的主要目的是为了组合训练好的适配器进行推理。虽然可以训练混合适配器模型,但这尚未经过测试,不建议这样做。

要将不同的适配器类型加载到 PEFT 模型中,请使用 PeftMixedModel 而不是 PeftModel

from peft import PeftMixedModel

base_model = ...  # load the base model, e.g. from transformers
# load first adapter, which will be called "default"
peft_model = PeftMixedModel.from_pretrained(base_model, <path_to_adapter1>)
peft_model.load_adapter(<path_to_adapter2>, adapter_name="other")
peft_model.set_adapter(["default", "other"])

需要使用 set_adapter() 方法来激活两个适配器,否则只有第一个适配器会处于活动状态。您可以通过重复调用 add_adapter() 来继续添加更多适配器。

PeftMixedModel 不支持保存和加载混合适配器。适配器应已预先训练好,并且每次加载模型都需要运行脚本。

提示

  • 并非所有适配器类型都可以组合。请参阅 peft.tuners.mixed.COMPATIBLE_TUNER_TYPES 以获取兼容类型列表。如果您尝试组合不兼容的适配器类型,将会引发错误。
  • 可以混合使用同一类型的多个适配器,这对于组合具有非常不同配置的适配器非常有用。
  • 如果您想要组合大量不同的适配器,最有效的方法是连续添加相同类型的适配器。例如,按 LoRA1、LoRA2、LoHa1、LoHa2 的顺序添加,而不是 LoRA1、LoHa1、LoRA2 和 LoHa2。虽然顺序可能会影响输出,但没有固有的最佳顺序,因此最好选择最快的一种。
< > 在 GitHub 上更新