真实面经题目 · 原创解析

大模型训练或微调时,batch size 过大或过小分别会带来哪些收敛、泛化、吞吐和显存问题?当有效 batch size 改变时,学习率是否需要结合 scaling rule、warmup 和梯度累积一起调整?

这道题考察大模型训练/微调中 batch size 与学习率、显存、吞吐、泛化和稳定性的联动。好的回答要区分 micro batch、global batch、梯度累积,并说明 scaling rule 只能作为起点,必须配合 warmup 和验证集监控。

出现于:滴滴 · 算法

60 秒回答模板

batch size 不能只理解成越大越快。micro batch 决定单卡显存和每步计算形态,gradient accumulation 决定多少个 micro step 累成一次优化器更新,global/effective batch size 才是一次参数更新看到的样本量。batch 太小会导致梯度噪声大、loss 抖动、吞吐低、通信和优化器开销占比高,但有时泛化更好,也适合显存受限的微调。batch 太大能提高硬件利用率、让梯度估计更稳定,但会占用显存、降低更新频率,可能需要更多 warmup,泛化变差或陷入 sharp minima,超过临界 batch 后吞吐收益也会下降。 学习率通常要随有效 batch 调整,但不能机械套公式。常见线性 scaling 是 batch 放大 k 倍,学习率也近似放大 k 倍;sqrt scaling 更保守,适合噪声和稳定性更敏感的场景。大模型预训练、SFT、LoRA/QLoRA、RLHF 阶段的稳定性不同,应该把 scaling rule 当初始搜索点,再用 warmup、梯度裁剪、weight decay、optimizer beta、loss spike 监控和验证集指标校准。如果通过梯度累积增大 effective batch,显存没有等比例增加,但更新步数变少,学习率 schedule、warmup steps 和日志口径也要按 optimizer step 而不是 micro step 重新核算。

考点 先定义 micro batch、global batch 和 effective batch
难度 真实面经题
回答目标 让候选人能从训练稳定性和系统效率两侧解释 batch size,并给出学习率、warmup、梯度累积和评估指标的联动方案。

深入解析

01

batch 定义

先区分 micro batch、per-device batch、gradient accumulation 和 global batch。面试中若不说明有效 batch,讨论学习率和吞吐会混乱。

02

小 batch 影响

小 batch 梯度噪声大、loss 抖动明显、吞吐可能低,但更新频率高,占用显存少,有时有更好的正则化效果。微调小数据集时过大 batch 反而可能快速过拟合。

03

大 batch 影响

大 batch 梯度更稳定、GPU 利用率更好,但显存压力更高、通信成本更大、每个 epoch 的 optimizer step 更少,可能需要更长 warmup 和更谨慎的学习率。

04

学习率缩放

线性 scaling 和 sqrt scaling 都是经验起点。真正要看 loss 曲线、梯度范数、验证集效果和训练是否出现 spike。不同任务、优化器和模型规模不能直接照搬。

05

梯度累积

梯度累积可以在显存不变的情况下提高 effective batch,但会降低参数更新频率。学习率 schedule、warmup、保存和评估间隔最好按 optimizer update step 设计。

06

工程取舍

最终要平衡吞吐、显存、通信、收敛速度、泛化和成本。可用混合精度、ZeRO/FSDP、activation checkpoint、sequence packing 和动态 batch 改善资源利用。

易错点

  • 把 per-device batch 当成全局 effective batch。
  • 认为 batch 越大训练一定越好。
  • 学习率只按公式缩放,不看 warmup、loss spike 和验证集。
  • 忽略梯度累积会减少 optimizer update 次数。
  • 只讨论显存,不讨论吞吐、通信、泛化和收敛效率。
  • 微调小数据时仍照搬预训练的大 batch 经验。

面试官追问

batch size 加倍后训练 loss 突然 spike,怎么办?

先回退或降低学习率,增加 warmup,检查梯度裁剪、混合精度溢出、数据异常和 optimizer step 口径。不要只因为 batch 变大就机械线性放大学习率。

LoRA 微调时 batch size 选择有什么不同?

LoRA 可训练参数少,显存压力主要来自激活和基座模型,过大 batch 在小数据上可能让模型快速记忆格式。应更关注验证集、任务指标和过拟合,而不只是吞吐。

梯度累积和真实大 batch 完全等价吗?

在数学梯度上接近,但 BatchNorm、dropout 随机性、优化器 step 频率、通信、数值精度和日志 schedule 会有差异。LLM 常无 BatchNorm,但仍要注意 update step 口径。

如何找到临界 batch?

可以逐步放大 batch,看吞吐是否继续提升、达到同等 loss 所需 token 数是否变多、验证集是否变差。超过某点后更大 batch 只省墙钟时间但消耗更多样本或泛化变差。