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 上更新