Lora 微调流程

【流程-总结】
结构先定(r/target)
动力后调(lr)
自由度控(dropout)
强度校准(α)
梯度异常,先砍 lr,不动 r

下面我给你一套完整、工程可落地的 LoRA 微调流程,不是博客式概念,而是你可以按步骤执行、按指标做判断、按信号切换动作的版本;并且我会明确加入“梯度爆炸/异常”的判断与处置

你可以把它当成 LoRA 微调 SOP(Standard Operating Procedure)


一、整体流程总览(先看全图)

0️⃣ 数据 &任务确认
1️⃣ 结构设计(r / target_modules)
2️⃣ 基线训练配置(冻结)
3️⃣ 学习率搜索(lr sweep)
4️⃣ 过拟合控制(dropout)
5️⃣ 强度校准(lora_alpha)
6️⃣ 稳定性检查(梯度 / entropy)
7️⃣ 结构回溯(是否要改 r / target)
8️⃣ 最终长跑 & 保存

二、Step 0:数据 & 任务确认(非常关键,很多人跳过)

在调任何参数前,先回答这 5 个问题:

问题 影响
数据量(<5k / 5–50k / >50k) lr、dropout
输出是否模板化 是否秒收敛
单样本平均 token lr 上限
是否单一风格 α 上限
是否需要推理能力 r 上限

📌 如果数据 < 5k 且高度模板化
→ 默认你会遇到 train/loss 快速 → 0


三、Step 1:结构设计(一次性,别纠结)

🎯 目标

确定 LoRA 的结构上限,不是追求最优。

推荐起点(90% 场景适用)

target_modules:
  - q_proj
  - v_proj

r: 8

📌 原则:

  • 不碰 MLP,除非生成能力明显不足
  • r 不超过 16 作为起点

四、Step 2:基线训练配置(全部冻结)

你要有一个可重复、稳定的 baseline

learning_rate: 1e-4      # 先占位,后面会调
lora_alpha: r * 2        # 安全值
lora_dropout: 0.05

optimizer: adamw
scheduler: constant 或 cosine
max_grad_norm: 1.0       # 重要:梯度裁剪

⚠️ max_grad_norm 一定要开,这是第一道防梯度爆炸保险。


五、Step 3:学习率搜索(第一调参旋钮)

🎯 目标

找到「不秒收敛、不发散」的 lr。

操作方式

只跑 500–1000 step,不要跑全程。

lr ∈ {5e-5, 1e-4, 2e-4}

📊 判断指标(核心)

1️⃣ train/loss

  • ❌ 200 step 内 → 0 → lr 太大
  • ❌ 基本不动 → lr 太小
  • ✅ 平滑下降 → 合格

2️⃣ grad_norm(梯度稳定性)

这是你问的重点

grad_norm 现象 含义
突然 >10 梯度爆炸前兆
锯齿状大幅震荡 lr 偏大
长期 ≈0 学不动 / 过拟合

📌 经验阈值(LoRA):

正常:0.1 – 5
危险:>10
爆炸:>50(通常 loss 会 NaN)

🚨 梯度爆炸处置(立刻执行)

优先级 1:lr × 0.5
优先级 2:检查 max_grad_norm 是否生效
优先级 3:lora_alpha ↓

不要第一步就减 r


六、Step 4:lora_dropout(过拟合控制)

🎯 目标

防止:

  • loss 虚假很好
  • entropy 塌缩
  • 输出模板化

调参区间

0.0 → 极易过拟合
0.05 → 默认
0.1
0.2 → 救火

📊 判断指标

train/entropy(非常关键)

entropy 含义
快速 → 很低 过拟合
稳定缓慢下降 正常
几乎不变 学不动

👉 entropy 低 + loss 低 = 假学习


七、Step 5:lora_alpha(LoRA 强度校准)

🎯 目标

控制 LoRA 注入信号强度。

调整策略(在 lr、dropout 稳定后)

以 r=8 为例:

α = 8   → 极弱
α = 16  → 默认
α = 32  → 强
α = 64  → 高风险

📊 判断信号

现象 动作
loss 降得慢 α ↑
loss 很低但输出僵 α ↓
grad_norm 变大 α ↓

📌 α 过大是“隐性梯度放大器”


八、Step 6:稳定性 & 梯度异常复查(你问的重点)

必须同时观察 4 个指标

指标 正常 危险
loss 平滑 NaN / 剧烈震荡
grad_norm <5 >10
entropy 缓慢下降 快速塌缩
lr 稳定 scheduler 错误

🚨 梯度爆炸判断清单(直接用)

满足任一:

  • grad_norm 连续几 step >10
  • loss 突然跳高 / NaN
  • 权重更新异常大(wandb spikes)

👉 立即 stop run


九、Step 7:是否需要回到 r / target_modules?

只有在下面情况同时满足时:

  • lr ≤ 5e-5
  • dropout ≥ 0.1
  • α ≤ 2r
  • grad_norm 稳定
  • ❌ 任务仍然学不好

👉 才考虑:

  • r ↑(8 → 16)
  • 或 QV → QVK

十、Step 8:最终长跑训练

当你已经满足:

✅ loss 不秒收敛
✅ grad_norm 稳定
✅ entropy 不塌
✅ 输出不模板化

👉 才跑 full training steps,保存 checkpoint。


十一、给你一张「工程口诀卡」

结构先定(r/target)
动力后调(lr)
自由度控(dropout)
强度校准(α)
梯度异常,先砍 lr,不动 r


如果你愿意,下一步你可以把你现在的:

  • r / target_modules
  • lr / α / dropout
  • 数据规模
  • grad_norm 的典型数值

我可以直接帮你 判定现在该卡在哪一步,以及下一刀该砍哪。

posted @ 2026-02-06 11:08  向着朝阳  阅读(2)  评论(0)    收藏  举报