LoraConfig()介绍
LoraConfig()
是peft
库中的一个配置类,用于设置大模型微调方法LoRA(Low-Rank Adaptation)
的相关参数。PEFT
库为各种参数高效的微调方法(如 LoRA)提供了封装,以减少微调大模型时的计算资源和存储需求。
LoraConfig()参数说明
1、task_type:
描述: 用来指定 LoRA 要适用于的任务类型。不同的任务类型会影响模型中的哪些部分应用 LoRA 以及如何配置 LoRA。根据不同的任务,LoRA 的配置方式可能会有所不同,特别是在模型的某些特定模块(如自注意力层)上。
可选值:
"CAUSAL_LM"
: 自回归语言模型(Causal Language Modeling)。适用于像 GPT 这样的自回归语言模型,这类模型通常在生成任务上使用。"SEQ_2_SEQ_LM"
: 序列到序列语言模型(Sequence-to-Sequence Language Modeling)。适用于像 T5 或 BART 这样的序列到序列模型,这类模型通常用于翻译、摘要生成等任务。"TOKEN_CLS"
: 标注任务(Token Classification)。适用于命名实体识别(NER)、词性标注等任务。"SEQ_CLS"
: 序列分类(Sequence Classification)。适用于句子分类、情感分析等任务。"QUESTION_ANSWERING"
: 问答任务(Question Answering)。适用于问答模型,如 SQuAD 等数据集中的任务。"OTHER"
: 适用于其他自定义任务,或者模型的任务类型不明确时。
2、target_modules:
- 描述: 指定应用 LoRA 的目标模型模块或层的名称。这些是模型中应用 LoRA 低秩分解的参数,通常是网络中的线性层(如
query
,value
矩阵)。 - **数据类型:**Union[List[str], str]
- 默认值:
None
- 典型值:
["query", "value"]
或类似参数,具体依赖于模型结构。
3、r(Rank Reduction Factor):
- 描述:LoRA 的低秩矩阵的秩(rank)。
r
是低秩矩阵的秩,表示将原始权重矩阵分解成两个更小的矩阵,其乘积近似原始权重矩阵。r
越小,模型的计算开销越低。 - 数据类型:
int
- 典型值:通常在 4 到 64 之间。
4、lora_alpha:
- 描述:缩放因子,用于缩放 LoRA 的输出。通常在 LoRA 层的输出会被
lora_alpha / r
缩放,用来平衡学习效率和模型收敛速度。 - 数据类型:
int
- 典型值:
r
的 2 到 32 倍之间。
5、lora_dropout:
- 描述:应用于 LoRA 层的 dropout 概率。这个参数用来防止过拟合,特别是在小数据集上训练时,使用 dropout 可以提高模型的泛化能力。
- 数据类型:
float
- 典型值:0.1 或者更低。
6、bias:
- **描述:**用于控制是否训练模型的偏置项(bias)。可以设置为
none
(不训练 bias)、all
(训练所有 bias)、或者lora_only
(仅对 LoRA 层的偏置项进行训练)。 - 数据类型:
str
- 典型值:
none
或lora_only
。
7、modules_to_save :
- 描述: 指定除了 LoRA 层之外,还需要保存哪些额外的模块。这通常用于微调时只保存 LoRA 层的权重,同时保存某些特殊的模块(例如全连接层)。
- 数据类型:
Optional[List[str]]
- 默认值:
None
- 典型值:
["classifier", "pooler"]
或类似参数。
8、init_lora_weights :
- 描述: 控制 LoRA 层的权重是否在初始化时进行随机初始化。如果设置为
True
,则会使用标准初始化方法;否则,将不进行初始化。 - 数据类型:
bool
- 默认值:
True
9、inference_mode :
- 描述: 如果设置为
True
,则模型只在推理阶段使用 LoRA。此模式下,LoRA 的权重会被冻结,不会进行训练。适用于将微调后的模型用于推理场景。 - 数据类型:
bool
- 默认值:
False
参数组合示例
下面是一个配置 LoRA 的例子,使用 LoRA 对自注意力层中的 query
和 value
矩阵进行低秩分解,并使用 dropout:
from peft import LoraConfig, TaskType
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM, # 微调模型为自回归模型
r=16, # LoRA 低秩分解的秩
lora_alpha=32, # LoRA 缩放因子
target_modules=["query", "value"], # 目标模块
lora_dropout=0.1, # Dropout 概率
bias="none", # 不训练 bias
modules_to_save=["classifier"], # 额外保存分类器模块
init_lora_weights=True, # 初始化 LoRA 层权重
inference_mode=False # 允许训练
)
参数总结
- r 和 lora_alpha 决定了 LoRA 的低秩分解程度及其影响范围。
- target_modules 决定了 LoRA 应用于哪些层,通常是模型的关键参数层。
- lora_dropout 和 bias 提供了额外的正则化和训练细节控制。
- modules_to_save 则可以灵活地控制哪些部分需要保存,确保推理时模型可以正确加载。
注意:
1、常用的参数就task_type、target_modules、inference_mode、r、lora_alpha、lora_dropout这些
2、按任务需求和算力配置r大小,r不是越大越好