LLaMA-Factory gradient_accumulation_steps
2025-07-31
LLaMA-Factory
00

目录

gradientaccumulationsteps 的作用
基本原理
具体工作流程
对通信的影响
✅ 减少通信频率
通信减少量
对训练速度的影响
✅ 优势
⚠️ 潜在问题

gradient_accumulation_steps 的作用

基本原理

展开代码
实际batch_size = per_device_train_batch_size × gradient_accumulation_steps × 设备数量 您的设置: - per_device_train_batch_size = 12 - gradient_accumulation_steps = 2 - 假设8张卡:实际batch_size = 12 × 2 × 8 = 192

具体工作流程

  1. 前向传播: 处理2个小批次(每个12样本)
  2. 梯度累积: 将2次的梯度累加起来
  3. 反向传播: 一次性更新参数
  4. 通信同步: 只在累积完成后进行一次

对通信的影响

减少通信频率

python
展开代码
# gradient_accumulation_steps = 1 (默认) for batch in dataloader: loss = model(batch) loss.backward() # 每次都通信 optimizer.step() # 每次都同步梯度 # gradient_accumulation_steps = 4 for i in range(4): loss = model(batch[i]) loss.backward() # 只累积,不通信 optimizer.step() # 4次累积后才通信一次

通信减少量

  • 原来: 每个小批次都要同步梯度
  • 现在: gradient_accumulation_steps 个批次才同步一次
  • 通信减少: 1/gradient_accumulation_steps

对训练速度的影响

优势

  1. 减少网络开销: 通信次数减少
  2. 更大有效批次: 提高训练稳定性
  3. 减少同步等待: 减少进程间等待时间

⚠️ 潜在问题

  1. 显存增加: 需要累积更多梯度
  2. 延迟更新: 参数更新频率降低
  3. 可能影响收敛: 特别是学习率需要调整
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!