超参调优:批量大小对训练稳定性的综合影响
最近在做分布式大模型训练时,踩了一个关于batch size的坑,分享给大家避免重复。
问题复现
我们使用了8卡A100进行分布式训练,初始设置为每卡batch size=64,总batch size=512。训练初期loss波动剧烈,收敛缓慢。按照常规思路,我们尝试将batch size增大到128(每卡),结果出现了严重的梯度爆炸问题,loss直接变成inf。
关键发现
通过分析发现:
- batch size过小时(<32),训练不稳定,梯度噪声大
- batch size过大时(>256),模型容易陷入局部最优,且易出现梯度爆炸
- 最佳实践是每卡batch size在64-128之间,总batch size控制在256-512范围内
复现代码片段
# 超参设置建议
for batch_size in [32, 64, 128, 256]:
# 注意梯度累积设置
if batch_size > 128:
gradient_accumulation_steps = batch_size // 128
# 设置相应学习率衰减
lr = base_lr * (batch_size / 128)
else:
gradient_accumulation_steps = 1
lr = base_lr
优化建议
- 预训练阶段使用较小batch size(64)
- 微调阶段逐步增大至128-256
- 配合学习率预热和衰减策略
这个坑踩完后,训练稳定性提升明显,建议大家在大模型训练中多测试不同batch size组合。

讨论