混合适配器类型
通常,在 🤗 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。虽然顺序会影响输出,但没有本质上的“最佳”顺序,因此最好选择最快的顺序。