大数跨境

训练大型语言模型的挑战

训练大型语言模型的挑战 索引目录
2025-05-07
1
导读:训练大型语言模型的挑战大型语言模型 (LLM) 彻底革新了人工智能,推动了自然语言处理、代码生成和多模态推理领

训练大型语言模型的挑战

大型语言模型 (LLM) 彻底革新了人工智能,推动了自然语言处理、代码生成和多模态推理领域的突破。尽管它们功能强大,但训练这些模型的成本仍然高昂,需要耗费大量的计算资源和能源。例如,训练 GPT-3 耗费了大约 355 个 GPU 年,耗资 460 万美元,这给研发带来了巨大的障碍。

低精度训练已成为应对这些挑战的一种有效解决方案。通过降低权重、梯度和激活函数的数值精度(从 32 位浮点 (FP32) 切换到 16 位甚至 8 位格式),研究人员可以显著降低内存使用量、通信开销和计算成本,同时保持具有竞争力的模型性能。

其优势非常引人注目:

  • 减少内存占用:从 FP32 切换到 FP16 可将内存使用量减半,从而在现有硬件限制内实现更大的模型或批量大小

  • 更高的计算吞吐量:现代硬件加速器为低精度操作提供了显著的加速

  • 更低的能耗:更少的晶体管开关意味着更低的功率需求

  • 降低通信成本:低精度数据交换提高分布式训练效率

GPU 架构已专门发展以适应这种精度降低的趋势。如下表所示,每一代 GPU 都扩展了对更高效数值格式的支持:


GPU P4 V100 A100 H100 B100
Architecture Pascal Volta Ampere Hopper Blackwell
CUDACore FP32

FP16

BF16

FP8

FP6/FP4
TensorCore FP32

FP16

BF16

FP8

FP6/FP4


比较 NVIDIA GPU 各代支持的精度,显示向低精度计算能力的演变。

Hopper 架构在 Tensor Core 中引入了原生 FP8 支持,标志着一个里程碑,而最新的 Blackwell 架构则扩展了 FP6 和 FP4 支持。这一硬件演进体现了业界致力于为大规模模型实现高效低精度计算的决心。

尽管取得了这些进展,但该领域缺乏一个能够综合现有技术、挑战和未来方向的全面综述。现有方法在不同的数字表示、目标组件和训练场景上存在碎片化,难以追踪整体进展。这种碎片化促使我们系统地回顾低比特大型语言模型,以期为这个快速发展的领域提供架构。

了解数字格式和训练组件

数字表示格式:低精度训练的基础

数值格式的选择从根本上影响了模型的训练效率。主要有以下三个类别:

1. 定点和整数格式

定点表示法通过为整数和小数部分分配固定数量的位来表示小数。当小数部分未分配任何位时,它将简化为常规的整数表示法。

定点运算的一个关键优势是其硬件效率——它消除了对浮点单元的需求。然而,其静态精度需要精心设计,以防止出现溢出或下溢错误。

2. 浮点格式

现代计算系统主要使用浮点表示法,因为它们能够处理宽动态范围。浮点数通常包含三个部分:

  • 符号位:决定数字的符号

  • 指数:控制动态范围

  • 尾数:控制精度

常见格式包括 FP32(单精度)、FP16(半精度)、BF16(脑浮点)以及新兴的超低精度格式,如 FP8、FP6 和 FP4。

3. 定制格式

除了标准表示之外,还专门为深度学习应用设计了 Posit、Flexpoint 和 Microscaling 等专门的数字格式。


可视化展示低精度训练中使用的常见定点、整数和浮点数格式的结构。

不同的低精度组件:可以优化哪些方面

可以使用低精度算法来优化训练过程的几个组成部分:

  1. 模型权重(θₜ):定义模型的参数

  2. 激活(f_θ(x)):前向传递过程中计算的输出

  3. 梯度(g_t):反向传播过程中计算的导数

  4. 优化器状态(s_t):内部状态,如动量或自适应估计


通用模型训练流程展示了可以用低精度方法优化的各种组件。

不同的方法可能针对其中一个或多个组件,对训练效率和模型性能的影响也各不相同。挑战在于确定哪些组件可以安全地量化,以及量化到何种程度,同时又不影响收敛性或准确性。这种平衡对于语言模型的直接量化训练尤为重要,因为这类模型通常会采用随机舍入技术。

定点和整数训练方法:从经典到前沿

定点训练:降低精度的早期方法

早期研究侧重于定点格式,因为它们的硬件效率更高。Gupta 等人提出了一种开创性方法,引入了随机舍入来保留梯度信息,否则,当小值舍入为零时,这些信息会丢失。这种无偏舍入方案确保即使是小的参数更新也能保持对模型产生影响的非零概率。

在此基础上,夏等人针对二分类任务,增强了随机舍入算法,在指定区间内采用 0.5 的恒定概率。这一改进不仅保留了更多的梯度信息,也为硬件实现提供了优势。

FxpNet 通过将自适应定点格式应用于原始参数和梯度,进一步提升了定点训练的性能。该方法能够动态调整不同层级变量组的缩放因子,使 12 位定点表示能够达到与浮点表示相当的精度。

Sakr 等人开发了一种全面的 SGD 算法,其中所有参数和计算均采用具有最低精度的定点算法。他们的方法通过解决量化噪声、动态范围约束和训练稳定性等关键挑战,确保了训练收敛性和模型准确性。

整数训练:硬件优化方法的兴起

随着处理器和专用加速器针对整数运算的优化日益加深,研究转向了整数量化技术。这些方法可以分为三类:

  1. 通用整数训练在整个训练过程中对权重、激活和梯度进行量化。DoReFa-Net 率先采用了这种方法,允许在训练和推理中使用位级卷积核。WAGE 进一步构建了一个框架,通过将所有组件量化为低位宽整数,实现了训练和推理的离散化。
    后续研究通过新颖的量化方案改进了整数训练。Miyashita 等人用以 2 为底的对数量化取代了定点表示,以便更好地捕捉较大的动态范围。HALP 将随机方差降低梯度与针对低精度数字定制的动态重新居中技术相结合。

  2. 以优化器为目标的整数训练侧重于量化优化器状态(例如动量),以减少内存消耗。MicroAdam 就是这种方法的典型代表,它采用了改进的舍入策略和异常值处理,以适应 Adam 优化器状态的各种数值需求。

  3. 以通信为目标的整数训练通过量化设备间交换的权重或梯度来提高分布式训练效率。像 QSGD 这样的方法在参数同步期间对梯度应用有损压缩,从而显著降低通信开销,同时最大程度地降低对收敛的影响。

对量化技术的全面研究揭示了精度降低和保持模型性能之间所需的复杂平衡。

进制训练:极端量化

在量化的极端情况下,二元神经网络 (BNN) 代表了一种将权重和激活量化为 ±1 的方法。这种极端量化用简单的加减运算取代了乘法累加运算,从而显著降低了计算复杂度。

BinaryConnect 通过在梯度累积过程中保持全精度权重,同时使用二进制值进行前向和后向传播,为现代 BNN 方法奠定了基础。XNOR-Networks 通过对层输入进行二值化扩展了此方法,使卷积运算的加速高达 58 倍。

对于分布式训练,1 位梯度压缩技术显著降低了带宽开销。Seide 等人证明,将 1 位梯度量化与误差反馈(累积量化残差)相结合,可以实现几乎与全精度随机梯度下降 (SGD) 相当的准确率,同时显著降低通信成本。

浮点训练方法:行业标准

16 位浮点训练:当前生产标准

16 位浮点格式因其在效率和准确性方面的平衡,已在业界得到广泛采用。现代深度学习框架广泛支持这些格式,其中 FP16 和 BF16 成为主流选择。

Micikevicius 等人率先通过三种关键技术解决了 FP16 训练的动态范围有限问题:

  • 维护权重的 FP32 主副本以实现准确的梯度更新

  • 应用损失缩放来防止梯度下溢

  • 在算术运算中使用 FP32 累加进行部分乘积

这些策略使 FP16 训练在各种架构上达到与 FP32 相当的准确度。

后来,赵等人在此基础上进行了改进,提出了梯度缩放方法,可以在反向传播过程中动态调整每个张量的尺度。该方法确保估计的下溢率保持在预定阈值以下,同时避免溢出,从而提高训练稳定性。

BF16(脑浮点)已成为一种强大的替代方案,并具有固有的优势。Kalamkar 等人证明,BF16 提供了与 FP32 相当的动态范围,无需进行超参数调整,并简化了精度转换。因此,BF16 已逐渐取代 FP16,成为 16 位训练的默认格式。

低于 8 位的浮点训练:突破精度界限

研究越来越关注大幅降低精度,探索 8 位甚至 4 位浮点格式。由于表示范围大幅缩减,这一方向面临着巨大的挑战。

FP8 训练的早期尝试表明,准确率会大幅下降,尤其是在像 Transformer 这样的复杂架构中。Sun 等人提出了一种混合格式方法来解决这一问题,使用 E4M3(4 位表示指数,3 位表示尾数)进行正向传递,使用 E5M2 进行反向传递。这种方法能够在各种任务上成功训练,且准确率不会降低。

超低精度的前沿已扩展到 4 位训练。Sun 等人率先使用 Radix-4 FP4 格式 (E3M0) 结合专门的舍入方案和梯度缩放技术进行了 4 位训练。Wang 等人进一步扩展了这一方向,为权重引入了可微量化估计器,并添加了用于精确梯度估计的校正项以及用于激活的异常值补偿策略。

DeepSeek-V3 取得了显著突破,代表了 FP8 训练在工业规模场景中的首次成功应用。该方法融合了细粒度量化技术,包括根据模型组件的敏感度为其提供不同的精度级别。探索语言模型的 FP4 精度代表了该研究方向的前沿。

自定义数值格式:深度学习的专用解决方案

除了标准定点和浮点表示之外,研究人员还专门针对深度学习工作负载开发了定制的数字格式:

Posit提供了一种替代传统浮点数的方法,它具有诸多优势:增强的动态范围、更高的精度以及跨平台的逐位可重复性。Posit 采用由符号位、状态位、指数位和分数位组成的动态分段结构,其中仅对必要的部分进行编码。Lu 等人证明,当与张量级缩放相结合时,8 位 Posit 表示可以达到与更高精度浮点格式相当的精度。

Flexpoint通过引入可动态调整共享指数的张量,结合了定点和浮点的优势。这种方法通过基于历史最大张量值估算指数值,最大限度地减少了溢出,同时最大化了可用的动态范围。一个关键的效率优势来自于在整个张量之间分摊指数的存储和通信。

FloatSD(浮点有符号数字)减少了权重表示中非零数字的数量。这将卷积运算从乘法简化为移位被乘数的加法,从而显著提高了计算效率。

MLS(多级缩放)通过逐元素缩放来提高动态范围,并结合组缩放来降低逐元素指数的位宽,从而实现表示能力与能效之间的最佳平衡。

微缩放将每个块的缩放因子(通常为 E8M0 格式)与低精度元素值(例如 FP8、INT8)相结合,以创建高效的变体,如 MXFP8 或 MXINT8。

这些自定义格式通常需要专门的硬件支持,但可以为特定的深度学习场景提供显著的优势。

量化感知训练技术:一种相关方法

虽然低精度训练旨在降低前向和后向传递过程中的精度,但有一种相关方法称为量化感知训练(QAT),其专注于为低精度推理准备模型。

二进制和三元 QAT方法代表了极端量化场景。BitNet 率先为 LLM 开发了 1 位 Transformer,采用二进制权重和 8 位激活函数,同时在训练期间保持高精度梯度。BitNet b1.58 通过绝对均值量化将其扩展至三元参数。

具有知识蒸馏功能的 QAT将量化与师生方法相结合。LLM-QAT 采用无数据蒸馏技术,从预训练模型生成合成数据来指导 4 位量化,而无需原始训练数据。BitDistiller 利用全精度模型作为教师,并采用定制的非对称量化和裁剪策略。

其他 QAT 方法突破了量化技术的界限。EfficientQAT 通过两阶段训练策略解决内存挑战:首先逐块训练模型和量化参数,然后单独进行量化参数的端到端训练。QuEST 通过 Hadamard 归一化和 MSE 最优拟合同时提高了准确率和速度

了解低精度训练后量化的难度为有效实施 QAT 提供了关键见解。

低精度训练的系统支持:实践应用

实现低精度训练需要强大的软件框架和专用库来管理数值稳定性、数据类型转换和硬件优化。下表总结了支持低精度训练的关键框架和库:


Framework/Library Key Low-Precision Features Primary Focus / Notes
PyTorch Native AMP, GradScaler General-purpose deep learning
TensorFlow Native Mixed Precision, Auto loss scaling General-purpose deep learning
JAX Explicit precision control General-purpose deep learning
PaddlePaddle AMP with automatic operator casting (FP16 focus) General-purpose deep learning
DeepSpeed Enhanced AMP, ZeRO integration, Exp. 4/8-bit QAT, 1-bit optimizers Large-scale model training (extends PyTorch)
Megatron-LM/Core Optimized kernels, FP8 support (Hopper), Parallelism APIs LLM training (PyTorch-based)
bitsandbytes 8-bit optimizers, 4/8-bit quantization functions Lightweight CUDA wrappers, LLM memory reduction
NVIDIA Apex Early AMP & distributed tools (now largely deprecated) Historical PyTorch extension (use native PyTorch)
Colossal-AI Simplified AMP (FP16/BF16 planned), Exp. FP8 linear/communication Simplifying large model training
Transformer Engine FP8-optimized Transformer layers, Auto scaling factors, QAT support Accelerating Transformer models (NVIDIA GPUs)


为低精度训练提供系统支持的软件框架和库的总结。

PyTorch、TensorFlow、JAX 和 PaddlePaddle 等主流框架都提供了内置功能,可将低精度技术集成到标准训练工作流程中。PyTorch 的自动混合精度 (AMP) 功能在训练过程中将 FP32 运算与低精度格式相结合,自动执行运算转换,并采用梯度缩放来保持数值稳定性。

专门针对 LLM 的框架扩展了这些功能。DeepSpeed 将 ZeRO(零冗余优化器)等高级内存优化与高度优化的混合精度训练支持相结合。Megatron-Core 包含张量、流水线和序列并行等优化,可实现高效的低精度训练,并在现代硬件上支持 FP8 精度。

专用库提供有针对性的功能。bitsandbytes 库提供了一个轻量级的 Python 包装器,用于封装自定义 CUDA 函数,专注于内存高效的表示。Transformer Engine 提供针对 FP8 优化的 Transformer 层,并专门针对 NVIDIA GPU 提供自动缩放因子和 QAT 支持。

未来方向:低精度训练的发展方向

尽管取得了令人瞩目的进展,基础模型的低精度训练仍然面临一些挑战。解决这些问题对于进一步扩展模型规模并保持性能和训练稳定性至关重要。

超越线性量化的高级量化方法代表着一个有前景的方向。非线性量化方案,例如对数量化或学习量化策略,可以提供更好的动态范围覆盖,并更好地适应不同张量的分布特性。

超低精度训练(4 位甚至 2 位)具有显著的潜在效率提升,但需要对收敛行为、泛化能力以及对量化噪声的鲁棒性有更深入的理论理解。构建更强大的理论基础对于确保超低精度训练在规模化上既实用又可靠至关重要。

为了有效处理超低精度环境下的异常值,需要细粒度的缩放策略。虽然按通道或按标记缩放可以在一定程度上缓解异常值问题,但更细粒度的自适应或可学习缩放策略可以进一步增强鲁棒性,尽管在改进量化粒度和内存效率之间取得平衡仍然具有挑战性。

优化器状态压缩是一个尚未得到充分探索的领域。优化器状态通常占用模型参数本身 2-3 倍的内存空间,这使其成为一个严重的内存瓶颈。在不牺牲性能的情况下高效压缩这些状态仍然是一项重大挑战,尤其是对于二阶统计量而言。

我们需要专门为整个流水线的超低精度训练设计的统一训练框架。此类框架应支持动态精度调度、可定制的量化方案和部署模拟,以促进在不同硬件环境中的实际应用。

标准化的基准和评估协议将有助于跨架构和任务对不同低精度训练方法进行系统比较,从而提供更清晰的权衡图景并实现公平、可重复的比较。

扩展到LLM 之外更广泛的架构,例如视觉语言模型和扩散模型,代表着另一个前沿领域。这些架构可能表现出不同的量化敏感度和训练动态,从而带来独特的挑战和机遇。

与其他高效的训练范式(如参数高效的微调、高效的注意力机制和模型压缩技术)的结合可以为整体训练效率带来复合效益。

结论:未来精度会更低

低精度训练已成为降低 LLM 训练计算和内存成本且不显著影响性能的关键技术。本综述通过基于数值格式(定点和整数、浮点和自定义格式)对方法进行分类,对低精度训练方法的多样性进行了结构化概述。

该领域已从早期基于随机舍入的定点方法发展到利用硬件加速的复杂浮点技术。最近的突破已将精度提升至 8 位甚至 4 位,自定义数值格式则为特定的深度学习场景提供了专门的解决方案。

随着硬件架构不断发展,明确支持较低精度(NVIDIA 的 Hopper 和 Blackwell 架构就是明证),低精度训练带来的效率提升将日益普及。结合简化实施的软件框架,这些进步将使低精度训练越来越切实可行,并最终被主流采用。

未来的研究可能会聚焦于以更强大的理论基础为指导的超低精度训练、处理异常值的细粒度扩展策略,以及对整个训练流程(包括经常被忽视的优化器状态)的全面优化。随着这些挑战得到解决,低精度训练将成为主流 LLM 开发中不可或缺的一部分,使高级人工智能更易于普及且更具可持续性。


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读12
粉丝0
内容444