PEFT documentation
LayerNorm 调优
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
< source >( 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
< source >( 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 toFalse) — 此选项对 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): LN 调优模型的配置。