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 的典型数值
我可以直接帮你 判定现在该卡在哪一步,以及下一刀该砍哪。

浙公网安备 33010602011771号