梯度累积与微批次关系是什么

GPU
小华
2026-07-18

梯度累积(Gradient Accumulation)和微批次(Micro-batch)本质上是同一件事的两种说法,核心目的都是:在显存有限的情况下,用多次小批次(micro-batch)模拟大批次(global batch)训练

下面从概念、关系、流程、示例和注意事项几个角度说明。

一、核心概念

1. 微批次(Micro-batch)

  • 定义:一次真正送入模型进行前向/反向计算的小批量数据
  • 特点
  • 受限于显存大小
  • 每个 micro-batch 都会计算梯度

2. 梯度累积(Gradient Accumulation)

  • 定义不立即更新参数,而是把多个 micro-batch 的梯度累加
  • 目的
  • 等效于使用更大的 batch size
  • 避免显存不足

二、两者的关系(一句话)

梯度累积 = 使用多个微批次(micro-batch)不断累加梯度,再统一更新参数
| 概念 | 角色 |
微批次数据切分单位
梯度累积训练策略
全局批次(global batch)micro-batch × 累积步数

三、典型训练流程

假设:

  • 目标 global batch size = 64
  • 显存只能跑 micro-batch = 16
  • 梯度累积步数 = 4

1. 数据切分

Global batch (64)
├── Micro-batch 1 (16)
├── Micro-batch 2 (16)
├── Micro-batch 3 (16)
└── Micro-batch 4 (16)

2. 训练步骤

for micro-batch in micro-batches:
前向计算
反向计算(得到梯度)
梯度累加到 buffer(不更新参数)
# 累积完成后
更新参数
清空梯度

四、伪代码示例

accumulation_steps = 4
optimizer.zero_grad()
for i, (x, y) in enumerate(data_loader):
pred = model(x)
loss = criterion(pred, y)
loss = loss / accumulation_steps  # 可选:归一化
loss.backward()  # 梯度累加
if (i + 1) % accumulation_steps == 0:
optimizer.step()
optimizer.zero_grad()

五、为什么需要梯度累积?

主要原因

  1. 显存限制
  • 大模型(LLM、ViT、Large CNN)
  1. 大 batch 训练更稳定
  • 梯度估计更准
  1. 分布式训练对齐
  • 数据并行 + 梯度累积

六、与数据并行的区别

对比项梯度累积数据并行
是否多卡
是否增加显存
本质时间换空间空间换时间
梯度同步单卡内部多卡之间

七、常见误区

❌ 误区 1:梯度累积会改变梯度方向

✅ 不会,只是数值累加,等价于一次大 batch 的反向传播

❌ 误区 2:loss 要手动除以累积步数

✅ 推荐做法,但不是必须

  • 除以:梯度等价于大 batch
  • 不除以:学习率需要相应调整

八、总结一句话

微批次是“怎么切数据”,梯度累积是“怎么用这些数据训练”;两者结合,使小显存也能跑大 batch。
如果你愿意,我可以:
  • PyTorch / DeepSpeed / Megatron 的具体实现解释
  • 结合 LLM 训练(如 GPT / LLaMA) 说明实际配置
  • 画一张 时间线示意图 帮你理解
亿速云提供售前/售后服务

售前业务咨询

售后技术保障

400-100-2938

7*24小时售后电话

官方微信小程序