大批量训练的梯度累积技术 | AI生成和翻译

Home 2025.11

Andrej Karpathy 对梯度累积步骤的解析

在其 YouTube 视频《Let’s build GPT: from scratch, in code, spelled out》(关于从零开始实现和训练 GPT 类模型的详细教程)中,Andrej Karpathy 在 2:51:40 左右讨论了梯度累积。他主要将其作为在 GPU 内存有限的硬件上训练大语言模型的实用解决方案,同时仍能模拟原始 GPT-2 和 GPT-3 论文中描述的大规模有效批次大小(例如 50 万个 token)。以下是其核心观点的梳理:

为何使用梯度累积?

本质上,这是一种并行性的“串行模拟”:您以小数据块处理数据,但像处理一个大批次那样累积梯度,从而无需数据中心即可实现可扩展的训练。

其工作原理(在他的实现中)

Karpathy 在 PyTorch 中显式实现了它:

  1. 设置一个小的微批次大小(例如 4-8 个样本),使其适应 GPU 内存。
  2. 运行 accumulation_steps 次迭代(例如 32 步)的前向和反向传播,每次元素级求和梯度而不更新权重。
  3. 所有步骤完成后,使用累积的梯度执行一次优化器步骤
  4. 将损失按 1/accumulation_steps 缩放以进行归一化。

这确保了有效批次大小为 微批次大小 × 累积步数 × 序列长度。他结合了混合精度训练、FlashAttention 和 torch.compile 等技巧以提高效率。

额外内容:通过权重绑定的隐式累积

Karpathy 还将此与权重绑定(在 GPT-2 风格中共享 token 嵌入矩阵 wte 与输出头)联系起来。在反向传播期间,来自输入嵌入和输出 logits 的梯度“自然累积”到同一张量中——节省约 30% 的参数,并添加了输入/输出表示应对齐的归纳偏置。引述:“在反向传播中,我们将从两个分支获得梯度贡献……这些梯度将在 wte 张量上累加。”

总之,这些技术让您能在单 GPU 上训练 GPT 规模的模型,同时忠实复现论文结果。完整上下文请观看视频中约 2:50:00 之后的部分。

Let’s build GPT: from scratch, in code, spelled out


Back

x-ai/grok-4.1-fast

Donate