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 上更新