PEFT 文件
LayerNorm 微調
並獲得增強的文件體驗
開始使用
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 toFalse
) — 此選項對 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 模型的配置。