技术指南

梯度累积

梯度累积可让您在更新权重之前对几个小批量的梯度求和,从而在有限的 GPU 内存上模拟大批量。

概述

梯度累积可让您在更新权重之前对几个小批量的梯度求和,从而在有限的 GPU 内存上模拟大批量。当内存成为瓶颈时,这是训练大型模型的标准解决方法。

梯度累积是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。

深入探讨

通常,训练步骤处理一批、计算梯度并立即更新参数。通过梯度累积,您可以在较小的微批次上运行多次前向和后向传递,将它们的梯度添加到参数缓冲区中,并且仅在 N 个微批次之后调用优化器步骤(并将梯度归零)。有效批量大小变为微批量大小乘以 N,即使峰值内存仅保存一个微批量激活。这很重要,因为许多训练方法都假设大批量来实现稳定的统计数据,并且像大型变压器这样的模型无法在单个设备上容纳完整的目标批次。问题是:批量归一化统计数据是按微批次计算的,因此层范数或组范数与累积更好地配对,并且您必须正确缩放损失以保持正确的有效学习率。

技术洞察

由于总损失的梯度是相加的,因此只要正确平均,在 N 个微批次上累积梯度在数学上相当于一大批次。实现通常在向后之前将每个微批次损失除以 N,因此累积梯度等于整个有效批次的平均值。您可以跳过optimizer.step() 和zero_grad() 直到第N 个微批次,用额外的计算时间换取减少的峰值内存。

掌握梯度累积

梯度累积可让您在更新权重之前对几个小批量的梯度求和,从而在有限的 GPU 内存上模拟大批量。当内存成为瓶颈时,这是训练大型模型的标准解决方法。梯度累积是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。为了建立深入的理解,请将梯度累积视为一种操作模型,而不是单一特征:定义期望的结果,澄清假设,并将系统可以可靠地完成的任务与仍需要专家判断的任务分开。

在实践中,强大的团队使用梯度累积根据可靠性和成本优化架构、数据和基础设施选择。他们记录明确的成功标准,根据实际数据和工作流程进行测试,并根据观察到的失败模式而不是一次性基准测试胜利进行迭代。这就是理论理解转变为跨产品、政策和运营的持久能力的地方。

多年来,架构决策决定着性能和运营成本。与此同时,优化一个基准测试可以隐藏更广泛的系统弱点。最具弹性的方法是将实验速度与治理规则结合起来:运行试点、捕获证据、发布决策日志,并随着模型行为、用户期望和监管要求的发展不断更新保障措施。

战略影响

多年来,架构决策决定着性能和运营成本。

多年来,架构决策决定着性能和运营成本。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

更好的工程选择可以减少生产中的可靠性事故。

更好的工程选择可以减少生产中的可靠性事故。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

梯度累积的未来

随着模型大小超过单设备内存,梯度累积将保持默认水平。它越来越多地与 DeepSpeed 和 FSDP 等框架中的混合精度、激活检查点、ZeRO 分片和管道并行性相结合。预计自动化会更严格,库会自动调整累积步骤以达到内存预算,并且在普通硬件上微调大型模型仍然很重要,包括消费级 GPU,它可以解锁原本不可能进行的训练。

现实世界的实施

通过累积超过 8 或 16 个微批次以达到数百个有效批次,在单个消费级 GPU 上微调大型语言模型。

训练高分辨率视觉或分割模型,即使 2 个批次也适合,但配方需要 32 个有效批次。

Hugging Face Trainer 和 PyTorch Lightning 公开了在有限 VRAM 设置中常规使用的gradient_accumulation_steps 设置。

通过累加匹配有效批量大小,在较小的硬件上重现论文的大批量结果。

实施模式

梯度累积实践

通过累积超过 8 或 16 个微批次以达到数百个有效批次,在单个消费级 GPU 上微调大型语言模型。

通过累积超过 8 或 16 个微批次来微调单个消费者 GPU 上的大型语言模型,以达到数百个有效批次。当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

梯度累积实践

训练高分辨率视觉或分割模型,即使 2 个批次也适合,但配方需要 32 个有效批次。

训练高分辨率视觉或分割模型,即使一批 2 个都适合,但有效的配方需要 32 个批次。当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会得到更好的结果。

梯度累积实践

Hugging Face Trainer 和 PyTorch Lightning 公开了在有限 VRAM 设置中常规使用的gradient_accumulation_steps 设置。

Hugging Face Trainer 和 PyTorch Lightning 公开了在有限 VRAM 设置中常规使用的gradient_accumulation_steps 设置。当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

梯度累积实践

通过累加匹配有效批量大小,在较小的硬件上重现论文的大批量结果。

通过积累匹配有效批量大小,在较小的硬件上重现论文的大批量结果 当团队预先定义质量阈值、为边缘情况保留人工升级路径并跟踪一段时间内的生产力增益和错误成本时,通常会获得更好的结果。

风险与防护栏

!

优化一项基准测试可以隐藏更广泛的系统弱点。

!

基础设施和维护成本常常被低估。

!

随着系统变得更加复杂,安全性和可观察性差距可能会扩大。

实施路线图

1

在实施之前定义延迟、质量和成本目标。

在实施之前定义延迟、质量和成本目标。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

2

在实际负载和数据条件下进行基准测试。

在实际负载和数据条件下进行基准测试。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

3

仪器监控错误、漂移和用户影响。

仪器监控错误、漂移和用户影响。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

4

在扩展之前准备回滚和事件响应路径。

在扩展之前准备回滚和事件响应路径。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

不断探索