层归一化调优
层归一化调优(LN Tuning)是一种 PEFT 方法,仅对模型中的层归一化层参数进行微调。该论文测试了该方法在大语言模型上的性能,结果表明,该方法能够以显著减少可训练参数数量和 GPU 内存使用量的代价,实现强大的性能。然而,该方法并不局限于语言模型,可以应用于任何使用层归一化层的模型。在本实现中,默认情况下模型内所有层归一化层都将进行微调,但它可以用于针对其他层类型,例如 MLP
或 Attention
层,这可以通过在 LNTuningConfig
中指定 target_modules
来实现。
论文摘要如下:
本文介绍了一种将大型语言模型(LLM)转换为多模态大型语言模型(MLLM)的高效策略。通过将这种转换概念化为领域自适应过程,即从文本理解过渡到拥抱多种模态,我们有趣地注意到,在每个注意力块中,调整层归一化就足以产生强大的性能。此外,在与其他微调方法(如全参数微调或 LoRA)进行基准测试时,其效率优势非常显著。例如,与 130 亿模型规模的 LoRA 相比,在五个多模态任务中,性能平均可以提高 20% 以上,同时可训练参数数量显着减少 41.9%,GPU 内存使用量减少 17.6%。除了这种层归一化策略之外,我们还展示了仅使用对话数据进行选择性微调可以进一步提高效率。除了这些经验结果,我们还提供了全面的分析来探索层归一化在将 LLM 适应多模态领域和提高模型表达能力方面的作用。
LNTuningConfig
class peft.LNTuningConfig
< source >( peft_type: Union = None auto_mapping: Optional = None base_model_name_or_path: Optional = None revision: Optional = None task_type: Union = None inference_mode: bool = False target_modules: Optional[Union[list[str], str]] = None modules_to_save: Optional[Union[list[str], str]] = None )
参数
这是用于存储 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
, defaults toFalse
) — 此选项对 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 模型的配置。