8. LlaMA Factory 库
介绍 LlaMA Factory 的基本参数与微调流程
一、基本参数
stage
微调阶段,可选以下类型:
pt(Pretraining):预训练阶段
sft(Supervised Fine-tuning):监督微调阶段
rm(Reward Modeling):奖励建模阶段
ppo(Proximal Policy Optimization):基于奖励的强化微调阶段
dpo(Direct Preference Optimization):偏好优化阶段
kto(Knowledge Transfer Optimization):知识迁移优化阶段
do_train
是否执行训练true 表示执行训练,false 表示跳过训练过程,仅用于推理或验证
finetuning_type
微调类型,可选以下模式:
full:全量微调,更新模型的所有参数
freeze:冻结大部分模型参数,仅更新特定层(如顶层全连接层)
lora(Low-Rank Adaptation):通过低秩矩阵更新模型,减少参数开销,适合高效微调场景
qlora(Quantized Low-Rank Adaptation):结合量化和低秩矩阵更新,进一步降低资源需求
二、调优方法参数
2.1 Freeze(冻结微调)
freeze_trainable_layers
int
必需
可训练层的数量正数表示最后 n 层被设置为可训练的,负数表示前 n 层被设置为可训练的默认值为 2
freeze_trainable_modules
str
必需
可训练层的名称使用 all 来指定所有模块默认值为 all
freeze_extra_modules
str
非必需
除了隐藏层外可以被训练的模块名称,被指定的模块将会被设置为可训练的使用逗号分隔多个模块默认值为 None
2.2 LoRA
lora_alpha
int
非必需
LoRA 的缩放系数,用于平衡模型的学习率和训练稳定性一般情况下为lora_rank*2, 默认值为None
lora_dropout
float
必需
LoRA 中权重随机丢弃的概率,防止过拟合,通常在 0 和 0.1 之间选择默认值为0
lora_rank
int
必需
LoRA 微调的本征维数r,r越大可训练的参数越多默认值为8
lora_target
str
必需
应用 LoRA 方法的模块名称使用逗号分隔多个模块,使用 all 指定所有模块默认值为 all可选如"q_proj" 和 "v_proj" ,这两者是 Transformer中的查询投影和键投影层,通常是注意力机制的核心部分
loraplus_lr_ratio
float
非必需
LoRA+中的学习率比例($λ=η_B/η_A$),其中${η_B}$和${η_A}$分别是适配层矩阵中$A$和$B$的学习率该值的理想取值与所选择的模型和任务有关默认值为None
loraplus_lr_embedding
float
非必需
LoRA+嵌入层的学习率,默认值为 1e-6
use_rslora
bool
必需
是否使用秩稳定缩放方法(Rank-Stabilized LoRA),默认值为False
use_dora
bool
必需
是否使用权重分解的 LoRA(Weight-Decomposed LoRA),默认值为False
pissa_init
bool
必需
是否初始化 PiSSA 适配器,默认值为False
pissa_iter
int
必需
PiSSA 中 FSVD 执行的迭代步数使用-1将其禁用,默认值为16
pissa_convert
bool
必需
是否将 PiSSA 适配器转换为正常的 LoRA 适配器,默认值为False
create_new_adapter
bool
必需
是否创建一个具有随机初始化权重的新适配器,默认值为False
additional_target
[str,]
非必需
除 LoRA 层之外设置为可训练并保存在最终检查点中的模块名称使用逗号分隔多个模块默认值为None
2.3 LoRA 变种
2.3.1 LoRA+
在 LoRA 中,适配器矩阵$A$和$B$的学习率相同
在 LoRA+中,可以通过设置
loraplus_lr_ratio来调整学习率比例适配器矩阵$A$的学习率${η_A}$即为优化器学习率,而适配器矩阵$B$的学习率${η_B}$为${λ\times η_A}$,其中$λ$为
loraplus_lr_ratio的值
2.3.2 rsLoRA
LoRA 通过添加低秩适配器进行微调,然而
lora_rank的增大往往会导致梯度塌陷,使得训练变得不稳定这使得在使用较大的lora_rank进行 LoRA 微调时较难取得令人满意的效果rsLoRA(Rank-Stabilized LoRA)通过修改缩放因子使得模型训练更加稳定
2.3.3 DoRA
DoRA(Weight-Decomposed Low-Rank Adaptation)提出:尽管 LoRA 大幅降低了推理成本,但这种方式取得的性能与全量微调之间仍有差距
DoRA 将权重矩阵分解为大小与单位方向矩阵的乘积,并进一步微调二者(对方向矩阵则进一步使用 LoRA 分解),从而实现 LoRA 与 Full Fine-tuning 之间的平衡
2.3.4 PiSSA
在 LoRA 中,适配器矩阵$A$由
kaiming_uniform初始化,而适配器矩阵$B$则全初始化为 0这导致一开始的输入并不会改变模型输出并且使得梯度较小,收敛较慢
PiSSA 通过奇异值分解直接分解原权重矩阵进行初始化,可以更快更好地收敛
2.3.5 QLoRA
pref_beta
表示偏好模型训练中的正则化强度,用于控制奖励模型(preference model)与目标模型预测之间的一致性权衡
小值(如 0.1)表示训练更倾向于遵循偏好标签(标注数据中的选择)
大值更注重保持模型输出的多样性,避免过于依赖偏好数据
pref_loss
定义偏好模型训练中使用的损失函数,用于优化模型根据用户或标注偏好的输出能力,可选以下值:
sigmoid:采用对数逻辑回归损失函数,通过 sigmoid 计算偏好得分,常用于偏好优化(如 DPO, Direct Preference Optimization)
orpo:Online Reward Preference Optimization,动态调整偏好奖励分布,适合频繁更新奖励模型的场景在线优化,更适合实时调整偏好分布
simpo:Similarity Preference Optimization,基于相似性进行偏好优化,通过最大化与标注偏好的相似性更新模型,适合复杂的多模态或嵌套偏好场景
2.4 Galore
GaLore,梯度低秩投影(Gradient Low-Rank Projection),使用 Galore 时,将finetuning_type设置为full
use_galore
bool
是否使用 GaLore 算法,默认值为 False
galore_target
str
应用 GaLore 的模块名称使用逗号分隔多个模块,使用 all 指定所有线性模块默认值为 all
galore_rank
int
GaLore 梯度的秩,默认值为 16
galore_update_interval
int
更新 GaLore 投影的步数间隔,默认值为 200
galore_scale
float
GaLore 的缩放系数,默认值为 0.25
galore_proj_type
Literal
GaLore 投影的类型,可选值有: std , reverse_std, right, left, full默认值为 std
galore_layerwise
bool
是否启用逐层更新以进一步节省内存,默认值为 False
2.5 BAdam
BAdam,一种内存高效的全参数优化算法,使用 BAdam 时,将finetuning_type设置为full, 且将pure_bf16设置为True
use_badam
bool
是否使用 BAdam 优化器,默认值为 False
badam_mode
Literal
BAdam 的使用模式,可选值为 layer 或 ratio,默认值为 layer
badam_start_block
Optional[int]
layer-wise BAdam 的起始块索引,默认值为 None
badam_switch_mode
Optional[Literal]
layer-wise BAdam 中块更新策略,可选值有: ascending, descending, random, fixed默认值为 ascending
badam_switch_interval
Optional[int]
layer-wise BAdam 中块更新步数间隔使用 -1 禁用块更新,默认值为 50
badam_update_ratio
float
ratio-wise BAdam 中的更新比例,默认值为 0.05
badam_mask_mode
Literal
BAdam 优化器的掩码模式,可选值为 adjacent 或 scatter,默认值为 adjacent
badam_verbose
int
BAdam 优化器的详细输出级别,0 表示无输出,1 表示输出块前缀,2 表示输出可训练参数默认值为 0
三、数据集参数
dataset
在 dataset_info.json 中预设的数据集名称,以 , 分隔启用多个数据集
template
数据处理模板设置为 llama3,表明按照适配 Llama 3 模型的格式预处理数据
cutoff_len
输入序列的最大长度2048 表示限制每条样本的最大 token 数
max_samples
数据集中的最大样本数量,设置为 1000,用于减少训练规模或调试
overwrite_cache
是否覆盖缓存的预处理数据,true 表示重新处理
preprocessing_num_workers
数据预处理的并行线程数,设置为 16,提高处理效率
四、输出参数
output_dir
-
保存训练输出(模型权重、日志等)的路径
logging_steps
10
每两次日志输出间的更新步数
save_steps
500
每两次断点保存间的更新步数
plot_loss
true
是否记录并绘制损失变化曲线true 表示开启
overwrite_output_dir
true
是否覆盖输出目录中的内容true 表示覆盖
五、训练参数
per_device_train_batch_size
1
每张 GPU 上的训练批量大小,影响梯度的估计质量较大的批量能提供更稳定的梯度,适合较大的学习率;较小的批量可能导致噪声较大小批量大小(例如 1)需要配合gradient_accumulation_steps才能等效于更大的批量
gradient_accumulation_steps
8
梯度累积步数,累积梯度可等效增大批量大小,影响模型的收敛性和泛化性能
learning_rate
2e-4
初始学习率,最关键的超参数之一,直接影响训练的稳定性和收敛性
num_train_epochs
3.0
训练总轮数,微调过程中,模型通常已经有良好的初始化,因此较少的轮数往往就足够
lr_scheduler_type
cosine
学习率调度策略,决定了学习率如何变化;cosine 表示采用余弦退火策略,能够有效降低后期的学习率,通常对大模型训练表现较好
warmup_ratio
0.1
学习率预热阶段的比例,预热阶段可以防止训练一开始因为学习率过高而导致的梯度爆炸;0.1表示前 10%的训练步数用于学习率预热
bf16
true
是否启用 bfloat16 混合精度训练,启用可减小内存占用并加速训练
ddp_timeout
180000000
分布式数据并行的超时时间,设置为非常大的值,确保分布式训练不会因为超时失败
加粗的参数为影响微调效果的重要参数
六、验证参数
val_size
0.1
验证集比例,0.1 表示训练数据中 10%用于验证
per_device_eval_batch_size
1
每张 GPU 上的验证批量大小
eval_strategy
steps
验证策略, steps表示每隔固定步数进行验证
eval_steps
500
验证间隔步数,与 save_steps 保持一致
Last updated
Was this helpful?