LoRA微调 来自huggingface官方 抱抱脸

洛拉 https://huggingface.co/docs/peft/conceptual_guides/lora

 

本概念指南简要概述了LoRA,这种技术可以加速大型模型的微调,同时消耗更少的内存。

为了让微调更加高效,LoRA 的做法是通过低秩分解用两个较小的矩阵(称为更新矩阵)来表示权重更新。可以训练这些新矩阵以适应新数据,同时保持较低的更改总数。原始权重矩阵保持冻结状态,不会接受任何进一步的调整。为了产生最终结果,将原始权重和调整后的权重相结合。

这种方法有很多优点:

  • LoRA 通过大幅减少可训练参数的数量,使微调更加高效。
  • 原始预训练权重保持冻结状态,这意味着您可以拥有多个轻量级便携式 LoRA 模型,用于在其之上构建的各种下游任务。
  • LoRA 与许多其他参数有效的方法正交,并且可以与其中许多方法组合。 LoRA is orthogonal to many other parameter-efficient methods
  • 使用 LoRA 微调的模型的性能与完全微调的模型的性能相当。
  • LoRA 不会增加任何推理延迟,因为适配器权重可以与基本模型合并。

原则上,LoRA 可以应用于神经网络中权重矩阵的任何子集,以减少可训练参数的数量。然而,为了简单性和进一步的参数效率,在 Transformer 模型中,LoRA 通常仅应用于注意力块。rLoRA 模型中可训练参数的数量取决于低秩更新矩阵的大小,而低秩更新矩阵的大小主要由原始权重矩阵的秩和形状决定。

PEFT中常见的LoRA参数

与 PEFT 支持的其他方法一样,要使用 LoRA 微调模型,您需要:

  1. 实例化基本模型。
  2. 创建一个配置 ( LoraConfig),在其中定义 LoRA 特定参数。
  3. 用 包裹基本模型get_peft_model()以获得可训练的PeftModel.
  4. PeftModel像平常训练基本模型一样训练。

LoraConfig允许您通过以下参数控制 LoRA 如何应用于基础模型:

  • r:更新矩阵的秩,以 表示int。较低的秩会导致较小的更新矩阵和较少的可训练参数。
  • target_modules:应用 LoRA 更新矩阵的模块(例如,注意力块)。
  • alphaLoRA 比例因子。LoRA scaling factor.
  • bias:指定是否bias应训练参数。可以是'none''all'或者'lora_only'
  • modules_to_save:除了 LoRA 层之外的模块列表,要设置为可训练并保存在最终检查点中。这些通常包括模型的自定义头,该头是为微调任务随机初始化的。
  • layers_to_transform:LoRA 转换的层列表。如果未指定,target_modules则变换中的所有图层。
  • layers_patterntarget_modules:如果layers_to_transform指定,则匹配 中图层名称的模式。默认情况下,PeftModel将查看公共层模式(layershblocks等),将其用于奇异和自定义模型。exotic and custom models

猜你喜欢

转载自blog.csdn.net/sinat_37574187/article/details/131568265
今日推荐