梯度累积
梯度累积可让您在更新权重之前对几个小批量的梯度求和,从而在有限的 GPU 内存上模拟大批量。
概述
It is the standard workaround for training big models when memory is the bottleneck.
深入探讨
通常,训练步骤处理一批、计算梯度并立即更新参数。通过梯度累积,您可以在较小的微批次上运行多次前向和后向传递,将它们的梯度添加到参数缓冲区中,并且仅在 N 个微批次之后调用优化器步骤(并将梯度归零)。有效批量大小变为微批量大小乘以 N,即使峰值内存仅保存一个微批量激活。这很重要,因为许多训练方法都假设大批量来实现稳定的统计数据,并且像大型变压器这样的模型无法在单个设备上容纳完整的目标批次。问题是:批量归一化统计数据是按微批次计算的,因此层范数或组范数与累积更好地配对,并且您必须正确缩放损失以保持正确的有效学习率。
技术洞察
由于总损失的梯度是相加的,因此只要正确平均,在 N 个微批次上累积梯度在数学上相当于一大批次。实现通常在向后之前将每个微批次损失除以 N,因此累积梯度等于整个有效批次的平均值。您可以跳过optimizer.step() 和zero_grad() 直到第N 个微批次,用额外的计算时间换取减少的峰值内存。
战略影响
成本与预算
多年来,架构决策决定着性能和运营成本。
更清晰的判决
技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
质量控制
更好的工程选择可以减少生产中的可靠性事故。
梯度累积的未来
随着模型大小超过单设备内存,梯度累积将保持默认水平。它越来越多地与 DeepSpeed 和 FSDP 等框架中的混合精度、激活检查点、ZeRO 分片和管道并行性相结合。预计自动化会更严格,库会自动调整累积步骤以达到内存预算,并且在普通硬件上微调大型模型仍然很重要,包括消费级 GPU,它可以解锁原本不可能进行的训练。
现实世界的实施
通过累积超过 8 或 16 个微批次以达到数百个有效批次,在单个消费级 GPU 上微调大型语言模型。
训练高分辨率视觉或分割模型,即使 2 个批次也适合,但配方需要 32 个有效批次。
Hugging Face Trainer 和 PyTorch Lightning 公开了在有限 VRAM 设置中常规使用的gradient_accumulation_steps 设置。
通过累加匹配有效批量大小,在较小的硬件上重现论文的大批量结果。
风险与防护栏
优化一项基准测试可以隐藏更广泛的系统弱点。
基础设施和维护成本常常被低估。
随着系统变得更加复杂,安全性和可观察性差距可能会扩大。
实施路线图
在实施之前定义延迟、质量和成本目标。
在实际负载和数据条件下进行基准测试。
仪器监控错误、漂移和用户影响。
在扩展之前准备回滚和事件响应路径。
不断探索
Free newsletter
Get the daily AI briefing
Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.
One email each weekday. Unsubscribe in one click. We never sell or share your address.
Test yourself
Take the Gradient Accumulation quiz
Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.
Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation
常见问题
What is Gradient Accumulation?
梯度累积可让您在更新权重之前对几个小批量的梯度求和,从而在有限的 GPU 内存上模拟大批量。当内存成为瓶颈时,这是训练大型模型的标准解决方法。
梯度积累主要让你做什么?
通过在更新之前对几个微批次的梯度求和,您可以模拟一个大批次,而无需将其全部保存在内存中。
在累积过程中,什么时候调用优化器的步骤并将梯度归零?
您可以在 N 个微批次中累积梯度,并在周期结束时仅更新一次。
哪个归一化层与梯度累积配对得更干净?
批次归一化计算每个微批次的统计数据,因此层或组归一化可以避免与小微批次的不匹配。