What is 梯度累积?
一种训练技术,通过在多次前向传播中累积梯度然后执行一次权重更新来模拟更大的批量大小。
Definition
梯度累积是一种内存优化技术,使得在无法将大批次放入GPU显存的硬件上也能使用有效的大批量大小进行训练。该技术不是在大批次上计算梯度并更新权重,而是将大批次拆分为更小的微批次,顺序计算每个微批次的梯度,累积(求和)梯度,然后使用累积的梯度执行一次权重更新。从数学上看,这与使用完整大批次训练产生相同的结果。
例如,如果期望的有效批量大小为32但GPU显存只能支持微批次大小为4,则将梯度累积步数设置为8。模型执行8次前向-反向传播,每次处理4个样本,累积梯度,然后更新权重——产生的梯度与同时处理所有32个样本时完全相同。
梯度累积是LLM微调中最重要的实用技术之一,因为它将批量大小与内存约束解耦。训练质量的最优批量大小通常远大于GPU显存所能容纳的,梯度累积在不需要额外硬件的情况下弥合了这一差距 。与梯度检查点(重新计算而非存储中间激活值)等其他内存优化相结合,它使得在普通硬件上微调大型模型成为可能。
Why It Matters
批量大小显著影响训练动态和模型质量。更大的批量大小提供更稳定的梯度估计,带来更平滑的优化和通常更好的最终模型性能。然而,GPU显存限制了可以同时处理的样本数量。没有梯度累积,团队将被迫使用显存能容纳的任何批量大小进行训练——通常只有1-2个样本——导致噪声梯度和糟糕的训练结果。
梯度累积对于可重现性也至关重要。它允许拥有不同硬件配置的团队使用相同的有效批量大小进行训练,确保无论训练是在单块消费级GPU还是多GPU服务器上进行,结果都是可比的。
How It Works
在标准训练中,每步包含:(1) 前向传播计算预测,(2) 损失计算,(3) 反向传播计算梯度,(4) 优化器步骤更新权重,(5) 梯度清零。使用梯度累积时,步骤1-3重复N次(累积次数),梯度在各迭代中求和,然后执行步骤4-5一次。梯度通常除以N以归一化累积步数,匹配真正大批次梯度的行为。
代价是训练速度——梯度累积顺序处理微批次,因此在挂钟时间上比真正的大批次训练慢N倍。然而,这通常是可以接受的,因为替代方案(内存溢出)更糟,而且每步的计算成本相同。唯一额外的内存成本是存储累积梯度缓冲区,与减少批量大小带来的节省相比可以忽略不计。
Example Use Case
一位研究人员在单块RTX 3090(24 GB VRAM)上微调13B模型,发现使用2048 token序列时只有微批次为1才能放入显存。批量大小为1的训练产生极不稳定的损失曲线。通过将梯度累积步数设置为16,他们模拟了批量大小16,实现了稳定的训练动态和收敛良好的模型——训练只是每个有效步骤慢了16倍,他们通过通宵训练来补偿。
Key Takeaways
- 梯度累积通过在多个微批次中求和梯度来模拟大批量大小。
- 它产生与真正大批次训练数学上相同的结果。
- 它将有效批量大小与GPU显存约束解耦。
- 代价是挂钟训练时间的线性减慢。
- 它是在消费级或中端GPU硬件上微调大型模型的必要技术。
How Ertas Helps
Ertas Studio根据用户的GPU显存和期望的有效批量大小自动配置梯度累积,无 论硬件约束如何都能确保稳定的训练动态。
Related Resources
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.