PEFT 文件

微調器

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

微調器

微調器(或介面卡)是一個可以插入 `torch.nn.Module` 的模組。`BaseTuner` 是其他微調器的基類,為準備介面卡配置和用介面卡模組替換目標模組提供了共享的方法和屬性。`BaseTunerLayer` 是介面卡層的基類。它提供了管理介面卡的方法和屬性,例如啟用和停用介面卡。

BaseTuner

class peft.tuners.tuners_utils.BaseTuner

< >

( 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 )

引數

  • model (torch.nn.Module) — 將要附加介面卡微調器層的模型。
  • forward (Callable) — 模型的前向方法。
  • peft_config (Union[PeftConfig, dict[str, PeftConfig]]) — 介面卡配置物件,它應該是一個從 `str` 到 `PeftConfig` 物件的字典。也可以傳遞一個 PeftConfig 物件,此時將使用預設名稱 `adapter` 建立一個新的介面卡,或者建立一個以 `adapter_name` 為鍵、以該 peft 配置為值的新字典。
  • config (dict[str, Any]) — 模型配置物件,它應該是一個從 `str` 到 `Any` 物件的字典。
  • targeted_module_names (list[str]) — 實際被適配的模組名稱列表。可用於快速檢查 `config.target_modules` 是否被正確指定。
  • targeted_parameter_names (list[str]) — 實際被適配的引數名稱列表。可用於快速檢查 `config.target_parameters` 是否被正確指定。

一個基礎微調器模型,為所有可注入到 torch.nn.Module 中的微調器提供通用方法和屬性。

要新增一個新的 Tuner 類,需要重寫以下方法:

  • _prepare_adapter_config:一個私有方法,用於最終準備介面卡配置,例如在 `target_modules` 欄位缺失的情況下。
  • _create_and_replace:一個私有方法,用於建立並用介面卡模組替換目標模組。
  • _check_target_module_exists:一個私有輔助方法,用於檢查傳入模組的鍵名是否與 adapter_config 中的任何目標模組匹配。

最簡單的方法是檢視 `peft.tuners.lora.LoraModel` 類中的實現。

disable_adapter_layers

< >

( )

就地停用所有介面卡。

enable_adapter_layers

< >

( )

就地啟用所有介面卡

get_model_config

< >

( model: nn.Module )

引數

  • model (nn.Module) — 從中獲取配置的模型。
  • default (dict|None, *可選*) —:當模型沒有 config 屬性時返回的值。

此方法以字典形式從模型中獲取配置。如果模型沒有 config 屬性,則此方法返回一個預設配置。

inject_adapter

< >

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

引數

  • model (nn.Module) — 要被微調的模型。
  • adapter_name (str) — 介面卡名稱。
  • autocast_adapter_dtype (bool, *可選*) — 是否自動轉換介面卡的資料型別。預設為 `True`。
  • low_cpu_mem_usage (bool, `可選`, 預設為 `False`) — 在元裝置上建立空的介面卡權重。有助於加快載入過程。
  • state_dict (dict, *可選*, 預設為 `None`) — 如果在此處傳遞了 state_dict,將根據 state_dict 的條目注入介面卡。當 PEFT 方法的確切 `target_modules` 未知時(例如,因為檢查點是在沒有元資料的情況下建立的),這可能很有用。請注意,state_dict 中的值不被使用,只使用鍵來確定應該被適配的正確層。

建立介面卡層並用介面卡層替換目標模組。如果傳遞了非提示詞微調的介面卡類,此方法將在底層由 `peft.mapping.get_peft_model` 呼叫。

相應的 PEFT 配置直接從 BaseTuner 類的 `peft_config` 屬性中檢索。

merge_adapter

< >

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

引數

  • adapter_names (list[str], *可選*) — 應被合併的介面卡名稱列表。如果為 `None`,所有活動的介面卡都將被合併。預設為 `None`。
  • safe_merge (bool, *可選*) — 如果為 `True`,合併操作將在原始權重的副本中執行,並在合併權重之前檢查是否存在 NaNs。如果你想檢查合併操作是否會產生 NaNs,這很有用。預設為 `False`。

此方法將介面卡層合併到基礎模型中。

合併介面卡可以加速前向傳播。介面卡權重的副本仍保留在記憶體中,這是取消合併介面卡所必需的。為了合併介面卡權重而不將其保留在記憶體中,請呼叫 `merge_and_unload`。

unmerge_adapter

< >

( )

此方法從基礎模型中取消所有已合併的介面卡層。

BaseTunerLayer

class peft.tuners.tuners_utils.BaseTunerLayer

< >

( )

引數

  • is_pluggable (bool, *可選*) — 介面卡層是否可以插入到任何 pytorch 模組中
  • active_adapters (Union[Liststr, str], *可選*) — 當前活動介面卡的名稱。

一個為所有微調器提供通用方法和屬性的微調器層混合類(mixin)。

delete_adapter

< >

( adapter_name: str )

引數

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

從層中刪除一個介面卡

此操作應在所有介面卡層上呼叫,否則會導致狀態不一致。

如果被刪除的介面卡是當前活動的介面卡,此方法還將設定一個新的活動介面卡。重要的是,新介面卡的選擇方式必須是確定性的,以確保在所有層上都選擇相同的介面卡。

enable_adapters

< >

( enabled: bool )

引數

  • enabled (bool) — True 表示啟用介面卡,False 表示停用介面卡

切換介面卡的啟用和停用狀態

負責為介面卡權重設定 requires_grad 標誌。

get_base_layer

< >

( )

(遞迴地)獲取 base_layer。

這對於微調器層包裝另一個微調器層的情況是必需的。

set_adapter

< >

( adapter_names: str | list[str] )

引數

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

設定活動的介面卡。

此外,此函式將把指定的介面卡設定為可訓練的(即 requires_grad=True)。如果不希望如此,請使用以下程式碼。

>>> for name, param in model_peft.named_parameters():
...     if ...:  # some check on name (ex. if 'lora' in name)
...         param.requires_grad = False
< > 在 GitHub 上更新

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