PEFT 文件

LoHa

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

LoHa

低秩哈達瑪積(LoHa)與 LoRA 類似,不同之處在於它用更多的低秩矩陣來近似大型權重矩陣,並使用哈達瑪積將它們組合起來。這種方法比 LoRA 的引數效率更高,並且能達到相當的效能。

論文摘要如下:

在這項工作中,我們為聯邦學習(FL)提出了一種通訊高效的引數化方法 FedPara,以克服頻繁模型上傳和下載帶來的負擔。我們的方法使用低秩權重後跟哈達瑪積來重新引數化層的權重引數。與傳統的低秩引數化相比,我們的 FedPara 方法不受低秩約束的限制,因此具有更大的容量。這一特性使其能夠在通訊成本比原始層模型低 3 到 10 倍的情況下達到相當的效能,這是傳統低秩方法無法實現的。透過與其他高效的聯邦學習最佳化器結合,我們方法的效率可以進一步提高。此外,我們將我們的方法擴充套件到一個個性化的聯邦學習應用 pFedPara,該應用將引數分為全域性和區域性兩部分。我們證明,pFedPara 在引數少於三倍的情況下,效能優於競爭對手的個性化聯邦學習方法。.

LoHaConfig

class peft.LoHaConfig

< >

( task_type: typing.Union[str, peft.utils.peft_types.TaskType, NoneType] = None peft_type: typing.Union[str, peft.utils.peft_types.PeftType, NoneType] = None auto_mapping: typing.Optional[dict] = None base_model_name_or_path: typing.Optional[str] = None revision: typing.Optional[str] = None inference_mode: bool = False rank_pattern: Optional[dict] = <factory> alpha_pattern: Optional[dict] = <factory> r: int = 8 alpha: int = 8 rank_dropout: float = 0.0 module_dropout: float = 0.0 use_effective_conv2d: bool = False target_modules: Optional[Union[list[str], str]] = None exclude_modules: Optional[Union[list[str], str]] = None init_weights: bool = True layers_to_transform: Optional[Union[list[int], int]] = None layers_pattern: Optional[Union[list[str], str]] = None modules_to_save: Optional[list[str]] = None )

引數

  • r (int) — LoHa 秩。
  • alpha (int) — LoHa 縮放的 alpha 引數。
  • rank_dropout (float) — 訓練期間秩維度的丟棄機率。
  • module_dropout (float) — 訓練期間停用 LoHa 模組的丟棄機率。
  • use_effective_conv2d (bool) — 對 ksize > 1 的 Conv2d 使用引數有效分解(來自 FedPara 論文的“命題 3”)。
  • target_modules (Optional[Union[List[str], str]]) — 要應用介面卡的模組名稱。如果指定,只有具有指定名稱的模組將被替換。當傳遞字串時,將執行正則表示式匹配。當傳遞字串列表時,將執行精確匹配,或者檢查模組名稱是否以任何傳遞的字串結尾。如果指定為“all-linear”,則選擇所有線性/Conv1D 模組,不包括輸出層。如果未指定,將根據模型架構選擇模組。如果架構未知,將引發錯誤——在這種情況下,您應手動指定目標模組。
  • exclude_modules (Optional[Union[List[str], str]]) — 不應用介面卡的模組名稱。當傳遞字串時,將執行正則表示式匹配。當傳遞字串列表時,將執行精確匹配,或者檢查模組名稱是否以任何傳遞的字串結尾。
  • init_weights (bool) — 是否執行介面卡權重的初始化。預設為 True,不建議傳遞 False
  • layers_to_transform (Union[List[int], int]) — 要轉換的層索引。如果傳遞一個整數列表,它將把介面卡應用到此列表中指定的層索引。如果傳遞單個整數,它將在此索引的層上應用轉換。
  • layers_pattern (Optional[Union[List[str], str]]) — 層模式名稱,僅當 layers_to_transform 不為 None 時使用。這應針對模型的 nn.ModuleList,通常稱為 'layers''h'
  • rank_pattern (dict) — 從層名稱或正則表示式到秩的對映,這些秩與 r 指定的預設秩不同。例如,{'^model.decoder.layers.0.encoder_attn.k_proj': 16}
  • alpha_pattern (dict) — 從層名稱或正則表示式到 alpha 的對映,這些 alpha 與 alpha 指定的預設 alpha 不同。例如,{'^model.decoder.layers.0.encoder_attn.k_proj': 16}
  • modules_to_save (Optional[List[str]]) — 除了介面卡層之外,需要設定為可訓練並在最終檢查點中儲存的模組列表。

這是用於儲存 LoHaModel 配置的配置類。

LoHaModel

class peft.LoHaModel

< >

( model peft_config: Union[PeftConfig, dict[str, PeftConfig]] adapter_name: str low_cpu_mem_usage: bool = False state_dict: Optional[dict[str, torch.Tensor]] = None ) torch.nn.Module

引數

  • model (torch.nn.Module) — 將要附加介面卡調諧器層的模型。
  • config (LoHaConfig) — LoHa 模型的配置。
  • adapter_name (str) — 介面卡名稱,預設為 "default"
  • low_cpu_mem_usage (bool, optional, 預設為 False) — 在元裝置上建立空的介面卡權重。有助於加快載入過程。

返回

torch.nn.Module

LoHa 模型。

從預訓練模型建立低秩哈達瑪積模型。該方法在 https://huggingface.co/papers/2108.06098 中有部分描述。當前實現大量借鑑了 https://github.com/KohakuBlueleaf/LyCORIS/blob/eb460098187f752a5d66406d3affade6f0a07ece/lycoris/modules/loha.py

示例

>>> from diffusers import StableDiffusionPipeline
>>> from peft import LoHaModel, LoHaConfig

>>> config_te = LoHaConfig(
...     r=8,
...     lora_alpha=32,
...     target_modules=["k_proj", "q_proj", "v_proj", "out_proj", "fc1", "fc2"],
...     rank_dropout=0.0,
...     module_dropout=0.0,
...     init_weights=True,
... )
>>> config_unet = LoHaConfig(
...     r=8,
...     lora_alpha=32,
...     target_modules=[
...         "proj_in",
...         "proj_out",
...         "to_k",
...         "to_q",
...         "to_v",
...         "to_out.0",
...         "ff.net.0.proj",
...         "ff.net.2",
...     ],
...     rank_dropout=0.0,
...     module_dropout=0.0,
...     init_weights=True,
...     use_effective_conv2d=True,
... )

>>> model = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
>>> model.text_encoder = LoHaModel(model.text_encoder, config_te, "default")
>>> model.unet = LoHaModel(model.unet, config_unet, "default")

屬性:

  • model (~torch.nn.Module) — 將要被適配的模型。
  • peft_config (LoHaConfig): LoHa 模型的配置。
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.