这是合并 LoRA 权重的正确方法吗?

Is this right way to merge LoRA weights?

提问人:Nukaccino 提问时间:11/16/2023 最后编辑:Nukaccino 更新时间:11/17/2023 访问量:144

问:

我使用带有 HuggingFace 库的 LoRA 对 RoBERTa 进行了微调,生成了多个 LoRA 文件。

我想在不更改原始模型的情况下合并这些 LoRA 权重.所以我写了如下代码。

from peft import (
    ...
    PeftModel,
    ...
)

from transformers import (
    ...
    RobertaForSequenceClassification
    ...
)


model = RobertaForSequenceClassification.from_pretrained("roberta-base")

# "lora-1" and "lora-2" are local directories.
model = PeftModel.from_pretrained(model, "lora-1")
model = model.merge_and_unload()

model = PeftModel.from_pretrained(model, "lora-2")
model = model.merge_and_unload()

代码正在工作,但有点可疑,因为我不知道具体是如何工作的。按名称猜测, 我想也许它将所有 LoRA 权重合并到基本模型的权重中,并使其成为最终的单个模型.但据我所知,这不是 LoRA 的工作方式.merge_and_unload()

总而言之,我想生产,而不是单一合并(对不起方程式文本,我没有足够的声誉来链接在线方程式 SVG!p(phi_0 + delta phi_1(theta_1) + delta phi_2(theta_2) + ... + delta phi_n(theta_n))p(phi_0)

我找不到比使用 .merge_and_unload()


编辑

我发现有关于它的描述......可惜我没有读过它。

merge_and_unload()

This method merges the LoRa layers into the base model. This is needed if someone wants to use the base model as a standalone model.

所以基本上使用绝对不是我想要的。merge_and_unload()

是否有其他选项可以合并 LoRA 权重?

任何建议将不胜感激。

PyTorch NLP 拥抱面变形金刚

评论


答:

0赞 Kinjal 11/17/2023 #1

也许这就是你要找的.您可以参考此文档此问题add_weighted_adapter

model.add_weighted_adapter(
        adapters=['lora-1', 'lora-2'],
        weights=[0.5, 0.5],
        adapter_name="combined",
        combination_type="svd",
    )