梯度累积步数

🧮 Gradient Accumulation Steps Calculator

Compute how many gradient accumulation steps you need to reach a target effective batch size when a single device batch is limited by memory.

📐 计算公式 / 原理
梯度累积步数(本页代码口径):累积步数=⌈目标批量÷(单卡批量×GPU数)⌉(向上取整为整数步);实际等效批量=单卡批量×GPU数×累积步数。校验:无强校验,空值按 0 兜底,分母为 0 或输入为空使结果非有限时追加警示「部分结果无定义」。判据:无固定分级,步数随单卡批量或 GPU 数增大而减少,向上取整保证等效批量不低于目标。
显存不够放大 batch 时,用小批量连续跑若干步再把梯度相加、只做一次参数更新,等效于大批量训练。注意归一化层统计与 BatchNorm 仍按小批量计算,与真正的大 batch 不完全等价;学习率要按等效批量同步放大。

📐 计算公式与说明

判读与示例(本页代码口径,与上方公式互补):目标 128、单卡 32、2 卡 → 每步 64 样本,⌈128÷64⌉=2 步累积后更新一次、实际等效批量 128,对比单卡可省一半累积步数。校验共用同一组输入(目标批量、单卡批量、GPU 数任一为 0 即触发无定义警示)。判据:无固定分级;注意梯度累积不改变归一化层按小批量统计的口径,学习率宜按等效批量同步放大。

累积步数越多显存占用越低。

📚 深度解析:梯度累积步数

💡 常见使用场景

累积步数计算
目标 batch=128、单卡 batch=32、2 卡 → 累积步数=128/(32×2)=2。每 2 个小步累加梯度后更新一次,等效 batch=128。

❓ 常见问题(FAQ)

累积会影响收敛吗?
等效 batch 相同则统计近似一致,但累积使更新频率降低、训练更慢;学习率应按等效 batch 调整,而非单卡 batch。
累积步数设太大怎样?
等效 batch 过大易泛化变差、显存虽省但训练极慢;且 BN 统计仍按小 batch,与真实大 batch 有偏差,需同步调大 BN 动量或使用同步 BN。

Formula & Standard References

Item Formula / Note Source / Standard
Equivalent batch accumulation steps times micro batch size gives the effective batch size PyTorch gradient accumulation docs
Gradient normalisation dividing each micro-step gradient by the accumulation count keeps the expectation matched PyTorch gradient accumulation docs
Memory trade-off peak memory drops according to activation storage rather than parameter count PyTorch memory management docs