梯度累积(Gradient Accumulation)的核心目的是在显存不足时,通过多次小批次(micro-batch)前向+反向,累积梯度后再更新参数,从而模拟大批次(global batch)训练。
“最佳批次大小”其实要分两层来看:单步 micro-batch 和 等效 global batch。
每次 forward/backward 实际送入模型的样本数
✅ 受 显存 限制
global_batch = micro_batch × accumulation_steps✅ 影响 收敛稳定性与泛化性能
| 模型规模 | 常见 micro-batch |
|---|---|
| BERT-base | 8–32 |
| 7B LLM | 1–4 |
| 13B+ | 1(甚至 <1,用序列并行) |
| 任务类型 | 推荐 global batch |
|---|---|
| CV(ImageNet) | 32 – 256 |
| BERT 预训练 | 256 – 1024 |
| LLM 预训练 | 512 – 4096+ |
| 微调(SFT) | 32 – 128 |
注意:
global batch 太大 → 泛化变差、训练不稳定
太小 → 梯度噪声大、收敛慢
公式:
accumulation_steps = global_batch / micro_batch→ 累积步数 = 16
✅ 实际训练时:
不要单独调 accumulation_steps
推荐流程:
经验法则(Linear Scaling Rule):
new_lr = base_lr × (new_global_batch / base_global_batch)示例:
额外成本:
micro-batch = 2
accumulation = 8
global batch = 16micro-batch = 4
accumulation = 64
global batch = 256micro-batch 由显存决定,global batch 由训练效果决定,梯度累积只是桥梁。
如果你愿意,可以告诉我:
我可以直接帮你算一套具体可用的批次配置和学习率。