PEFT 文档

层归一化调优

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始

层归一化调优

层归一化调优(LN Tuning)是一种 PEFT 方法,仅对模型中的层归一化层参数进行微调。该论文测试了该方法在大语言模型上的性能,结果表明,该方法能够以显著减少可训练参数数量和 GPU 内存使用量的代价,实现强大的性能。然而,该方法并不局限于语言模型,可以应用于任何使用层归一化层的模型。在本实现中,默认情况下模型内所有层归一化层都将进行微调,但它可以用于针对其他层类型,例如 MLPAttention 层,这可以通过在 LNTuningConfig 中指定 target_modules 来实现。

论文摘要如下:

本文介绍了一种将大型语言模型(LLM)转换为多模态大型语言模型(MLLM)的高效策略。通过将这种转换概念化为领域自适应过程,即从文本理解过渡到拥抱多种模态,我们有趣地注意到,在每个注意力块中,调整层归一化就足以产生强大的性能。此外,在与其他微调方法(如全参数微调或 LoRA)进行基准测试时,其效率优势非常显著。例如,与 130 亿模型规模的 LoRA 相比,在五个多模态任务中,性能平均可以提高 20% 以上,同时可训练参数数量显着减少 41.9%,GPU 内存使用量减少 17.6%。除了这种层归一化策略之外,我们还展示了仅使用对话数据进行选择性微调可以进一步提高效率。除了这些经验结果,我们还提供了全面的分析来探索层归一化在将 LLM 适应多模态领域和提高模型表达能力方面的作用。

LNTuningConfig

class peft.LNTuningConfig

< >

( peft_type: Union = None auto_mapping: Optional = None base_model_name_or_path: Optional = None revision: Optional = None task_type: Union = None inference_mode: bool = False target_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.’。如果没有指定,将根据模型架构选择模块。如果未知架构,将引发错误 - 在这种情况下,您应该手动指定目标模块。
  • modules_to_save (Optional[Union[List[str], str]]) — 要设置为可训练并在最终检查点中保存的模块列表。例如,在序列分类或令牌分类任务中,最后一层 classifier/score 是随机初始化的,因此需要可训练并保存。

这是用于存储 LNTuningModel 配置的配置类。

LNTuningModel

class peft.LNTuningModel

< >

( model config adapter_name low_cpu_mem_usage: bool = False ) ‘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://arxiv.org/abs/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()

属性:

disable_adapter_layers

< >

( )

禁用所有适配器。

禁用所有适配器时,模型输出对应于基础模型的输出。

enable_adapter_layers

< >

( )

启用所有适配器。

如果您之前禁用了所有适配器,并且想要重新启用它们,请调用此方法。

< > 在 GitHub 上更新