PEFT documentation

LayerNorm 调优

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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 适应多模态领域以及提升模型表达能力方面的作用。

基准测试概览

API

LNTuningConfig

类 peft.LNTuningConfig

< >

( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonemodules_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

类 peft.LNTuningModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → ‘torch.nn.Module’

参数

  • model (torch.nn.Module) — 要适配的模型。
  • config (LNTuningConfig) — LN 调优模型的配置。
  • 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()

属性:

Update on GitHub