PEFT 文件

Bone

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Bone

DiSHA: 維度分片適配(DiSHA)我們引入了維度分片適配(DiSHA),它擴充套件了 PEFT 的設計空間,預設解鎖了更低的內在秩和更快的收斂速度。基於 DiSHA,我們提出了一種名為塊仿射適配(Bone)的高效演算法結構和一種名為塊仿射變換適配(BAT)的非線性更新方法。

論文摘要如下:

低秩適配(LoRA)利用了大型語言模型(LLM)中權重更新的低內在秩特性,建立了一種引數高效微調(PEFT)正規化。然而,LoRA 存在收斂速度慢的問題。我們引入了維度分片適配(DiSHA),它擴充套件了 PEFT 的設計空間,預設解鎖了更低的內在秩和更快的收斂速度。在 DiSHA 的設計空間內,我們提出了塊仿射適配(Bone),這是一種計算高效的結構,兼具高效能和高效率。雖然某些 DiSHA 配置可能導致權重分片的共線更新,但我們透過塊仿射變換適配(BAT)—— 一種 DiSHA 的非線性變體 —— 解決了這個問題。BAT 透過將可訓練矩陣與原始權重分片以非線性方式結合來引入非線性,從而在不增加額外引數的情況下實現矩陣更新的非線性。實驗結果表明,在 DiSHA 框架下,Bone 在自然語言生成(NLG)和自然語言理解(NLU)任務中均持續優於 LoRA 變體,並且計算效率顯著提高。進一步的分析表明,BAT 透過其非線性設計增強了模型的能力。

BoneConfig

class peft.BoneConfig

< >

( 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 r: int = 64 target_modules: Optional[Union[list[str], str]] = None exclude_modules: Optional[Union[list[str], str]] = None init_weights: bool | Literal['bat'] = True layers_to_transform: Optional[Union[list[int], int]] = None layers_pattern: Optional[str] = None bias: str = 'none' modules_to_save: Optional[list[str]] = None )

引數

  • r (int) — Bone 在不同層上的秩。最好將“r”設定為偶數;否則,預設的初始化方法將不起作用。
  • target_modules (Optional[Union[List[str], str]]) — 應用介面卡的模組名稱。如果指定此引數,只有名稱匹配的模組才會被替換。當傳入字串時,將執行正則表示式匹配。當傳入字串列表時,將執行精確匹配或檢查模組名稱是否以任何傳入的字串結尾。如果此引數指定為 ‘all-linear’,則會選擇所有線性模組,但不包括輸出層。如果未指定,將根據模型架構選擇模組。如果架構未知,將引發錯誤 —— 這種情況下,您應手動指定目標模組。
  • exclude_modules (Optional[Union[List[str], str]]) — 不應用介面卡的模組名稱。當傳入字串時,將執行正則表示式匹配。當傳入字串列表時,將執行精確匹配或檢查模組名稱是否以任何傳入的字串結尾。
  • init_weights (bool | Literal[“bat”]) — 不同的初始化對應不同的 Bone 變體。預設情況下,設定 True 使用 Bone 結構,而 “bat” 選擇 Bat 結構。
  • layers_to_transform (Union[List[int], int]) — 要轉換的層索引。如果傳入一個整數列表,它將把介面卡應用於此列表中指定的層索引。如果傳入一個整數,它將在該索引的層上應用轉換。
  • layers_pattern (str) — 層模式名稱,僅當 layers_to_transform 不為 None 時使用。
  • modules_to_save (List[str]) — 除了介面卡層之外,需要設定為可訓練並儲存在最終檢查點中的模組列表。

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

BoneModel

class peft.BoneModel

< >

( 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 (BoneConfig) — Bone 模型的配置。
  • adapter_name (str) — 介面卡的名稱,預設為 "default"
  • low_cpu_mem_usage (bool, 可選, 預設為 False) — 在元裝置上建立空的介面卡權重。有助於加快載入過程。

返回

torch.nn.Module

Bone 模型。

從預訓練模型建立豪斯霍爾德反射適配(Bone)模型。該方法在 https://huggingface.co/papers/2409.15371 中有描述。

示例

>>> from diffusers import StableDiffusionPipeline
>>> from peft import BoneModel, BoneConfig

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

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

屬性:

  • model (~torch.nn.Module) — 將要被適配的模型。
  • peft_config (BoneConfig):Bone 模型的配置。

delete_adapter

< >

( adapter_name: str )

引數

  • adapter_name (str) — 要刪除的介面卡名稱。

刪除一個現有的介面卡。

merge_and_unload

< >

( progressbar: bool = False safe_merge: bool = False adapter_names: typing.Optional[list[str]] = None )

引數

  • progressbar (bool) — 是否顯示錶示解除安裝和合並過程的進度條
  • safe_merge (bool) — 是否啟用安全合併檢查,以檢查介面卡權重中是否存在潛在的 Nan 值
  • adapter_names (List[str], 可選) — 應該被合併的介面卡名稱列表。如果為 None,所有活動的介面卡都將被合併。預設為 None

此方法將 Bone 層合併到基礎模型中。如果有人想將基礎模型用作獨立模型,則需要此方法。

unload

< >

( )

透過移除所有 bone 模組而不進行合併,恢復基礎模型。這會返回原始的基礎模型。

< > 在 GitHub 上更新

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