LLM 训练中的 BATCH、STEP、EPOCH一份从底层逻辑到工程实践的完整拆解导读很多刚接触大模型训练的同学会被 Batch、Step、Iteration、Epoch 这几个词搅得头大——它们到底谁包含谁为什么 LLM 论文里几乎不提 Epoch为什么 YOLO 训练要跑 300 个 Epoch而 LLaMA 预训练连 1 个 Epoch 都跑不完这篇文章试图用最直白的方式把这三个概念彻底讲透并对比传统深度学习以 YOLO 为代表与大语言模型在训练范式上的根本差异。一、三个概念的精确定义1.1 Batch批次一句话定义模型在执行一次前向传播 反向传播 参数更新时所消化的样本集合。在 LLM 语境下一个样本通常是一条固定长度的 token 序列如 4096 tokens。所以一个 Batch 的物理含义是Batch 消耗的数据量 Batch Size × Sequence Lengthtokens关键区分——Micro Batch vs Global Batch概念含义决定因素Micro Batch Size单张 GPU 一次实际能塞进去的样本数显存容量受激活值、梯度、优化器状态约束Global Batch Size一次参数更新所聚合的总样本数Micro Batch × 数据并行卡数 × 梯度累积步数真正影响优化动力学梯度方差、收敛轨迹的是Global Batch Size而不是某张卡上的 Micro Batch。1.2 Step / Iteration迭代步一句话定义模型完成一次完整的前向 → 计算 Loss → 反向 → 更新权重循环计为 1 个 Step。1 Step 处理 1 个 Global Batch 1 次权重更新在分布式训练中由于梯度累积Gradient Accumulation的存在1 Step Gradient Accumulation Steps × Micro Batch 的前向/反向 → 最后统一做一次 AllReduce 参数更新所以Step 是训练的原子计时单位。学习率调度器Cosine、Warmup以 Step 为横轴日志里的lm_loss也是逐 Step 记录。1.3 Epoch轮次一句话定义将训练集从头到尾完整遍历一次称为 1 个 Epoch。1 Epoch 所有训练样本被模型看过一遍数学关系Steps per Epoch⌈Ntotal samplesGlobal Batch Size⌉ \text{Steps per Epoch} \left\lceil \frac{N_{\text{total samples}}}{\text{Global Batch Size}} \right\rceilSteps per Epoch⌈Global Batch SizeNtotal samples⌉Epoch 的本质是数据覆盖率的度量——它回答的是这份数据被模型反复咀嚼了几遍。二、三者的层级关系一张图讲清楚Training Run │ ├── Epoch 1 │ ├── Step 1 ← 处理 Global Batch #1更新一次权重 │ ├── Step 2 ← 处理 Global Batch #2更新一次权重 │ ├── ... │ └── Step M ← 数据遍历完毕Epoch 1 结束 │ ├── Epoch 2 │ ├── Step M1 │ ├── ... │ └── Step 2M │ └── ...重复 N 个 Epoch包含关系Epoch ⊃ Step ⊃ Batch一个 Epoch 由若干 Step 组成每个 Step 消耗一个 Global Batch。三、LLM 训练 vs 传统深度学习YOLO范式差异全景对比这是本文最核心的部分。LLM 和 YOLO 虽然都跑在 GPU 上、都用 SGD 家族的优化器但训练范式几乎是两个物种。3.1 数据规模与遍历策略维度LLM 预训练如 LLaMA 3 405BYOLOv8 目标检测训练数据规模15.6T tokens约 12 万亿词COCO~118K 张图自定义集几千~几万张遍历次数≈ 1 Epoch甚至 1 Epoch100 ~ 300 Epochs核心约束Chinchilla Scaling Law数据量 ∝ 参数量数据有限必须反复利用过拟合风险来源数据重复记忆化训练轮数过多为什么 LLM 预训练只跑一遍数据根据 Chinchilla 论文2022的结论计算预算FLOPs应在模型参数量NNN和训练 token 数DDD之间做最优分配经验比例约为D≈20ND \approx 20ND≈20N。以 70B 模型为例最优 token 数约 1.4T。当数据池本身就有 15T tokens 时根本不需要也不应该重复遍历——重复等于让模型死记硬背泛化能力断崖下跌。为什么 YOLO 要跑几百个 Epoch目标检测数据集通常只有几万张标注图像而模型参数量以 YOLOv8n 为例约 3.2M相对数据量并不小。单遍遍历远远不够让模型收敛到好的 mAP必须通过多轮遍历 数据增强Mosaic、MixUp、HSV 扰动来榨干每一份标注信息。3.2 Batch 的语义差异LLMYOLO一个样本是什么一条 token 序列如 8192 tokens 的文档片段一张图像如 640×640×3Batch Size 的典型值Global Batch2M ~ 4M tokens/step换算约 256~512 条序列8 ~ 64 张图/stepBatch 大小的瓶颈显存激活值随 seq_len 线性增长 集群通信带宽单卡显存特征图分辨率BatchNorm 依赖❌ 无用 LayerNorm / RMSNorm与 batch 无关✅ 强依赖BN 统计量需要足够 batch一个关键推论YOLO 中 Batch Size 过小如 4会导致 BN 统计量严重偏移检测精度直接崩盘。而 LLM 中不存在这个问题——LayerNorm 是逐样本独立计算的Batch Size 理论上可以设为 1只是效率极低。3.3 Step 的时间尺度差异LLM 预训练YOLO 训练总 Step 数数十万 ~ 数百万步如 LLaMA 3 约 3.8M steps几千 ~ 几万步单 Step 耗时数秒 ~ 数十秒跨数千卡同步0.1 ~ 2 秒单机 1~8 卡总训练时长数周 ~ 数月集群规模 1K~16K GPU数小时 ~ 数天单机Step 的含金量每步消耗数百万 tokens影响全局 loss 曲线每步消耗几十张图影响 epoch 内局部 loss3.4 Epoch 概念的存在感LLM 预训练LLM 微调SFTYOLOEpoch 是否常用❌ 几乎不提✅ 常用3~5 Epochs✅ 核心超参100~300进度描述方式“已训练 X T tokens” / “第 N steps”“第 X epoch / 共 Y epoch”“Epoch 127/300”数据增强跨 Epoch无数据只过一遍有shuffle 可能重复强依赖Mosaic、翻转等3.5 学习率调度与 Batch 的耦合YOLO / 传统 CV常用 Cosine Annealing 或 StepLRBatch Size 翻倍 → LR 线性翻倍Linear Scaling RuleWarmup 通常 3~5 个 Epoch占训练总量 ~2%LLM 预训练Cosine Decay 长 Warmup通常 2000 步约占总步数 0.1%~0.5%Global Batch Size 从 4M tokens 提到 16M tokens 时LR 需要同步调整常用 sqrt scaling 而非 linear scaling因为大 batch 下 linear rule 过于激进训练末期 LR 衰减至峰值的 10% 左右最后可能还有一段annealing阶段用高质量数据做低 LR 收尾四、一个具体的数值案例对比案例 ALLaMA 3 70B 预训练简化模型参数 70B 训练数据 15T tokens 序列长度 8192 tokens Global Batch Size4M tokens / step 总 Step 数 15T / 4M ≈ 3,750,000 steps 总 Epoch 数 ≈ 1数据只过一遍 集群规模 6144 × H100 GPU 训练时长 ~54 天案例 BYOLOv8m 在 COCO 上训练模型参数 ~25.9M 训练数据 118K 张图COCO train 输入尺寸 640 × 640 Batch Size 16单卡× 8 卡 128 张/step Steps/Epoch 118000 / 128 ≈ 922 steps 总 Epoch 300 总 Step 数 922 × 300 ≈ 276,600 steps 训练时长 ~2 天8×A100直观感受指标LLaMA 3 70BYOLOv8m总 Step 数375 万27.6 万每 Step 数据量4M tokens≈ 300 万词128 张图数据被看的遍数~1 遍300 遍训练的核心矛盾算力效率MFU数据利用率小数据防过拟合五、为什么 LLM 预训练中 Epoch 消失了这不是偶然而是三个因素共同作用的结果5.1 数据量碾压模型容量当训练数据有 15T tokens、模型只有 70B 参数时数据量远超模型能记住的上限。重复遍历不仅无益反而有害——模型会开始逐字记忆训练文本丧失泛化能力即记忆化污染。5.2 Compute-Optimal 约束Chinchilla 定律告诉我们给定计算预算数据量和模型大小存在最优配比。在这个配比下数据恰好被用一遍就耗尽了算力预算。多跑一个 Epoch 意味着要么砍模型参数要么超出算力预算。5.3 工程叙事的变化在 LLM 团队的日常沟通中进度追踪单位变成了Tokens consumed已消耗 token 数Steps completed已完成步数MFUModel FLOPs Utilization算力利用率“Epoch这个词在预训练语境下变得没有信息量——因为答案永远是大约 1”。六、Batch Size 选择的工程权衡6.1 LLM 场景考量大 Global Batch如 4M tokens小 Global Batch如 256K tokens梯度估计方差小方向稳定方差大有噪声训练效率GPU 利用率高通信占比低GPU 空闲多通信频繁收敛质量可能陷入 sharp minima泛化略差噪声有正则化效果泛化可能更好显存需求需要更多卡或梯度累积单节点可跑LR 适配需要更大 LR 更长 Warmup小 LR 即可工业实践预训练通常选择 2M~4M tokens 的 Global Batch微调SFT通常 128~512 条序列RLHF 阶段可能更小32~128。6.2 YOLO / CV 场景考量大 Batch64小 Batch4~8BN 统计准确训练稳定噪声大可能用 SyncBN 或 GroupNorm 替代数据增强单步内增强多样性有限每步变化多隐式正则检测精度可能略降sharp minima通常更好训练速度快慢YOLO 的特殊性由于 Mosaic 增强4 张图拼 1 张的存在实际 batch 内的有效样本是标称值的 4 倍这本身就是一种隐式的 batch 扩大。七、梯度累积连接 Micro 与 Global 的桥梁在 LLM 训练中单卡显存往往只能容纳很小的 Micro Batch如 1~2 条 8192-token 序列。梯度累积允许我们在不增加显存的前提下模拟大 Batch# 伪代码示意formicro_stepinrange(gradient_accumulation_steps):batchnext(dataloader)# 取一个 micro batchlossmodel(batch)/grad_accum_steps loss.backward()# 梯度累加不清零optimizer.step()# 所有 micro batch 梯度攒完后统一更新optimizer.zero_grad()此时Global Batch Size Micro Batch Size × Num GPUs × Gradient Accumulation Steps在 YOLO 训练中梯度累积较少使用——因为图像分辨率固定、显存需求可预测通常直接调 Batch Size 即可。八、总结一张对照表收尾对比维度LLM 预训练LLM 微调SFTYOLO / 传统 CVBatch 单位token 序列如 8192 tokens指令-回答对变长padding/packing图像如 640×640典型 Global Batch2M~4M tokens128~512 条样本64~128 张图总 Step 量级百万级数百~数千数万~数十万Epoch 数≈ 1甚至 13~5100~300进度度量Tokens consumed / StepsEpoch / StepsEpochNorm 层RMSNorm与 batch 无关同左BatchNorm强依赖 batch数据增强无或极轻微无 / 轻微改写重度Mosaic、HSV、翻转核心矛盾算力效率 vs 数据质量防过拟合 vs 学新知识数据利用率 vs 泛化LR 与 Batch 关系sqrt scaling 为主线性或 sqrt线性 scaling九、写在最后理解 Batch、Step、Epoch 不仅仅是背定义它背后映射的是一个模型如何在有限算力下从有限数据中提取最大信息这个根本问题。在 YOLO 的世界里数据是稀缺品所以用 Epoch 反复压榨在 LLM 的世界里算力是稀缺品所以数据只过一遍、把每一步的 MFU 逼到极致在 LLM 微调的世界里高质量数据再次变得稀缺Epoch 又回到了舞台中央。同一个概念在不同资源约束下扮演着截然不同的角色。这或许就是工程与算法交汇处最迷人的地方。参考Chinchilla Scaling Laws (Hoffmann et al., 2022)LLaMA 3 Technical Report (Meta, 2024)YOLOv8 Documentation (Ultralytics)Megatron-LM Training Framework (NVIDIA)