Micro-batch(微批次)深度学习页
3 秒看懂
Micro-batch 是分布式训练中被切分后、在单个设备(GPU/加速器)上一次完成前向与反向传播的最小数据单元。 它是大批次(Global Batch)的子集——多张 GPU 各自处理一个 micro-batch,再通过梯度同步(AllReduce)或梯度累积来等价地训练一个大 batch。在流水线并行中,micro-batch 还是填充流水线各阶段、减小”气泡”(bubble)的核心调度单位。
3 分钟产业解释
为什么需要切 Micro-batch?
大模型训练有两个硬约束在打架:
| 约束 | 原因 |
|---|---|
| 需要大 batch | 大 batch 提高 GPU 利用率、减少通信轮次、稳定训练统计 |
| 单卡显存有限 | batch 越大,激活值(activations)占用显存越多;单卡放不下 |
Micro-batch 就是解决这对矛盾的基本工具:
Global Batch Size = N_GPU × Micro-batch Size × Gradient Accumulation Steps
- 数据并行(DP):每张卡分到一个 micro-batch,各自前向/反向,然后 AllReduce 梯度。
- 流水线并行(Pipeline):将 micro-batch 序列依次注入流水线各阶段,让不同阶段同时工作,最大化硬件利用率。
- 梯度累积:同一张卡串行跑多个 micro-batch,逐次累加梯度,最后做一次参数更新——等效于更大的单卡 batch。
产业关联
Micro-batch 的大小直接影响:
- 显存占用:决定模型能在多少张卡上跑起来(切分策略的输入参数)
- 训练吞吐:micro-batch 太小 → GPU 算力闲置;太大 → 显存 OOM 或 pipeline bubble 变大
- 通信开销:每个 micro-batch 反向完成后都要通信,micro-batch 越多、通信轮次越频繁
- 超参调优:学习率 warmup、LAMB/LARS 等大 batch 优化器都与 effective batch size 直接挂钩
它是训练框架(Megatron-LM、DeepSpeed、Alpa、PyTorch FSDP)中最基础的调度概念之一,也是集群算力规划时必须确定的核心参数。
15 分钟专家深入
1. Micro-batch 在三种并行策略中的角色
(a) 数据并行(Data Parallelism, DP)
┌──────────────────────────────────────────────┐
│ Global Batch (B) │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ μB (GPU0)│ │ μB (GPU1)│ ... │ μB (GPUn)│ │
│ └────────┘ └────────┘ └────────┘ │
│ ↓ ↓ ↓ │
│ fwd+bwd fwd+bwd fwd+bwd │
│ └─────────┼───────────────┘ │
│ AllReduce 梯度 │
│ 参数更新 │
└──────────────────────────────────────────────┘
- 每张卡的 micro-batch = B / N_GPU
- 通信模式:每个 micro-batch 完成后 AllReduce(或 ReduceScatter + AllGather,如 ZeRO)
- micro-batch 越小 → 通信越频繁 → 通信/计算比越大 → 吞吐下降
(b) 流水线并行(Pipeline Parallelism, PP)
这是 micro-batch 最核心的舞台。一个 global mini-batch 被切成 m 个 micro-batch,依次注入 P 个流水线阶段:
时间 →
Stage 0: [μB1][μB2][μB3][μB4] [ ][ ][ ][ ] ← 反向
Stage 1: [ ][μB1][μB2][μB3][μB4] [ ][ ][ ] ← 反向
Stage 2: [ ][ ][μB1][μB2][μB3][μB4] [ ][ ] ← 反向
Stage 3: [ ][ ][ ][μB1][μB2][μB3][μB4] [ ] ← 反向
▲ ▲
│ 前向 warmup 泡泡 │ 反向 cooldown 泡泡
经典气泡率公式(GPipe 调度下):
Bubble ratio = (P - 1) / (m + P - 1)
其中 P = 流水线阶段数,m = micro-batch 数量。
而 1F1B 调度 可将气泡率降低至:
Bubble ratio = (P - 1) / m
- 当 m >> P 时,bubble 趋近于零——这就是为什么训练大模型时往往采用大量 micro-batch。
- 典型实践:P = 8 时,m ≥ 64 可将 bubble 控制在 ~10% 以内。
(c) 梯度累积(Gradient Accumulation)
GPU 内部时间线:
[μB₁ fwd+bwd] → [μB₂ fwd+bwd] → [μB₃ fwd+bwd] → [μB₄ fwd+bwd] → [AllReduce + Update]
↑ 累积梯度 ↑ ↑ 累积梯度 ↑ ↑ 累积梯度 ↑
- 4 个 micro-batch 的梯度累加 → 等效 batch size = 4 × μB
- 作用:在显存不足以容纳大 batch 时,模拟大 batch 训练效果
- 注意:梯度累积期间 BatchNorm 的统计量是按 micro-batch 计算的,可能与全局 batch 统计量有差异(实践中常用 GroupNorm/LayerNorm 替代)
2. Micro-batch 大小与显存的关系
单张 GPU 上,micro-batch 引入的显存占用主要来自:
| 显存项 | 与 μB 的关系 | 典型量级 |
|---|---|---|
| 激活值(Activations) | 线性正比(μB 越大,存储的中间激活越多) | 通常是显存大户 |
| 模型参数 | 与 μB 无关 | 固定 |
| 优化器状态 | 与 μB 无关 | 通常 ≈ 参数量 ×12(Adam,FP32 主副本 + 一阶/二阶矩) |
| 梯度缓冲 | 与 μB 无关(梯度大小 = 参数大小) | 固定 |
| 临时计算缓冲 | 与 μB 弱相关 | 视算子实现而定 |
关键公式(估算):
激活显存 ≈ L × μB × s × h × bytes_per_element × recomputation_factor
+ 注意力矩阵显存 (约 L × μB × num_heads × s² × bytes_per_element,长序列下显著)
其中 L = 层数,s = 序列长度,h = 隐藏维度,num_heads = 注意力头数。常见简化估算仅涵盖了线性项,忽略了与 s² 成正比的注意力得分矩阵(形状 [μB, num_heads, s, s])的显存占用;当序列长度较大(例如超过 32k tokens)时,该项可能成为内存瓶颈。开启 activation recomputation(重计算)时,部分策略可选择重计算注意力矩阵以消除或降低这项开销,但具体实现需结合实际配置评估,计算量通常增加约 30%-40%。[来源:Megatron-LM / Chen et al. 2016, “Training Deep Nets with Sublinear Memory Cost”]
3. 1F1B 调度策略
为了减少 pipeline bubble 中的显存峰值,Megatron-LM 等框架采用 1F1B(One Forward One Backward) 调度:
Stage 0: F1 F2 F3 F4 | B4 B3 F5 B2 F6 B1 ...
Stage 1: F1 F2 F3 F4 | B4 B3 F5 B2 F6 B1 ...
- 先用 (P-1) 个 micro-batch 填充流水线 warmup 阶段
- 然后交替执行前向和反向——始终只在流水线中保留有限个 micro-batch 的激活值
- 相比 GPipe 的”全部前向→全部反向”,1F1B 将显存峰值从 O(m × activation_per_μB) 降至 O(P × activation_per_μB)
[来源:Narayanan et al., “Efficient Large-Scale Language Model Training on GPU Clusters,” SC 2021]
4. Micro-batch 对训练收敛性的影响
一个常被忽视的问题:
- 相同 global batch size 下,micro-batch 的切分方式会影响 BN 统计量和精度
- 如果使用 FP16 混合精度训练,micro-batch 内的 loss scaling 也受 μB 大小影响
- 极小的 μB(如 = 1)可能导致梯度估计方差大、训练不稳定
- 极大的 μB 受显存限制,且可能需要更大的学习率(线性 scaling rule)
实践中的典型 micro-batch 大小:
- LLM 训练(GPT 类):通常 1-8 sequences / micro-batch
- CV 大模型(ViT 等):通常 4-32 images / micro-batch
- 视频/多模态模型:因序列极长,往往 μB = 1
技术原理(最深)
核心机制
Micro-batch 本身不是一个”网络组件”或”算子”,而是分布式训练框架中的调度抽象。它的技术本质是:
- 将全局数据流切分为可独立执行前向/反向传播的最小计算块
- 在时间维度上错开这些计算块的执行,以实现并行或流水线化
Pipeline Parallelism 中的 Micro-batch 调度图
Micro-batch 流水线调度 (1F1B, P=4 stages, m=8 micro-batches)
时间步 → t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12
Stage 0: [F1] [F2] [F3] [F4] [B4] [F5] [B3] [F6] [B2] [F7] [B1] [F8]
Stage 1: [F1] [F2] [F3] [F4] [B4] [F5] [B3] [F6] [B2] [F7] [B1]
Stage 2: [F1] [F2] [F3] [F4] [B4] [F5] [B3] [F6] [B2] [F7]
Stage 3: [F1] [F2] [F3] [F4] [B4] [F5] [B3] [F6] [B2]
F = 前向传播 B = 反向传播
[ ] = 一个 micro-batch 在一个 stage 上的一次计算
- P2P 通信:相邻 stage 之间通过 point-to-point (send/recv) 传递激活值(前向)和梯度(反向)
- 梯度同步:一个 micro-batch 的反向传播完成后,梯度在数据并行维度上做 AllReduce
显存分析公式(1F1B 稳态阶段)
Peak Activation Memory = P × (activation_size_per_μB) + (P-1) × communication_buffer
对比 GPipe(先全部前向、再全部反向):
Peak Activation Memory (GPipe) = m × (activation_size_per_μB)
当 m >> P 时,1F1B 显存优势极其显著。
关键参数之间的约束关系
# 伪代码
global_batch_size = target_samples_per_step # 由训练配方决定
n_gpu = num_gpus # 集群 GPU 总数
tp_degree = tensor_parallel_size # 张量并行度
pp_degree = pipeline_parallel_size # 流水线并行度
dp_degree = n_gpu / (tp_degree * pp_degree) # 数据并行度
micro_batch_per_gpu = 1 # 通常从 1 开始尝试
gradient_accum_steps = global_batch_size / (dp_degree * micro_batch_per_gpu)
# 显存约束:
# activation_mem(micro_batch_per_gpu, seq_len, hidden_dim, n_layers)
# + model_mem + optimizer_mem ≤ gpu_memory
# 吞吐约束:
# pipeline_bubble ≈ (pp_degree - 1) / (gradient_accum_steps + pp_degree - 1)
# bubble 应 < 10-15%,否则浪费算力
Interleaved 1F1B(Virtual Pipeline Parallelism)
Megatron-LM 的进阶方案:将每个 stage 的模型层拆成若干 virtual stages,micro-batch 在 virtual stages 之间交错执行,进一步减小 bubble:
Bubble ratio (interleaved) ≈ (P-1) / (m × v)
其中 v = virtual stages per rank(每个 rank 内的虚拟阶段数)。但代价是通信量增加约 v 倍。
[来源:Korthikanti et al., “Reducing Activation Recomputation in Large Transformer Models,” MLSys 2023 (Megatron-LM 团队)]
技术演进史
| 时间 | 里程碑 | micro-batch 相关贡献 |
|---|---|---|
| 2016 | Chen et al., “Sublinear Memory Cost” | 提出 activation checkpointing / recomputation,允许更小显存下用更大的 μB |
| 2018 | Megatron-LM v1 | 系统化张量并行 + 数据并行,micro-batch 配置成为显式训练参数 |
| 2019 | GPipe (Huang et al., Google) | 首次在生产级模型中使用 pipeline parallelism + micro-batch 流水线调度,明确 bubble 公式 |
| 2019 | PipeDream (Narayanan et al., Microsoft Research) | 提出 1F1B 调度和异步 pipeline,micro-batch 成为流水线核心调度单位 |
| 2020 | DeepSpeed ZeRO (Rajbhandari et al.) | ZeRO-1/2/3 切分优化器状态/梯度/参数,micro-batch 大小约束从”放得下模型+优化器”变为主要”放得下激活” |
| 2021 | Megatron-LM v3 (Narayanan et al., SC’21) | 提出 interleaved 1F1B (virtual pipeline),进一步降低 bubble 率 |
| 2021 | Alpa (Zheng et al., UC Berkeley) | 自动搜索最优的 micro-batch 切分 + 并行策略组合 |
| 2023 | DeepSpeed-Ulysses / Ring Attention | 超长序列场景下,将序列维度也切成 micro-segments 处理,micro-batch 概念向序列维度扩展 |
| 2023-24 | FSDP2 (PyTorch) / Megatron-Core | micro-batch 配置与 activation recomputation、selective recomputation 深度耦合 |
技术路线对比
不同 Pipeline 调度策略中的 Micro-batch 行为
| 调度策略 | Bubble Ratio | 显存峰值(激活) | 通信模式 | 代表实现 |
|---|---|---|---|---|
| GPipe(全前向→全反向) | (P-1)/(m+P-1) | O(m × act_μB) | 批量 P2P | GPipe, early Megatron |
| 1F1B(交替前向/反向) | (P-1)/m | O(P × act_μB) | 流式 P2P | Megatron-LM, DeepSpeed |
| Interleaved 1F1B (V-Sched) | (P-1)/(m·v) | O(v × P × act_μB) | 流式 P2P, 量 ×v | Megatron-LM v3 |
| Zero Bubble Pipeline | 趋近于 0 | O(P × act_μB) | 流式 P2P + 额外调度 | Qi et al., 2023 |
注:所有公式为理想情况近似,实际 bubble 受计算时间不均匀、通信延迟等因素影响。[来源:各原始论文]
Micro-batch vs. Mini-batch vs. Global Batch
| 术语 | 定义 | 典型大小 (LLM 训练) |
|---|---|---|
| Sample | 一个训练样本(一条文本序列等) | — |
| Micro-batch (μB) | 单个设备一次前向/反向的样本数 | 1-8 sequences |
| Mini-batch | 一次参数更新前的总样本数(含梯度累积) | 通常 = global batch |
| Global Batch | 所有数据并行 rank × 梯度累积步数 × μB | 数百~数百万 tokens |
| Gradient Accumulation Steps | global_batch / (dp_degree × μB) | 4-256 |
上下游
上游(Micro-batch 的依赖方)
硬件层: GPU/TPU 显存容量、HBM 带宽、NVLink/NVSwitch 互联带宽
↓
系统层: 集群拓扑、通信库 (NCCL)、调度器
↓
框架层: 并行策略 (TP/PP/DP/SP/EP)、activation recomputation 策略
↓
配方层: seq_len、hidden_size、num_layers → 决定 activation_per_μB
↓
═══════════════════════════════════════
MICRO-BATCH SIZE 的选择
═══════════════════════════════════════
下游(Micro-batch 影响的环节)
MICRO-BATCH SIZE
↓
├──→ 显存占用 (activation memory) → 决定能否跑在现有硬件上
├──→ Pipeline bubble ratio → 影响 MFU (Model FLOPS Utilization)
├──→ 梯度统计精度 → 影响收敛性
├──→ 通信频率 → 影响 allreduce/P2P 开销占比
├──→ 学习率调度 → 与 effective batch size 联动
└──→ BatchNorm 统计量 (若使用) → 影响模型精度
关键指标
| 指标 | 定义 | 与 Micro-batch 的关系 |
|---|---|---|
| MFU (Model FLOPs Utilization) | 实际 FLOPS / 理论峰值 FLOPS | μB 太小→ GPU 利用率低 → MFU 下降;μB 太大→ 显存受限、bubble 大 |
| HFU (Hardware FLOPs Utilization) | 含 recomputation 的总计算 / 理论峰值 | 如果 μB 过小需频繁 recomputation,HFU ≠ MFU |
| Pipeline Bubble % | 流水线中空闲时间占比 | bubble ≈ (P-1)/(m+P-1),m = micro-batch 数 |
| Activation Memory per Layer | 单层单个 μB 存储的激活字节数 | 线性正比于 μB 大小 |
| Communication / Computation Overlap | 通信是否被计算掩盖 | μB 大 → 计算时间长 → 更容易掩盖通信 |
| Tokens per Second per GPU | 单卡吞吐 | 核心性能指标,受 μB 选择直接影响 |
供需与市场数据
Micro-batch 如何影响算力供需
Micro-batch 的选择看似是”调参细节”,但它直接决定了等效算力利用率,进而影响:
- GPU 需求量:同样的训练任务,MFU 从 30% 提升到 50%,所需 GPU 数量减少 40%
- 训练成本:以 LLM 训练为例,MFU 每提升 1 个百分点,千万美元级项目可节省数十万美元
- 硬件规划:HBM 容量(决定最小 μB 的激活能否放下)、互联带宽(决定 pipeline 通信能否掩盖)是硬件采购的关键考量
行业实践参考
| 模型/团队 | 公开报告的配置 | 来源 |
|---|---|---|
| GPT-3 (175B) | μB=2, TP=8, PP=~16, 1024 A100 | [Brown et al., 2020; Megatron-LM 相关讨论] |
| Llama 系列 | μB=1~4 (序列级), 使用 gradient accumulation | [Touvron et al., 2023; Meta 公开技术报告] |
| 典型 70B 模型训练 | TP=8, PP=4, DP=~16, μB=1-2, grad_accum=8-32 | [行业估算, 基于公开 blog 和技术分享] |
注:具体配置因集群规模、框架版本、训练阶段而异。上表为公开资料中的典型案例,非精确推荐值。
代表公司与资本映射
| 层级 | 公司/项目 | 与 Micro-batch 的关系 |
|---|---|---|
| 框架 | NVIDIA (Megatron-LM, Megatron-Core) | micro-batch 调度的工业级参考实现;1F1B / interleaved 1F1B 的主要推动者 |
| 框架 | Microsoft (DeepSpeed) | ZeRO 系列优化了显存分配,间接影响 μB 的可选范围 |
| 框架 | Meta (PyTorch FSDP) | FSDP 的 sharding 策略影响 activation memory,改变 μB 约束 |
| 框架 | Google (JAX/Pax) | TPU 上的 pipeline parallelism 实现,micro-batch 概念类似但调度细节不同 |
| 自动化 | Alpa (Anyscale/UC Berkeley 系) | 自动搜索最优 μB + 并行策略 |
| 硬件 | NVIDIA (H100/H200/B100/B200) | HBM 容量直接决定 μB 上限;NVLink/NVSwitch 带宽决定 pipeline 通信延迟 |
| 硬件 | AMD (MI300X) | 192GB HBM → 允许更大 μB 或更少流水线切分 |
| 云厂商 | AWS / Azure / GCP | 集群互联拓扑影响 μB 的通信成本,间接影响训练效率 |
投资逻辑
核心观点
Micro-batch 本身不是一个可投资的”技术赛道”,但它是理解以下投资逻辑的关键透镜:
-
显存即瓶颈 → HBM 和封装技术的投资逻辑
- μB 的上限由 activation memory 决定 → 更大 HBM → 更大 μB → 更高 MFU → 算力更”值钱”
- SK 海力士/三星/美光的 HBM 产能直接影响 AI 训练效率
- 先进封装(如 CoWoS)的产能瓶颈同样制约了大 HBM 芯片的供给
-
互联带宽 → 通信效率的投资逻辑
- Pipeline parallelism 的 P2P 通信延迟直接决定 μB 的计算/通信比
- NVLink/NVSwitch 带宽、InfiniBand/RoCE 集群网络是关键
-
训练效率软件栈 → 框架价值
- 同样的硬件,Megatron-Core vs. naive DDP 的 MFU 差异可达 2-3 倍
- 更好的 μB 调度 = 更低的训练成本 = 框架的商业价值
-
推理侧的 μB(micro-batch serving)
- 推理场景中,μB 概念延伸为 dynamic batching / continuous batching
- vLLM、TensorRT-LLM 等推理引擎的核心优化之一就是 micro-batch 调度
常见误读纠偏
❌ 误读 1:“Micro-batch 越大越好”
纠正:不是。μB 增大的限制包括:
- 显存:activation memory 线性增长,可能 OOM
- Pipeline bubble:在 pipeline 并行中,μB 数 m 与 bubble 率成反比,但 μB 大意味着 m 小(global batch 固定时),bubble 反而增大
- 收敛性:过大的 μB 配合错误的学习率可能导致训练发散
- 最优 μB 通常是硬件约束(显存、通信)和软件约束(bubble、收敛)的平衡点,需要实验确定
❌ 误读 2:“Micro-batch 大小等价于 batch size”
纠正:三者完全不同。在分布式 + 流水线 + 梯度累积的设定下:
global_batch = data_parallel_degree × pipeline_micro_batches × gradient_accum_steps × μB
一个 μB=1 的配置,通过 DP×PP×accum 的乘数,可以实现 global batch 达数百万 token 的训练。混淆这些层次会导致对训练配置的完全错误理解。
❌ 误读 3:“Pipeline parallelism 的 bubble 可以通过增大 μB 来消除”
纠正:增大 μB 并不直接减小 bubble——关键是增加 micro-batch 的数量 m。在 global batch 不变时,增大 μB 意味着 m 减小,bubble 反而增大。真正减小 bubble 的方式是:
- 增大 global batch(从而增加 m)
- 减少 pipeline 阶数 P
- 采用 1F1B 或更先进的调度策略
- 采用 zero-bubble pipeline(将反向计算拆分为输入梯度和权重梯度两部分,填补空闲时段)
❌ 误读 4:“流水线并行中每个 micro-batch 独立计算梯度”
纠正:在一个 pipeline iteration 中,所有 m 个 micro-batch 的梯度被累加后才做一次参数更新(同步 pipeline 如 GPipe/1F1B)。每个 μB 的反向传播产出的是该 μB 对总 loss 的梯度贡献,最终:
total_gradient = Σ(gradient_μBi) / m
只有异步 pipeline(如 PipeDream-Flush 的变体)才会对不同 μB 使用不同版本的参数,但这也带来了”stale gradient”问题。
学习路径
入门 → 进阶 → 专家
Level 1 (入门):
├─ 理解 batch / mini-batch / micro-batch 的区别
├─ 跑一次 PyTorch DDP 示例,观察 grad_accum_steps 的效果
└─ 阅读: PyTorch Distributed Training 官方教程
Level 2 (进阶):
├─ 精读 GPipe 论文 (Huang et al., NeurIPS 2019)
├─ 精读 Megatron-LM v3 (Shoeybi et al., 2020; Narayanan et al., SC 2021)
├─ 手推 bubble ratio 公式,理解 1F1B 调度流程
└─ 在 Megatron-LM 代码中追踪 micro-batch 的数据流
Level 3 (专家):
├─ 精读 Alpa (Zheng et al., OSDI 2022) — 自动并行策略搜索
├─ 精读 Zero Bubble Pipeline (Qi et al., 2023)
├─ 精读 "Reducing Activation Recomputation in Large Transformer Models" (MLSys 2023)
├─ 理解 μB 与 sequence parallelism / context parallelism 的交互
└─ 实际在千卡集群上调优 μB 配置并测量 MFU 变化
推荐实操
- Megatron-LM 官方 examples:调整
--micro-batch-size,--global-batch-size,--num-layers等参数,观察显存与吞吐变化 - DeepSpeed 的
ds_config中的train_micro_batch_size_per_gpu:结合 ZeRO stage 1/2/3 测试不同 μB 对可训练性的影响 - PyTorch FSDP:设置
batch_size与gradient_accumulation_steps,比较 μB=1 vs μB=4 的 MFU - 用
torch.profiler记录不同 μB 下的 GPU timeline:直观看到计算/通信 bubble
最后更新:2025 年 3 月 | 适用生态:PyTorch 2.x, Megatron-Core, DeepSpeed 0.14.x, FSDP2