← 课程库
预训练工程模块四 · 基于批次数据的训练方法概念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×累积×卡数。

独立练习

做到这些,才算完成本节

  1. 合上正文,用自己的话解释核心概念。
  2. 写出一个相似概念,并说明两者最关键的区别。
学习记录

记录本节阅读进度

建议先独立回答自测。读完记录不等于已经掌握。

继续下一课
← 上一课
数据管线:清洗、去重、配比、tokenize
下一课 →
epoch 与参数更新步数

学完不要急着赶进度:去练习自测,或完成对应的阶段实验