← 返回题目列表

大模型微调中哪些超参数最关键?训练不稳定如何排查?

高频 中等 第 3 / 26 题 更新于 2026/09/18
微调超参数学习率Batch Size训练稳定性

简化版

微调最关键的超参数通常是学习率、有效 Batch Size、训练步数、序列长度、学习率调度和精度类型。训练不稳定要从数据与 Mask、数值精度、梯度、显存和分布式配置依次排查,不能只靠降低学习率碰运气。

详细版

重点参数及作用:

  • 学习率:过高会破坏已有能力或发散,过低则学不动;
  • 有效 Batch Size:微批量 × 梯度累积步数 × 数据并行规模;
  • 训练步数/epoch:过多易过拟合,过少欠拟合;
  • 序列长度:影响截断、激活显存和计算量;
  • Warmup 与 Scheduler:减轻训练初期更新过猛;
  • 梯度裁剪:限制异常梯度峰值;
  • fp16/bf16:影响吞吐、显存和数值范围;
  • LoRA rank、alpha、dropout:控制 Adapter 容量和正则化。

排查时记录 loss、梯度范数、学习率、吞吐、显存和验证指标。训练 loss 下降不代表线上质量提高。

完整版教学

记忆钩子:先验证数据与 Mask,再查学习率、有效 token batch、梯度和数值精度。

一、先确认数据流水线

大量“训练不稳定”其实来自错误标签、全部被 Mask、模板重复特殊 token、空回答或截断。先让少量高质量样本过拟合,是验证流水线的有效办法。

具体做法是抽 20~50 条样本,打印 chat template、input_ids、labels、loss mask 和解码后的文本,确认模型真的只在 assistant 回答部分学习。如果 labels 全是 -100,loss 可能看似稳定但模型什么都没学;如果 user 内容也参与 loss,模型可能学会复述问题。排查顺序先看数据,再看超参数,因为坏数据上的“调参”只是在掩盖根因。

二、学习率为什么敏感

微调从已有能力的参数点出发,更新太大会偏离基座。全量微调通常比只训练 Adapter 更保守,但不存在跨模型通用数值,应通过学习率扫描确定。

Warmup 让学习率从较小值上升,尤其适合训练初期梯度波动较大的场景。

三、Batch 与梯度累积

显存放不下大 Batch 时,可累积多个微批量梯度后再更新。它能扩大有效 Batch,但会增加一次优化器更新的等待时间。

调度器步数、日志步数和梯度裁剪时机必须按“优化器更新”理解,配置错误会改变实际训练计划。

四、精度与梯度异常

fp16 数值范围较窄,可能出现溢出并需要 Loss Scaling;bf16 指数范围更大,通常更稳,但需要硬件支持。出现 NaN 时检查异常样本、学习率、梯度范数和算子精度。

混合精度会降低部分显存,但优化器状态和某些计算仍可能保留更高精度。排查时要同时记录 loss scale、梯度范数、是否出现 inf/NaN、哪一步开始异常。若 NaN 总在某些 batch 后出现,优先回放样本;若 warmup 结束后立刻震荡,优先检查学习率与调度;若只在分布式训练出现,还要看梯度同步、ZeRO/FSDP 配置和随机种子。

五、显存不够怎么办

依次考虑减小微批量、缩短序列、启用梯度检查点、使用 PEFT/QLoRA、优化样本 Packing,再考虑参数和优化器分片。梯度检查点通过反向时重算部分前向来省激活,因此会牺牲速度。

这里的取舍不能只看“能不能跑起来”。减小 micro batch 会影响吞吐和梯度噪声,缩短序列可能截断关键上下文,梯度检查点节省激活但增加训练时间,QLoRA 降显存却引入量化误差。较稳的表达是先估算显存构成:权重、激活、梯度、优化器状态、KV/临时 buffer 各占多少,再按影响最小的项逐步优化。

六、过拟合怎么看

训练 loss 持续下降而验证指标下降、回答模板化或通用能力退化,都是过拟合信号。可减少步数、提高数据多样性、降低学习率、增加正则,并采用早停。

大模型微调的过拟合不一定只表现为验证 loss 变差,也可能表现为所有回答都套同一种客服腔、拒答边界变窄、代码能力下降或长文本遵循能力变差。面试里可以举例:目标任务准确率从 86% 升到 91%,但通用回归集从 78% 掉到 70%,这不是“训练成功”,而是需要停训或回退的信号。最终发布要看目标任务收益是否覆盖通用能力退化与线上风险。

七、从有效 Batch 和更新步数排查

若单卡 micro-batch=2、使用 8 张卡、梯度累积 4 次,则每次参数更新的样本 batch 是 2×8×4=64。若平均每条 1024 token,有效 token batch 约 65,536;把序列长度翻倍但不调整 token 预算,会同时改变梯度统计、显存和每步耗时。

global_batch = micro_batch * data_parallel * grad_accum
             = 2 * 8 * 4 = 64 samples/update
token_batch  ≈ 64 * 1024 = 65,536 tokens/update
症状优先检查
loss spike异常 batch、学习率、梯度范数
NaN/Inf混合精度 overflow、除零
训练快而验证差数据泄漏或过拟合

排查 loss spike 应按数据批次、学习率、梯度范数、overflow 和分布式通信顺序定位。学习率与可训练参数范围联动:LoRA 常能承受比全量微调更高的学习率,但具体值仍由数据量、rank、batch 和模型规模决定,不能机械照抄。

八、常见误区与追问

  • 误区:梯度累积与更大物理 batch 在所有方面完全等价。 梯度平均可近似等价,但归一化、随机性、通信频率和吞吐可能不同。
  • 追问:loss 突然变 NaN 先查什么? 定位具体 batch,再看学习率、梯度范数、混合精度 overflow 和异常长样本。
  • 误区:LoRA 学习率总可以设得很高。 可训练参数更少不代表任意稳定,数据规模、rank 和模块覆盖都会改变合适范围。
  • 追问:如何判断过拟合? 训练 loss 继续下降而分组验证指标恶化,并伴随输出模板化或记忆训练样本。
  • 追问:显存不足应按什么顺序处理? 先核对序列与 batch,再用累积、checkpointing、低精度、PEFT 或分片,并记录吞吐代价。

九、加强记忆

调参顺序先保证数据、模板和标签正确,再看学习率、有效 token batch、训练步数、序列长度与精度。loss spike 要沿具体 batch、梯度范数和 overflow 定位,过拟合则看独立分组验证集而非训练 loss。每次只改变少数变量并记录有效 token 数,才能让结论可复现。