一句话定义:有效批大小(Effective Batch Size)指一次参数更新实际“看过”多少条样本,它等于单卡批大小 × 并行卡数 × 梯度累积步数。
先算那道题
假设你有 8 张卡做数据并行(Data Parallelism),每张卡一次前向能塞 4 条样本(micro-batch = 4),显存不够,于是再用梯度累积(Gradient Accumulation)攒 8 步才更新一次权重。那么:
```
4 × 8 × 8 = 256
```
账面上一共更新一次参数,模型看过了 256 条样本,这就是有效批大小 256;也可以叫全局批大小(Global Batch Size)。
打个比方:一个人一趟只能扛 4 箱货,仓库里 8 个人同时干,每人来回跑 8 趟才统一记一次账。单趟 4 箱是“显存允许的上限”,256 箱才是“这一次进货的真实规模”。
和相邻概念的区别
| 概念 | 本例取值 | 由什么决定 |
|---|---|---|
| 单卡 micro-batch | 4 | 显存、序列长度 |
| 梯度累积步数 | 8 | 想省卡又想凑大 batch |
| 数据并行路数 | 8 | 机器数量 |
| 有效批大小 | 256 | 三者相乘 |
Micro-batch 是工程限制,有效批大小是优化语义。两者经常差一两个数量级,混着叫就会出事故。
学习率该按哪个数配
按 256,不是 4。学习率描述的是“一次更新走多远”,而一次更新是由 256 条样本的平均梯度决定的。业界常用的经验法则是线性缩放:有效批大小放大 k 倍,学习率也放大 k 倍(并配合 warmup 预热,避免早期步子太大)。用 Adam 一类自适应优化器时,很多人会改用平方根缩放或更保守的系数;这些只是起点,最终仍以实际训练曲线为准。
两条实操建议:
1. 调参时锁定有效批大小。想省显存就把 micro-batch 减半、累积步数加倍,学习率不用重调;反之亦然。
2. 改有效批大小就等于改了超参。批大小翻倍而学习率不动,往往表现为前期变慢、后期泛化变差。
两个容易踩的坑
- 梯度累积不等于真的大 batch:批归一化(BatchNorm)的统计量仍按 micro-batch 算,AI 词典:Dropout">Dropout 的随机性也按 micro-batch 发生。对 Transformer 这类用 LayerNorm 的模型影响较小,用 BatchNorm 的卷积网络要留意。
- 大模型时代更常看“每步多少 token”:有效批大小 = 序列数 × 序列长度,长度一变,同一个 256 的实际含义就变了。
对普通职场人来说,这条概念的价值在于听懂同事那句话:“我们 batch size 是 256”——先问一句,是单卡 256,还是攒出来的 256。
