Micro Batch 是深度学习中常用的一个概念,特别是在处理大模型的训练和推理时。它指的是将一个大的批次(batch) 进一步划分为多个较小的批次来处理。这种策略可以用于提升硬件利用率、优化内存使用或适应特定的硬件限制。
Micro Batch 的定义
在训练或推理中,数据通常会以批量(batch) 的形式喂给模型。一个batch 包含多个样本,比如一组句子或者图像。
Micro batch 是将一个大批量 (global batch) 切分成若干较小的批次,分别依次送入模型中进行计算,
- Global Batch Size : 整体的批次大小(e.g. : 128)
- Micro Batch Size : 切分后的每个小批次的大小 (e.g. : 16)
示例 : 如果global batch size = 128
, 而micro batch size = 16
, 那么整个批次会被分成 8 个 micro batches, 每个包含 16 个样本。
2. Micro Batch 的用途
(1) 训练阶段
- 显存优化:
- 处理大模型时,如果一次性加载整个 batch 所需要的显存太大,切分成 micro batches 可以逐步处理,减少显存占用.
- 通过 梯度累积 (Gradient Accumulation), 每次处理一个 micro batch 的梯度,最后在所有 micro batches 的梯度累加后再更新模型参数。
- 硬件限制适配:
- 当 GPU 的显存容量不足以支持大 batch 时,通过 micro batch 的方式可以让训练依然在较小的 GPU 上进行。
(2) 推理阶段
- 动态批处理 (Dynamic Batching) :
- 推理任务中,多个请求可能是并发的,但每个请求的数据量可能不一致。通过 micro batch 将它们动态合并,能高效地利用硬件资源。
- for example:一个 LLM 的推理服务器可能需要同时处理多个输入,将这些输入组成一个 micro batch 来提高吞吐量。
- 流水线并行优化 :
- miro batch 可以帮助流水线并行 (Pipeline Parallelism) 更好的调度计算资源,例如让每个模型 slice 都在不同的 micro batches 上并行计算。
3. Micro Batch 的优势
1. 显存效率:
- 通过切分大的 batch,减少显存需求,适配资源有限的硬件。
2. 吞吐量提升:
- 在推理中,通过 micro batch 动态组合多个请求,可以显著提升模型的吞吐量
3. 灵活性:
- 可以适配不规则的输入数据( for example 长度不一的序列)
4. Micro Batch 的注意事项
1. 梯度累积(在训练中):
- 如果切分成 micro batches,需要在最后累积梯度后统一更新参数,否则效果等同于降低 batch size。
2. 批次内数据依赖 (inference) :
- micro batch slice 可能导致数据的上下文丢失 (e.g. 序列生成任务中),需要保证切片后每个 micro batch 的数据仍然是独立的。
3. 通讯开销
- 在多 GPU 场景中,如果每一个 micro batch 都需要与其他 GPU 通信,会带来额外的通信开销
5. 应用场景
- 大模型训练 :分布式训练中,通过 micro batch 和 梯度累积来减少显存的占用。
- 大模型推理 :LLM 的推理框架 (e.g. Hugging Face 、vLLM) 常用 micro batching 来提高请求的吞吐量。
- 混合并行 : 结合数据并行、模型并行和流水线并行时,micro batch 常用于更高效的任务分配。