SFT 与 LoRA:数据、训练与验证最小闭环

上一篇把“该不该微调”讲清楚了,这一篇开始回答“真要调,怎么落地”。
目标不是把所有训练技巧讲完,而是先搭一套够用骨架:SFT 和 LoRA 分别在解决什么、数据集到底怎么组织、训练后如何判断是不是有效提升。

可以把它们看成同一条链路上的两个层次:

  • SFT(监督微调):训练目标与任务定义;
  • LoRA(低秩适配):参数更新方式与资源成本优化。

也就是说:

  • 你做的是 SFT 任务;
  • 可以选择用 LoRA 来实现这个 SFT,降低显存和训练成本。

因为它在“效果可接受”和“资源可承受”之间给了一个好平衡:

  • 只训练少量增量参数,显存压力小;
  • 训练速度更快,迭代频率更高;
  • 基座模型保持不变,便于做多任务适配和版本管理。

它的边界也要清楚:

  • 对一些高难度能力迁移,LoRA 不一定等价于全参数微调;
  • 数据质量差时,LoRA 也救不了任务效果。

很多微调失败不是训练器问题,而是数据问题。
一个够用的数据设计可以包含三层:

  • 样本结构层instruction + input + output(或等价 schema);
  • 覆盖层:主路径样本 + 边界样本 + 拒答样本;
  • 质量层:去重、去冲突、去低信息样本。

你至少要确保:

  • 标注口径一致;
  • 输出格式稳定;
  • 关键场景有足够覆盖,而不是只堆“看起来像”的例子。

不要训练完才想评估。先写清楚目标:

  • 是提升结构化输出正确率?
  • 还是提升领域术语一致性?
  • 或者降低幻觉、提高拒答质量?

不同目标,对应不同验证集设计。
这一步没做,后面很容易出现“loss 降了,但业务没变好”。

可以用这条流程起步:

  1. 准备训练集、验证集、回归题集(固定不动);
  2. 跑一版基线(不微调)拿到指标;
  3. 跑 LoRA-SFT 训练;
  4. 在同一套验证/回归题上对比;
  5. 只在显著提升场景进入灰度。

这套闭环的价值是:

  • 你能判断“有没有提升”;
  • 你能解释“提升发生在哪”;
  • 你能发现“副作用在哪”。

训练过程里最容易出现三种错觉:

  • loss 很好看,但线上结构化字段仍然错;
  • 某些主路径变好,但边界场景退化;
  • 术语一致性提升了,拒答策略却变弱了。

所以评估至少要拆成:

  • 任务正确率;
  • 格式合规率;
  • 安全与拒答表现。
  • SFT 定义任务目标,LoRA优化训练成本;
  • 数据质量和覆盖面决定上限;
  • 训练闭环必须绑定业务指标,而不是只盯 loss

把这套最小闭环跑通后,再去谈更大规模数据、更复杂训练技巧,收益会明显更稳定。