PEFT 文件

LayerNorm 微調

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

LayerNorm 微調

LayerNorm 微調(LN Tuning)是一種 PEFT 方法,它只對模型中 LayerNorm 層的引數進行微調。該論文測試了這種方法在大型語言模型上的效能,並表明它可以在顯著減少可訓練引數數量和 GPU 記憶體使用的情況下,取得強大的效能。然而,該方法不限於語言模型,可以應用於任何使用 LayerNorm 層的模型。在此實現中,預設情況下會對模型內所有 LayerNorm 層進行微調,但也可以用於針對其他層型別,如 `MLP` 或 `Attention` 層,這可以透過在 `LNTuningConfig` 中指定 `target_modules` 來完成。

論文摘要如下:

該論文介紹了一種將大型語言模型(LLMs)轉換為多模態大型語言模型(MLLMs)的高效策略。透過將這種轉換概念化為一個領域適應過程,即從文字理解過渡到擁抱多種模態,我們驚奇地注意到,在每個注意力塊內,僅微調 LayerNorm 就足以產生強大的效能。此外,與全引數微調或 LoRA 等其他微調方法相比,其在效率上的優勢是巨大的。例如,在 13B 模型規模上與 LoRA 相比,五個多模態任務的效能平均可提升超過 20%,同時可訓練引數減少 41.9%,GPU 記憶體使用量減少 17.6%。在 LayerNorm 策略的基礎上,我們展示了僅用對話資料進行選擇性微調可以進一步提高效率。除了這些實證結果,我們還提供了全面的分析,以探索 LayerNorm 在使 LLMs 適應多模態領域和提高模型表達能力方面的作用。

LNTuningConfig

class peft.LNTuningConfig

< >

( 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 target_modules: Optional[Union[list[str], str]] = None exclude_modules: Optional[Union[list[str], str]] = None modules_to_save: Optional[Union[list[str], str]] = None )

引數

  • target_modules (Optional[Union[List[str], str]]) — 要替換為 LNTuning 的模組名稱列表或模組名稱的正則表示式。例如,‘.decoder.’ 或 ‘.encoder.’。如果未指定,將根據模型架構選擇模組。如果架構未知,則會引發錯誤——在這種情況下,您應該手動指定目標模組。
  • exclude_modules (Optional[Union[List[str], str]]) — 不應用介面卡的模組名稱。當傳入字串時,將執行正則表示式匹配。當傳入字串列表時,將執行精確匹配,或者檢查模組名稱是否以任何傳入的字串結尾。
  • modules_to_save (Optional[Union[List[str], str]]) — 需要設定為可訓練並在最終檢查點中儲存的模組列表。例如,在序列分類或詞元分類任務中,最終的 classifier/score 層是隨機初始化的,因此需要是可訓練和儲存的。

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

LNTuningModel

class peft.LNTuningModel

< >

( 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 (LNTuningConfig) — Lora 模型的配置。
  • adapter_name (str) — 介面卡的名稱,預設為 "default"
  • low_cpu_mem_usage (bool, optional, defaults to False) — 此選項對 LN 微調沒有影響,但為了與其他 PEFT 方法保持一致而存在。

返回

‘torch.nn.Module’

適配後帶有 LayerNorm 微調的模型。

從預訓練的 Transformer 模型建立 LayerNorm 微調。

該方法的詳細描述見 https://huggingface.co/papers/2312.11420

示例

>>> from transformers import AutoModelForCausalLM
>>> from peft import get_peft_model, TaskType, LNTuningConfig

>>> peft_config = LNTuningConfig(
...     task_type=TaskType.CAUSAL_LM,
... )

>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
>>> model = get_peft_model(model, peft_config)
>>> model.print_trainable_parameters()

屬性:

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

disable_adapter_layers

< >

( )

停用所有介面卡。

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

enable_adapter_layers

< >

( )

啟用所有介面卡。

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

< > 在 GitHub 上更新

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