PEFT 文件

C3A: 透過迴圈卷積實現引數高效微調

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

C3A: 透過迴圈卷積實現引數高效微調

C3A 是一種引數高效的微調技術,它利用迴圈卷積在合理的資源限制內實現高秩適應。

請注意,你應該為 C3A 使用比其他方法大得多的學習率 (LR)。例如,1e-1 的學習率是 C3A 的一個良好起點。此外,應使用小得多的權重衰減。你可以參考 method_comparison 檔案夾了解更多詳情。

對於 block_size,它會影響可調引數和效能。作為開始,你可以選擇一個接近 $\frac{\sqrt{d_1\times d_2}}{r}$ 的 $\mathrm{gcd}(d_1,d_2)$,其中 $r$ 是你將為此任務使用的 LoRA 秩。

C3A 目前有以下限制:

  • 僅支援 `nn.Linear` 層。
  • 不支援量化層。
  • 塊大小應該是目標層輸入和輸出大小的公約數。

如果這些限制不適用於你的用例,請考慮使用其他方法。

論文摘要如下:

低秩適應 (LoRA) 因其在微調大型基礎模型方面的應用而廣受歡迎,它利用低秩矩陣 $\mathbf{A}$ 和 $\mathbf{B}$ 來表示權重變化(即 $\Delta \mathbf{W} = \mathbf{B} \mathbf{A}$)。該方法透過將 $\mathbf{A}$ 和 $\mathbf{B}$ 與啟用值依次相乘,減少了可訓練引數,並減輕了與完整增量矩陣相關的大量記憶體消耗。儘管取得了成功,但其固有的低秩特性可能會限制其效能。雖然已經提出了幾種變體來解決這個問題,但它們往往忽略了 LoRA 帶來的關鍵計算和記憶體效率。在本文中,我們提出了迴圈卷積適應 (C3A),它不僅以增強的效能實現了高秩適應,而且在計算能力和記憶體利用方面也表現出色。大量的實驗表明,C3A 在各種微調任務中始終優於 LoRA 及其變體。

C3AConfig

class peft.C3AConfig

< >

( 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 block_size: int = 256 target_modules: Optional[Union[list[str], str]] = None bias: str = 'none' modules_to_save: Optional[list[str]] = None layers_to_transform: Optional[Union[list[int], int]] = None layers_pattern: Optional[Union[list[str], str]] = None block_size_pattern: Optional[dict] = <factory> init_weights: Optional[Union[bool, Literal['gaussian', 'kaiming_uniform', 'xavier_uniform']]] = 'xavier_uniform' )

引數

  • block_size (int) — C3A 的塊大小,必須能被目標層的輸入大小和輸出大小整除。如果你不知道該使用什麼塊大小,請將其設定為目標層所有輸入和輸出大小的最大公約數。增加此值將導致引數減少。
  • target_modules (Union[list[str],str]) — 應用 C3A 的模組名稱。
  • bias (str) — C3A 的偏置型別。可以是 ‘none’、‘all’ 或 ‘c3a_only’。如果為 ‘all’ 或 ‘c3a_only’,則相應的偏置將在訓練期間更新。請注意,這意味著即使停用介面卡,模型也不會產生與未經適應的基礎模型相同的輸出。
  • modules_to_save (list[str]) — 除了 C3A 層之外,需要設定為可訓練並儲存在最終檢查點中的模組列表。
  • layers_to_transform (Union[list[int],int]) — 要轉換的層索引,如果指定此引數,它將在該列表中指定的層索引上應用 C3A。如果傳入單個整數,它將在該索引的層上應用 C3A。
  • layers_pattern (str) — 層模式名稱,僅當 `layers_to_transform` 不為 `None` 且層模式不在常見層模式中時使用。
  • block_size_pattern (dict) — 從層名稱或正則表示式到與預設指定值不同的 block_size 的對映。例如,`{"model.decoder.layers.0.encoder_attn.k_proj": 1280}`。
  • init_weights (Union[bool, Literal["gaussian", "kaiming_uniform", "xavier_uniform"]]) — C3A 權重的初始化。如果權重應初始化為常用分佈,則將其設定為 False。如果權重應初始化為零,則將其設定為 True。

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

C3AModel

class peft.C3AModel

< >

( 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 (C3AConfig) — C3A 模型的配置。
  • adapter_name (str) — 介面卡的名稱,預設為 `"default"`。

返回

torch.nn.Module

C3A 模型。

從預訓練的 transformers 模型建立 C3A 模型。

該方法在 [待辦] 中有詳細描述。

屬性:

  • model (PreTrainedModel) — 需要被適配的模型。
  • peft_config (C3AConfig): C3A 模型的配置。

disable_adapter_layers

< >

( )

停用所有介面卡。

停用所有介面卡後,模型輸出對應於基礎模型的輸出。

enable_adapter_layers

< >

( )

啟用所有介面卡。

如果您之前停用了所有介面卡並希望重新啟用它們,請呼叫此函式。

merge_and_unload

< >

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

引數

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

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

set_adapter

< >

( adapter_name: str | list[str] )

引數

  • adapter_name (str or list[str]) — 要啟用的介面卡名稱。

設定活動的介面卡。

unload

< >

( )

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

< > 在 GitHub 上更新

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