PEFT 文档
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 适应多模态领域和提高模型表达能力方面的作用。
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 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): Lora 模型的配置。