梯度累积最佳批次大小怎么选

GPU
小华
2026-07-18

梯度累积(Gradient Accumulation)的核心目的是在显存不足时,通过多次小批次(micro-batch)前向+反向,累积梯度后再更新参数,从而模拟大批次(global batch)训练
“最佳批次大小”其实要分两层来看:单步 micro-batch等效 global batch

下面按实用原则一步步说明。

一、先明确两个概念

  • Micro-batch size(单步批次)

每次 forward/backward 实际送入模型的样本数
✅ 受 显存 限制

  • Global batch size(等效批次)
global_batch = micro_batch × accumulation_steps

✅ 影响 收敛稳定性与泛化性能

梯度累积只解决显存问题,不改变优化动力学,只要 global batch 相同,理论上训练效果接近。

二、Micro-batch 怎么选(显存优先)

✅ 经验做法

  1. 从最大可行 micro-batch 开始
  • 逐步增大 micro-batch
  • 直到 OOM(显存溢出)
  • 回退 1~2 档
  1. 常见范围
模型规模常见 micro-batch
BERT-base8–32
7B LLM1–4
13B+1(甚至 <1,用序列并行)
  1. 影响因素
  • 序列长度(128 / 512 / 2048 差别巨大)
  • 是否用混合精度(FP16 / BF16)
  • 是否开启 FlashAttention
  • 优化器(Adam 显存 > SGD)

micro-batch 选“刚好不爆显存的最大值”

三、Global batch 怎么选(收敛优先)

✅ 一般经验值

任务类型推荐 global batch
CV(ImageNet)32 – 256
BERT 预训练256 – 1024
LLM 预训练512 – 4096+
微调(SFT)32 – 128
注意:
global batch 太大 → 泛化变差、训练不稳定
太小 → 梯度噪声大、收敛慢

四、梯度累积步数怎么算

公式:

accumulation_steps = global_batch / micro_batch

示例

  • 目标 global batch = 128
  • 显存限制 micro-batch = 8

→ 累积步数 = 16
✅ 实际训练时:

  • 每 16 步更新一次参数
  • optimizer step 次数减少 16 倍

五、实用调参建议(非常重要)

✅ 1. 固定 global batch,调 micro-batch

不要单独调 accumulation_steps
推荐流程:
  1. 定一个 global batch(如 64)
  2. 根据显存选 micro-batch(如 4)
  3. accumulation_steps = 64 / 4 = 16

✅ 2. 学习率要按 global batch 缩放

经验法则(Linear Scaling Rule):

new_lr = base_lr × (new_global_batch / base_global_batch)

示例:

  • base batch = 32, lr = 5e-5
  • batch 变为 128 → lr = 2e-4

⚠️ 超过一定规模后要切换为 warmup + 余弦退火

✅ 3. 梯度累积 ≠ 免费午餐

额外成本:

  • 累积中间状态(activations)
  • step 频率下降
  • 对学习率调度敏感

六、推荐“选型模板”

场景 1:GPU 16GB,7B 模型微调

micro-batch = 2
accumulation = 8
global batch = 16

场景 2:8×A100,LLM 预训练

micro-batch = 4
accumulation = 64
global batch = 256

七、一句话总结

micro-batch 由显存决定,global batch 由训练效果决定,梯度累积只是桥梁。
如果你愿意,可以告诉我:
  • 模型规模
  • GPU 型号 & 数量
  • 序列长度
  • 是预训练还是微调

我可以直接帮你算一套具体可用的批次配置和学习率

亿速云提供售前/售后服务

售前业务咨询

售后技术保障

400-100-2938

7*24小时售后电话

官方微信小程序