PEFT 文档

LayerNorm 调优

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始

LayerNorm 调优

LayerNorm 调优 (LN 调优) 是一种 PEFT 方法,它仅微调模型中 LayerNorm 层的参数。该论文已在大语言模型上测试了此方法的性能,结果表明,它可以以可训练参数数量和 GPU 内存使用量的显著减少来实现强大的性能。但是,该方法不限于语言模型,可以应用于任何使用 LayerNorm 层的模型。在此实现中,默认情况下,模型内部的所有 layernorm 层都经过微调,但它也可以用于针对其他层类型,例如 MLPAttention 层,这可以通过在 LNTuningConfig 中指定 target_modules 来完成。

论文摘要如下

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

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 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, 默认为 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 上更新