LLaMA Factory常见微调方式

一、训练主参数1)学习率(2e-5)作用:每一步参数更新的步幅,决定“学得快不快、稳不稳”。调大:收敛更快,但更容易震荡、发散、跑飞(loss 上下乱跳)。调小:更稳、更不容易坏,但可能学不动/收敛太慢、效果不明显。经验(LoRA 常用范围):1e-5 ~ 5e-5 比较常见数据很“干净/一致”、任务很明确可以稍大;数

作者:user

一、训练主参数

1)学习率(2e-5)

作用:每一步参数更新的步幅,决定“学得快不快、稳不稳”。
调大:收敛更快,但更容易震荡、发散、跑飞(loss 上下乱跳)。
调小:更稳、更不容易坏,但可能学不动/收敛太慢、效果不明显。
经验(LoRA 常用范围):

  • 1e-5 ~ 5e-5 比较常见
  • 数据很“干净/一致”、任务很明确可以稍大;数据噪声大就稍小


2)训练轮数 Epoch(3.0)

作用:整个训练集被模型“完整看几遍”。
调大:更容易把任务学会,但更容易过拟合(训练越来越好,泛化变差)。
调小:不易过拟合,但可能没学够。

这里 3.0 对很多 SFT 来说是一个偏常规的起点。 如果你发现:训练 loss 很低但实际回答变差/更死板,往往是 epoch 过大或数据重复太多。


3)最大梯度范数(1.0)

作用:梯度裁剪(gradient clipping),防止梯度爆炸。
调大/关闭:训练可能更“猛”,但更容易突然发散。
调小:更稳,但可能限制学习速度。
经验:0.5 ~ 1.0 很常用,你设 1.0 很合理。



4)最大样本数(100000)

作用:从数据集中最多取多少条样本参与训练(相当于“数据上限开关”)。

  • 设小:训练更快,但覆盖不足
  • 设大:覆盖更全,但训练更久 注意:如果你数据本来就 >10万,设 100000 会截断;如果你数据 <10万,这个参数基本不影响。


5)计算类型(bf16)

作用:混合精度/数值类型。

  • bf16:动态范围更大,通常比 fp16 更稳(不容易 NaN/溢出),前提是硬件支持
  • fp16:更省,但更容易数值不稳 经验:能用 bf16 就优先 bf16。


二、批量、序列长度、验证集、学习率调度

6)截断长度(4096)

作用:单条输入+输出的最大 token 长度(超过就截断)。
调大:能学长文本、长对话、长上下文;但显存暴涨、速度变慢
调小:更省显存更快,但长样本会被截断,可能“学不到关键尾部信息”。
经验

  • 如果你的数据很多是“短问短答/结构化 JSON 输出”,2048 往往够
  • 只有当你确实有长输入(例如带很长候选课程列表、长画像、长规划)才需要 4096


7)批处理大小 batch_size(1)

作用:每步(每次 forward/backward)喂给模型多少条样本。

这里 batch_size=1,常见于大模型显存紧张的情况。



8)梯度累积(64)

作用:用多次小 batch 的梯度累加,模拟“大 batch”。
关键公式
有效批大小 = batch_size × 梯度累积 × GPU 数

这里:1 × 64 ×(假设 1 卡)= 64 的有效 batch

调大:训练更稳、梯度更平滑,但每次参数更新更慢(更新频率降低)。
调小:更新更频繁,可能更快学到东西,但更容易抖动。



9)验证集比例(0.05)

作用:拿出 5% 数据做验证,监控过拟合与泛化。

  • 太小:验证不稳定
  • 太大:训练数据变少 经验:3%~10%都可以;5%是很常见的折中。


10)学习率调节器(cosine)

作用:学习率随训练过程变化的策略。cosine(余弦退火)一般是:

前期相对高 → 后期逐步衰减到很低,让训练后期更稳定、更“收尾”。
适用:大多数 SFT/LoRA 都好用。



三、LoRA 参数

11)LoRA 秩 r(64)

作用:LoRA 低秩矩阵的容量(可以理解成“可训练的表达能力/参数量”)。

  • r 越大:可学的东西越多,效果潜力更高,但显存/耗时增加、也更易过拟合
  • r 越小:更省、更快,但可能学不动复杂任务 经验:
  • 常见 8/16/32/64
  • 做“课程推荐+学习规划+结构化输出”这种复合任务,r=64 属于偏强配置,合理但要注意过拟合与数据质量。


12)LoRA 缩放系数 alpha(128)

作用:控制 LoRA 更新对原模型的影响强度。

更准确地看,很多实现里 LoRA 的有效缩放大约与 alpha / r 相关。

这里 alpha=128, r=64 → alpha/r = 2(这是一个很常见、很稳的比例)。

  • 比例更大:LoRA 影响更强,学得更快但更容易不稳/过拟合
  • 比例更小:更保守、更稳但可能不够学


13)LoRA 随机丢弃 dropout(0.05)

作用:对 LoRA 分支做 dropout,抑制过拟合。

  • 调大:更抗过拟合,但学得慢、可能欠拟合
  • 调小/0:学得快,但更容易过拟合 经验:0.0~0.1 常见;设 0.05 很标准。


14)LoRA+ 学习率比例(16)

作用:LoRA+ 是一种训练技巧:通常会让 LoRA 的不同矩阵(常见是 A/B 或某些子矩阵)使用不同学习率,以改善收敛与效果。

这个“比例”一般表示:某一部分 LoRA 参数的学习率是另一部分的多少倍(不同实现细节略有差异,但核心就是分组学习率)。

  • 比例更大:某部分学得更快,可能提升适配速度,但也可能不稳
  • 比例更小:更稳更保守 经验:8、16 属于常见值。


15)“新建适配器”

作用:在已有 adapter 基础上再新建一个(常用于:一个底座模型上做多任务/多版本适配器管理)。

  • 如果是从零训练一个 LoRA,一般不必开
  • 如果要在“已有 LoRA”上继续做另一个任务/另一个版本,才会用到


16)使用 rslora(✅)

作用:rsLoRA(rank-stabilized LoRA)是为了让不同 rank 下训练更稳定、尺度更一致的一种改进。
直观效果:更稳、对超参更不敏感,很多情况下是“开了不亏”的。



17)使用 DoRA(✅)

作用:DoRA(Weight-Decomposed LoRA)把权重更新分解成“方向 + 幅度”等形式(不同论文表述不同),目标是让低秩适配更有效。
直观效果:有时能带来更好的质量/更高参数效率,但实现上稍复杂,训练/推理开销可能略增(取决于框架实现)。

这里 rsLoRA 和 DoRA 都勾了: 如果你发现训练很慢/不稳定/效果忽高忽低,建议你做一次对比实验:
  • 只开 rsLoRA(关 DoRA)
  • 或只开 DoRA(关 rsLoRA) 看哪个更稳定、更符合你的数据分布。


18)使用 PiSSA(未勾)

作用:PiSSA 是另一类初始化/分解相关方法(用于提升 LoRA 训练起点/效率)。

你不勾它也完全没问题,属于“可选增强”。



19)LoRA 作用模块(q_proj,k_proj,v_proj,o_proj,up_proj,down_proj,gate_proj)

作用:决定 LoRA 加在哪些层上。现在选的是:

  • 注意力:q/k/v/o
  • MLP:up/down/gate 这属于**“覆盖面很全”**的配置:能力强,但训练更慢、显存更高、也更容易过拟合。

经验选择

  • 如果你追求效果、数据量足:你现在这样选可以
  • 如果你想提速省显存:常见简化是只打 q_proj, v_proj(很多任务就够用了)
  • 如果你的任务更偏“格式/风格/指令遵循”:通常 attention 上 LoRA 就很有效;如果要学“内容推理/复杂规划”,MLP 的 LoRA 也更重要