PEFT 文档
LayerNorm 调优
并获得增强的文档体验
开始
LayerNorm 调优
LayerNorm 调优 (LN 调优) 是一种 PEFT 方法,它仅微调模型中 LayerNorm 层的参数。该论文已在大语言模型上测试了此方法的性能,结果表明,它可以以可训练参数数量和 GPU 内存使用量的显著减少来实现强大的性能。但是,该方法不限于语言模型,可以应用于任何使用 LayerNorm 层的模型。在此实现中,默认情况下,模型内部的所有 layernorm 层都经过微调,但它也可以用于针对其他层类型,例如 MLP
或 Attention
层,这可以通过在 LNTuningConfig
中指定 target_modules
来完成。
论文摘要如下
本文介绍了一种有效的策略,将大型语言模型 (LLM) 转换为多模态大型语言模型 (MLLM)。通过将这种转换概念化为领域自适应过程,即从文本理解过渡到接受多种模态,我们饶有兴致地注意到,在每个注意力模块中,调整 LayerNorm 足以产生强大的性能。此外,当与其他调优方法(如全参数微调或 LoRA)进行基准测试时,其在效率方面的优势是巨大的。例如,当与 13B 模型规模的 LoRA 相比时,在五个多模态任务中,性能平均可以提高 20% 以上,同时,可训练参数显著减少 41.9%,GPU 内存使用量减少 17.6%。除了这种 LayerNorm 策略之外,我们还展示了仅使用对话数据进行选择性调优可以进一步提高效率。除了这些经验结果之外,我们还提供了全面的分析,以探索 LayerNorm 在将 LLM 适应多模态领域和提高模型表达能力方面的作用。
LNTuningConfig
class peft.LNTuningConfig
< source >( 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
< source >( 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()
属性:
- model (PreTrainedModel) — 要适配的模型。
- peft_config (LNTuningConfig): Lora 模型的配置。