大模型训练时出现训练不稳定的原因排查
在大模型微调过程中,训练不稳定是一个常见但棘手的问题。本文将从多个维度分析可能导致训练不稳定的因素,并提供可复现的排查步骤。
常见原因分析
1. 学习率设置不当 学习率过高会导致loss剧烈震荡,过低则训练缓慢甚至停滞。建议使用学习率预热策略:
from transformers import get_linear_schedule_with_warmup
scheduler = get_linear_schedule_with_warmup(
optimizer,
num_warmup_steps=1000,
num_training_steps=total_steps
)
2. 梯度爆炸/消失 检查梯度范数:
# 在训练循环中添加
grad_norm = torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
if grad_norm > 1.0:
print(f"Large gradient norm: {grad_norm}")
3. 数据分布问题 数据不平衡会导致模型偏移,建议使用class_weight或重采样策略。
复现步骤
- 使用相同配置训练两个epoch对比loss曲线
- 逐步调整学习率观察变化
- 检查batch内样本分布
最佳实践
- 始终监控梯度范数
- 使用学习率调度器
- 定期保存检查点
- 数据清洗和预处理至关重要

讨论