预训练工程模块四 · 基于批次数据的训练方法概念约 12 分钟
Batch、Batch Size 与梯度累积
一次喂多少,怎么在小显存上「假装」大 batch
学完这节你能:
- 理解 batch / batch size 概念
- 说清 batch size 对训练的影响
- 掌握梯度累积的原理
训练不是一条样本一条样本地更新,而是一「批(batch)」一起算平均梯度再更新一次。batch size 就是这一批有多少样本。
- 大 batch:梯度估计更稳、更能吃满 GPU 并行,但占显存大、有时泛化略降。
- 小 batch:显存友好、噪声大(有时反而有正则效果),但更新更抖。
- 梯度累积:显存装不下大 batch 时,把大 batch 拆成几个小 micro-batch,分别 backward 累加梯度,攒够了再 step 一次——等效于大 batch。
梯度累积
accum = 4 # 用 4 个小批等效 4 倍大 batch
for i, (x, y) in enumerate(loader):
loss = loss_fn(model(x), y) / accum # 缩放
loss.backward() # 累加梯度
if (i + 1) % accum == 0:
optimizer.step(); optimizer.zero_grad()🔑 全局批大小 = 单卡 micro-batch × 梯度累积步数 × 卡数。这三者共同决定「等效 batch size」,是算更新步数的基础。
自测梯度累积的作用是:
// 带走一句话
一批算一次平均梯度更新;梯度累积把大 batch 拆成小批累加,等效大 batch。全局批=micro×累积×卡数。
独立练习
做到这些,才算完成本节
- 合上正文,用自己的话解释核心概念。
- 写出一个相似概念,并说明两者最关键的区别。
学习记录
记录本节阅读进度
建议先独立回答自测。读完记录不等于已经掌握。