技术指南

混合精准训练

混合精度训练通过以 16 位浮点而不是 32 位执行大部分数学运算来加速神经网络训练并减少内存使用。

概述

混合精度训练通过以 16 位浮点而不是 32 位执行大部分数学运算来加速神经网络训练并减少内存使用。它可以让相同的 GPU 更快地训练更大的模型,而几乎不会损失准确性。

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

深入探讨

传统训练以 32 位浮点 (FP32) 存储权重并运行数学。混合精度使用较低精度的 16 位格式(FP16 或 bfloat16)进行大量矩阵乘法,同时保留权重的 32 位“主副本”以实现稳定更新。由于 16 位数字的大小只有一半,因此更适合 GPU 内存,并且 Tensor Core 处理它们的速度大约快 2-8 倍。问题是 FP16 的范围很窄:微小的梯度可能会下溢到零。标准的修复方法是损失缩放,它在反向传播之前将损失乘以一个大因子,以便小梯度保持可表示性,然后在权重更新之前将其除掉。 NVIDIA 的 Apex 以及 PyTorch 和 TensorFlow 中的内置 AMP(自动混合精度)可自动执行此操作。

技术洞察

FP16 只有 5 个指数位,动态范围较小,会导致梯度下溢。 Bfloat16 保留 8 个指数位(与 FP32 的范围匹配),但尾数位较少,因此它很少需要损失缩放 - 这是 Google TPU 和现代 GPU 青睐它的关键原因。 Tensor Core 通过将 16 位操作数相乘但在 FP32 中累加部分和来加速工作,从而在求和误差会复合的情况下保持精度。

掌握混合精准训练

混合精度训练通过以 16 位浮点而不是 32 位执行大部分数学运算来加速神经网络训练并减少内存使用。它可以让相同的 GPU 更快地训练更大的模型,而几乎不会损失准确性。混合精度训练是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。为了建立深入的理解,请将混合精度训练视为一种操作模型,而不是单一功能:定义期望的结果,澄清假设,并将系统可以可靠地完成的任务与仍需要专家判断的任务分开。

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

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

战略影响

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

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

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

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

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

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

混合精度训练的未来

精度不断下降。 NVIDIA Hopper 和 Blackwell GPU 支持的 FP8 训练正在成为前沿模型的标准,并且对 FP4 和微缩放格式 (MXFP) 的研究也在进一步推进。期望框架能够自动选择每层精度,硬件能够原生处理更窄的格式,量化感知训练能够模糊低精度训练和推理之间的界限,从而降低训练万亿参数模型的成本。

现实世界的实施

PyTorch 的 torch.cuda.amp.autocast 包装了一个训练循环,将单个 GPU 上的内存大致减半并将吞吐量加倍

在 TPU 上训练大型语言模型,例如 bfloat16 中的 GPT 式转换器,以避免损失缩放调整

通过将 ResNet 图像训练从 FP32 切换到 FP16,在消费级 RTX GPU 上安装更大的批量大小

NVIDIA H100 GPU 上的 FP8 混合精度可降低预训练前沿规模模型的成本

实施模式

混合精度训练实践

PyTorch 的 torch.cuda.amp.autocast 包装了一个训练循环,以将单个 GPU 上的内存大致减半并使吞吐量加倍。

PyTorch 的 torch.cuda.amp.autocast 封装了一个训练循环,以将单个 GPU 上的内存大致减半并使吞吐量加倍。当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

混合精度训练实践

在 TPU 上训练大型语言模型,例如 bfloat16 中的 GPT 式转换器,以避免损失缩放调整。

在 TPU 上的 bfloat16 中训练大型语言模型(例如 GPT 式转换器)以避免损失扩展调整 团队在预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

混合精度训练实践

通过将 ResNet 图像训练从 FP32 切换到 FP16,在消费级 RTX GPU 上安装更大的批量大小。

通过将 ResNet 图像训练从 FP32 切换到 FP16,在消费级 RTX GPU 上安装更大的批量大小 当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

混合精度训练实践

NVIDIA H100 GPU 上的 FP8 混合精度可降低预训练前沿规模模型的成本。

NVIDIA H100 GPU 上的 FP8 混合精度可降低预训练前沿规模模型的成本当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

风险与防护栏

!

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

!

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

!

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

实施路线图

1

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

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

2

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

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

3

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

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

4

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

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

不断探索