【文献阅读】Pretraining Large Language Models with NVFP4

使用 NVFP4 预训练大语言模型

NVIDIA2025 年 9 月 30 日

摘要

如今,大语言模型(LLM)在众多领域都是强大的问题解决工具。正如业界广泛的研究和实验所示,随着模型规模、训练集规模和训练集质量的扩大,它们的性能持续提升。目前,训练一个前沿模型需要数十至数百尧浮点运算的算力,这意味着在时间、计算资源和能源方面的巨额投入。因此,提高预训练效率对于开发下一代性能更强大的大语言模型至关重要。虽然 8 位浮点(FP8)训练现已被广泛采用,但转向精度更窄的格式(如 4 位浮点(FP4))有望进一步提升计算速度和资源利用率。然而,这种精度级别的量化给训练稳定性、收敛性和实现带来了挑战,尤其是对于长 tokens 序列训练的大规模模型而言。

在本研究中,我们提出了一种基于 NVFP4 格式的新颖方法,用于大语言模型(LLM)的稳定且精准训练。该方法整合了随机哈达玛变换(RHT)以约束块级异常值,采用二维量化方案确保前向传播和反向传播过程中表示的一致性,利用随机舍入实现无偏梯度估计,并纳入了选择性高精度层。我们通过在 10 万亿 tokens 上训练一个 120 亿参数的模型来验证该方法 ------ 这是目前公开记录的最长 4 位精度训练任务。结果表明,使用基于 NVFP4 的预训练技术训练的模型,其训练损失和下游任务准确率可与 FP8 基线模型相媲美。例如,该模型的 MMLU-pro 准确率达到 62.58%,几乎接近 FP8 预训练所实现的 62.62% 准确率。这些发现表明,当 NVFP4 与我们的训练方法结合使用时,标志着窄精度大语言模型训练算法迈出了重要一步。

代码:Transformer Engine 支持 NVFP4 训练。

1. 引言

大语言模型(LLM)的快速发展,对更高效的数值格式提出了迫切需求,以降低训练过程中的计算成本、内存需求和能耗。8 位浮点(FP8 和 MXFP8)已成为大语言模型加速训练的热门数据类型(Micikevicius 等人,2022;DeepSeek-AI 等人,2024;Mishra 等人,2025)。近期窄精度硬件的进步(NVIDIA Blackwell,2024)使得 4 位浮点(FP4)成为下一个合理的发展方向(Tseng 等人,2025b;Chmiel 等人,2025;Wang 等人,2025;Chen 等人,2025;Castro 等人,2025;Zhou 等人,2025;Rouhani 等人,2023),与 FP8 相比,其算术性能提升 2 至 3 倍,内存占用减少一半。

本技术报告深入分析了使用 NVFP4(Alvarez 等人,2025)进行大语言模型(LLM)预训练的效果。NVFP4 是一种 4 位数据格式,扩展了 "微缩放" 方法(Rouhani 等人,2023)。与 MXFP4(Rouhani 等人,2023;开放计算项目,2023)等 4 位微缩放格式不同,NVFP4 采用更小的微块结构,能更有效地捕捉数据中的局部动态范围。NVFP4 还采用了包含小数精度的 FP8 缩放因子格式,以实现更精准的微缩放。此外,NVFP4 采用两级缩放策略,将细粒度 FP8 缩放因子与张量级应用的 FP32 缩放相结合。这些设计选择使得训练过程中能够更精确地表示张量值。

借助 NVFP4 格式,我们提出了一种 4 位训练方法,该方法在性能强大的语言模型上实现了与 FP8 相当的准确率。该方法保留了数值敏感层的高精度,利用二维(2D)块缩放维持前向传播和反向传播过程中相同的量化表示,应用随机哈达玛变换(Tseng 等人,2025b;Castro 等人,2025)分散大幅值异常值,并对梯度采用随机舍入(Tseng 等人,2025b;Chmiel 等人,2025;Chen 等人,2025;Castro 等人,2025)以减少量化偏差。消融实验证实,该方法的每个组件对于 4 位训练都至关重要,尤其是在大规模模型和长 tokens 序列训练中。

为了验证我们的方法,我们在 10 万亿 tokens 上训练了一个性能强大的 120 亿参数大语言模型(NVIDIA,2025b),结果表明其损失曲线和下游任务准确率与 FP8 基线模型高度吻合。虽然我们的研究证实了大规模 FP4 训练的可行性,但本报告主要关注底层算法和方法,而非运行时效率或系统级优化。据我们所知,这是首次成功展示在万亿级 tokens 规模下使用 4 位精度训练十亿参数级语言模型,为未来前沿模型更快速、高效的训练奠定了基础。

本技术报告的其余部分结构如下:第 2 节描述 NVFP4 格式,第 3 节呈现使用 NVFP4 在 10 万亿 tokens 上训练 120 亿参数模型的结果,第 4 节讨论 NVFP4 的训练方法,第 5 节对比 NVFP4 和 MXFP4 的训练效果。附录包含训练设置(模型、数据集和超参数)、量化流程以及分析不同技术选择影响的消融实验细节。

2. NVFP4 格式

由于窄浮点格式的范围有限,人们引入了微缩放(MX)格式(开放计算项目,2023)来平衡动态范围和精度。这些格式的特点是块级表示,一组数据元素共享一个共同的缩放因子。MX 格式包括 8 位(MXFP8)、6 位(MXFP6)和 4 位(MXFP4)浮点类型。在 MXFP4 中,每个元素表示为E2M11(开放计算项目,2023),即包含 1 个符号位、2 个指数位和 1 个尾数位。这使得 MXFP4 能够编码 ±0、±0.5、±1、±1.5、±2、±3、±4 和 ±6 这些值。

由于原始高精度值(如 FP32 或 BF16)通常超出 FP4 的范围,在量化过程中必须将它们缩放到可表示范围内。缩放因子的选择通常是为了使块内的绝对最大值(amax)映射到 FP4 的最大可表示值,这样做有利于防止饱和,同时最大限度地减少小幅值被归零的情况。缩放后,张量中的高精度值会被舍入到最近的 FP4 可表示数,之后通过相同缩放因子的倒数解码回原始范围。为了提高硬件效率,MX 格式将块缩放因子存储在 8 位中。张量中每个由 32 个连续元素组成的块共享一个 8 位缩放因子,存储在无符号 E8M0 格式(UE8M0)中,该格式编码的幂值范围从2−127到2127。Mishra 等人(2025)发现,将缩放因子向上舍入到下一个可表示的 UE8M0 值有助于避免饱和。

NVFP4 是一种增强型 4 位格式,相比 MXFP4 具有更优的数值特性。首先,通过将块大小从 32 个元素缩减到 16 个元素,NVFP4 缩小了每个块内的动态范围,使值更适合 FP4 的范围。其次,块缩放因子存储在 E4M3 中而非 UE8M0,以牺牲部分指数范围为代价获得了额外的尾数位。第三,在张量级应用 FP32 缩放以保留块缩放的范围。通过这种两级微缩放方法,NVFP4 将块中至少 6.25% 的值(每个 16 元素块中的 amax 值)以接近 FP8 的精度编码,而其余值则以 FP4 存储(见图 1)。相比之下,MXFP4 将所有值都存储为 FP4,并且由于幂次缩放因子舍入,可能会损失多达一个二进制阶的动态范围(以及四个样本:±4 和 ±6)(详见附录 B.4)。

对于 NVFP4,使用 E4M3 进行更精确的缩放会减少缩放因子的可表示范围。因此,采用第二级 FP32 缩放来调整原始张量的分布,使块缩放因子能够用 E4M3 表示。这种两级缩放方案的工作原理如下:(1)张量级 FP32 缩放将张量内的所有值重新映射到块的可表示范围(FP4×FP8);(2)块级 E4M3 缩放将块内的值移动到 FP4 可表示范围。附录 B 详细描述了量化和缩放策略。

注 1:浮点类型表示为 E𝑥M𝑦,包含 1 个符号位、𝑥个指数位和𝑦个尾数位。

总之,NVFP4 相比 MXFP4 的设计改进提高了异常值的准确性,同时最大限度地减少了小值被量化为零的情况。这些数值方面的进步(更小的块大小和更精确的缩放)使 NVFP4 相比 MXFP4 具有明显优势,从而带来更优的训练效果。我们将在第 5 节讨论这两种格式的训练结果对比。

图 1 以 NVFP4 格式存储的 16×32 矩阵。每个块包含 16 个连续的 FP4 元素(灰色和绿色)以及 1 个 FP8 缩放因子(黄色)。每个块中幅值最大的元素(绿色)被缩放到 FP4 可表示的最大值,可通过块缩放因子恢复。还应用了一个张量级 FP32 缩放因子(未显示)。

表 1 NVIDIA Blackwell 张量核心。

通过张量核心提供硬件支持:NVIDIA Blackwell GPU 原生支持多种微缩放格式的通用矩阵乘法(GEMM)------MXFP8、MXFP6、MXFP4、NVFP4,如表 1 所示。张量核心读取窄精度输入以及每个 16 或 32 元素块的 8 位缩放因子。张量核心计算块上的部分点积,将每个部分点积乘以相应的缩放因子,对量化过程中缩放的输入进行反缩放,并以更高精度累积部分结果,最终生成 FP32 精度的点积。此外,Blackwell GPU 原生支持多种舍入模式,包括 FP4 转换指令的最近偶数舍入和随机舍入。与 FP8 相比,张量核心在 FP4 计算上的数学吞吐量在 GB200 芯片上提高了 2 倍,在 GB300 芯片上提高了 3 倍。与 FP8 操作数相比,FP4 操作数的内存占用也大约减少了一半。因此,当通用矩阵乘法在训练时间中占很大比例时,FP4 可以为大语言模型训练提供显著的速度提升。

3. 使用 NVFP4 训练

我们报告了一个 120 亿参数混合 Mamba-Transformer 模型在 10 万亿 tokens 上使用 NVFP4 精度训练的结果,并与 FP8 参考模型进行了对比。

模型和训练设置

我们采用了最近推出的 Nemotron-H 系列模型(NVIDIA,2025b,a)中使用的混合 Mamba-Transformer 模型架构。这些模型由 Mamba-2、自注意力(Self-Attention)和前馈网络(FFN)块组成。我们使用了与 Nemotron-Nano-12Bv2-Base 模型(Nemotron-H 系列中的 120 亿参数模型(NVIDIA,2025b))相同的架构,该模型已被证明在多个基准测试中取得了具有竞争力的准确率。我们采用预热 - 稳定 - 衰减(Warmup-Stable-Decay)学习率调度(Hu 等人,2024)在 10 万亿 tokens 上训练该模型,学习率在前 80% 的训练过程中保持恒定,然后在最后 20% 的训练过程中衰减。附录 A.1 提供了更多模型配置细节。

我们使用第 4 节中描述的方法在 NVFP4 中预训练该模型。为了对比损失和下游任务准确率,我们按照(DeepSeek-AI 等人,2024;NVIDIA,2025b)中的方法预训练了一个 FP8 基线模型。

预训练结果

图 2 显示,在整个训练过程中,NVFP4 的验证损失与 FP8 的验证损失密切跟踪。在训练的稳定阶段,NVFP4 的相对损失误差始终保持在 1% 以下,而在学习率接近训练结束衰减时,误差略微扩大到 1.5% 以上。这表明 NVFP4 的训练动态与 FP8 密切相关,仅在训练后期出现小幅偏离。注意,8 万亿 tokens 时损失曲线斜率的变化源于学习率衰减。此外,9 万亿 tokens 时损失的小幅跳跃对应于数据集混合比例的变化。附录 A.1 提供了所用数据集混合比例的更多细节。

图 2 120 亿参数模型使用 10 万亿 tokens 进行 NVFP4 和 FP8 预训练的验证损失。

尽管损失存在小幅差距,但下游任务准确率基本不受影响。图 3 显示,在整个训练过程中,NVFP4 在下游评估中与 FP8 相当。这种趋势在多个领域都成立,包括知识密集型推理、数学、编码和常识推理任务。表 2 提供了更全面的视图,证实 NVFP4 在大多数单个基准测试中实现了与 FP8 相当的准确率。例外情况是编码任务,NVFP4 略逊一筹。我们怀疑这种差异可能源于有噪声的评估:MBPP + 准确率在最后一个检查点评估中下降,选择其他检查点可能会为该任务带来更好的准确率。

在损失最小化至关重要的场景中,可以通过在训练的最后阶段转换到更高精度来缩小差距。特别是,如附录 D 稍后所述,在衰减阶段将精度从 NVFP4 转换为 BF16(或潜在的 MXFP8)可以减轻损失差距。这意味着大部分训练可以在 NVFP4 中执行(少量训练使用更高精度),以实现更接近 FP8 基线的损失。

这些结果证实,NVFP4 训练在长 tokens 序列上保持稳定,相对于高精度基线保留了准确率,并表明我们的 NVFP4 训练方法为可扩展的 4 位训练提供了切实可行的途径。

图 3 10 万亿 tokens 预训练期间 NVFP4 与 FP8 的任务准确率对比。

表 2 120 亿参数模型 FP8 和 NVFP4 预训练的准确率。评估在 BF16 精度下进行。

4. 训练方法

除了 NVFP4 数据类型外,我们的方法还整合了多项关键技术以实现有效的 4 位训练。这些技术包括:(1)保留特定数值敏感层的高精度;(2)使用随机哈达玛变换管理块级异常值;(3)对权重应用二维(2D)块缩放以确保前向传播和反向传播之间的一致性;(4)使用随机舍入确保无偏量化梯度。虽然在较短 tokens 序列上训练的较小模型可能不需要所有这些技术,但我们发现,对于 120 亿参数模型在 10 万亿 tokens 序列上的训练,每个组件对于确保收敛性和稳定性都是必不可少的。图 4 通过消融实验说明了这一点:从下面描述的完整训练方法开始,我们逐一移除一个组件,观察到移除任何一个组件都会导致更差的收敛性。

图 4 120 亿参数模型 10 万亿 tokens 训练的消融实验。消融实验从 3.43 万亿 tokens 的训练模型开始(除前两个块和后八个块外均使用 NVFP4),系统地逐一移除一个方法组件:随机舍入(SR)、随机哈达玛变换(RHT)、二维缩放(2D)和更少的 BF16 块。相对差异定义为(FP8 - 实验值)/ FP8,负值表示实验结果更差。

简而言之,我们对 NVFP4 训练的建议如下:

  1. 保留少数敏感线性层的高精度(网络的 15%,大部分高精度层位于网络末尾)。
  2. 对权重梯度通用矩阵乘法的输入应用 16×16 大小的随机哈达玛变换。
  3. 对权重使用 16×16 块的二维(2D)缩放,对激活和梯度使用 1×16 块的一维缩放。
  4. 对梯度使用随机舍入,对权重和激活使用最近偶数舍入。

在本节的其余部分,我们将详细讨论训练方法的每个组件,并描述图 4 中呈现的消融实验。附录 E 中报告了更多消融实验以支持我们的选择。

4.1 混合精度

我们为 FP4 训练采用了混合精度策略。大部分计算,特别是线性(全连接)层内的通用矩阵乘法运算,都在 FP4 中进行。如图 5 所示,每个线性层有三个基础的通用矩阵乘法:前向传播(Fprop)中的一个通用矩阵乘法,以及反向传播中分别用于计算激活梯度(Dgrad)和权重梯度(Wgrad)的两个通用矩阵乘法。通用矩阵乘法运算接收 FP4 张量作为输入,并生成 BF16 或 FP32 格式的输出。

线性层

尽管线性层通常以较窄的精度计算,但我们观察到某些线性层比其他层对 FP4 更敏感。特别是,当所有线性层都被量化为 FP4 时,训练会发散。从我们的消融实验(见附录 E.2)中观察到,模型的最后几个线性层会导致训练发散,因为它们需要比 FP4 提供的更大的动态范围和尾数。基于这些发现,我们建议将最后几层的一小部分(例如,少于 15%)保留为 BF16 或 MXFP8,以获得更好的训练收敛性。

对于 120 亿参数模型,我们选择了一种保守配置,将前两个块以及最后八个块(前馈网络或 Mamba-2,每个块有 2 个线性层)保留为 BF16,这意味着网络中 16% 的线性层采用高精度。然而,图 4 表明,即使只将最后四个块保留为高精度,收敛性仍然稳定,这表明模型的更大部分本可以安全地使用 FP4 训练。

注意力、嵌入、非线性层和其他张量

为了确保训练过程中的数值稳定性,我们保留了嵌入层、输出投影头、归一化层、非线性层和注意力组件(包括 softmax 以及查询 - 键和注意力分数 - 值批量通用矩阵乘法)的原始精度(如 BF16 或 FP32)。优化器存储的主要权重、用于跨微批次和跨数据并行副本进行梯度累积的权重梯度以及优化器状态也都保留在 FP32 中。张量并行归约以 BF16 精度执行。

图 5 NVFP4 量化线性层的计算流程。所有通用矩阵乘法运算均将输入量化为 NVFP4。

4.2 随机哈达玛变换

虽然微缩放减少了表示张量值所需的动态范围,但异常值仍然会对 FP4 格式产生不成比例的影响(An 等人,2025;Park 等人,2025;Raman 等人,2025;Dettmers 等人,2022;Xiao 等人,2024),降低模型准确率。随机哈达玛变换(Shah 等人,2024;Ashkboos 等人,2025,2024;Tseng 等人,2024,2025a;Malinovskii 等人,2024)通过将异常值重新分布到近似高斯分布中来解决此问题,使其更易于在较窄格式中表示。下面我们讨论随机哈达玛变换在 FP4 训练中的应用。

应用变换的通用矩阵乘法

随机哈达玛变换通常应用于两个通用矩阵乘法输入,由于正交性,点积会通过另一个操作数反转每个变换。附录 C 中讨论了其机制的更多细节。从经验上看,我们观察到对 Wgrad 输入进行变换有助于 120 亿参数模型的训练(例如,图 4 显示,从 Wgrad 中移除变换后损失会恶化)。另一方面,在较小规模下,哈达玛变换对 Fprop 和 Dgrad 没有可测量的益处(见附录 E.4.1),可能是因为 FP4 已经提供了足够的范围。因此,我们将哈达玛变换限制在 Wgrad 输入上,尽管在某些情况下 Fprop 和 Dgrad 也可能受益。

哈达玛矩阵大小

随机哈达玛变换通过将d×d哈达玛矩阵与张量的每个相同大小的块进行矩阵乘法来实现。矩阵大小 d 在准确率和性能之间引入了权衡。更大的矩阵通过将异常值分散到更多值上来更有效地分布异常值,但会增加计算和内存成本。条目过少的矩阵不太可能重现高斯分布,从而损害 FP4 准确率。在小规模下,我们观察到矩阵大小对收敛性没有可测量的差异。在较大规模(如 120 亿参数模型)下,我们观察到超过中等大小的哈达玛矩阵的增益递减(见附录 E.4.2),而矩阵条目过少会影响收敛性。我们认为这部分是由于更大的模型存在更多异常值。因此,我们选择矩阵大小d=16,发现其收敛性优于d=4,且结果与d=128相似。

随机符号向量

随机哈达玛变换通过与随机对角符号向量相乘引入随机性,该向量翻转整个行或列的符号。这减少了 "结构化" 异常值(例如,与哈达玛基对齐的张量模式)在变换后保留的可能性。在小规模下,随机化对准确率没有影响,使用标准哈达玛变换训练仍然稳定。然而,我们发现随机化有利于在较长 tokens 序列上训练的更大模型,详见附录 E.4.3。在我们的设置中,我们使用一个在整个训练过程中跨所有线性层共享的随机符号向量。我们的研究表明,增加随机符号向量的数量没有可测量的影响。

4.3 二维缩放

在训练过程中,变换和缩放操作沿点积维度应用,导致张量在前向传播(沿行)和反向传播(沿列)中受到不同的变换和缩放。这是因为反向传播会转置张量,从而改变点积维度。结果,同一个张量可能有两个不同的量化表示,实际上破坏了链式法则,因为反向传播不再对前向传播中使用的相同函数进行微分。更准确地说,当wfprop=wbprop时,反向更新∂x=wbpropT∂y计算的是与前向传播yfprop=wfpropx不同函数的梯度。我们假设权重中的链式法则违规会导致模型准确率下降。

块缩放

为了缓解这个问题,我们提出了一种二维(2D)块缩放方法,确保前向传播和反向传播中的量化表示一致。对于权重,元素按 16×16 块(即 16 个输入通道 ×16 个输出通道)分组和缩放,类似于 DeepSeek-AI 等人(2024)的方法。当传入张量核心时,二维块缩放会复制到每个 1×16 块,并继续利用张量级 FP32 缩放。激活和梯度使用标准 NVFP4 缩放(即 1×16 块),因为更细粒度的缩放提高了量化准确率。虽然激活量化也存在链式法则问题,但我们观察到训练对激活张量中的不一致性不如对权重张量敏感(附录 E.5 进一步讨论了这一点)。权重对缩放粒度也更宽容,因为它们可以适应 FP4 值。如图 4 所示,维持一致的量化权重有助于提高 120 亿参数模型的训练损失。

随机哈达玛变换

与缩放类似,沿点积维度应用的随机哈达玛变换会在量化后引入不一致性(即不同的变换会导致不同的量化值),因此不应用于权重张量。结果,权重相关通用矩阵乘法中变换后的激活和梯度无法通过变换权重张量来反转,从而阻止 Fprop 和 Dgrad 从变换中受益。因此,我们将哈达玛变换限制在 Wgrad 张量上,发现这足以训练我们的模型(附录 E.4.1)。

4.4 随机舍入

在量化到 FP4 的过程中,确定性舍入(如最近偶数舍入)会引入偏差,由于尾数分布倾向于朝特定方向舍入、值下溢到零或饱和到最大可表示数,从而产生系统误差。偏差的影响在梯度张量中通常更为明显(Castro 等人,2025;Tseng 等人,2025b;Chmiel 等人,2025,2023;Alistarh 等人,2017),这会影响训练收敛性。为了解决这个偏差,我们在将高精度值量化到 FP4 时采用了随机舍入。随机舍入将一个值概率性地舍入到其两个最近的可表示数之一,概率与其距离成反比。这防止了值被一致地朝同一方向量化,从而减少了偏差。

我们观察到,对梯度张量应用随机舍入对于 120 亿参数模型的收敛至关重要,如图 4 所示。反向传播中的其他张量无法从随机舍入中受益,这进一步证实梯度是偏差的主要来源(见附录 E.3)。此外,对前向传播张量应用随机舍入是不利的,因为它相对于最近舍入放大了量化误差(Castro 等人,2025)。

5. NVFP4 与 MXFP4

如前所述,NVIDIA Blackwell 上有两种 FP4 微缩放格式 ------MXFP4 和 NVFP4。在本节中,我们比较了使用这两种格式时的训练效果。

模型和训练设置

我们采用了基于混合 Mamba-Transformer 架构的 80 亿参数(8B)模型。该模型在与 120 亿参数模型相同的数据集上训练了 1 万亿 tokens。训练包括两个阶段的数据集混合,分别占训练的前 60% 和后 40%。模型和训练细节在附录 A.2 中描述。

参考模型在 BF16 中预训练。FP4 预训练遵循第 4 节中描述的训练方法,分别使用 MXFP4 和 NVFP4 作为数据格式。对于 MXFP4,我们对 Wgrad 输入采用大小为d=32的随机哈达玛变换,以与 MXFP4 块大小对齐。在这两种设置中,最后八个块(前馈网络或 Mamba-2)都保留为 BF16,约占模型的 15%。

结果

图 6a 表明,NVFP4 预训练比 MXFP4 收敛到更好的损失。具体而言,MXFP4 的相对误差约为 2.5%,而 NVFP4 为 1.5%。为了缩小与 NVFP4 的差距,我们通过额外的 tokens(在 1 万亿到 1.5 万亿总 tokens 之间变化)扩展了 MXFP4 预训练。图 6b 展示了预训练期间使用的 tokens 数量与最终获得的损失之间的关系。我们观察到,当 MXFP4 在多 36% 的 tokens 上训练时(即使用 1.36 万亿而不是 1 万亿 tokens),其损失与 NVFP4 相当。这意味着 MXFP4 的训练时间大幅增加,突显了 NVFP4 的优势。未来的研究应评估这些格式在不同参数数量和 tokens 序列长度下的缩放定律。

图 6 NVFP4 与 MXFP4 对比:(a)训练损失差异;(b)不同 tokens 预算下的最终验证困惑度。

6. 结论

我们已经证明,当 NVFP4 与有针对性的方法相结合时,使用 NVFP4 进行大规模预训练既稳定又准确。该方法通过二维权重缩放、随机哈达玛变换、随机舍入等技术(如本技术报告中所述)提高了训练稳定性和收敛性。使用这种方法,我们在 10 万亿 tokens 上训练了一个 120 亿参数混合 Mamba-Transformer 模型,其损失和下游准确率与 FP8 基线模型密切跟踪。这建立了首个公开证据,证明在万亿级 tokens 规模下可持续进行 4 位预训练。

在并行实验中,NVFP4 使用比 MXFP4 更少的 tokens 就达到了相当的损失,表明在不牺牲准确率的情况下提高了效率。这些对比初步展示了不同 FP4 格式在预训练过程中的内存和计算效率优势,以及收敛性权衡。

未来的工作将进一步表征 NVFP4 相对于其他格式的预训练性能,同时改进方法以量化所有线性层而不影响收敛性、减少剩余的高精度层,并将 NVFP4 扩展到注意力和通信路径。我们还计划探索其在后训练场景中的应用,并在更大的模型、更长的 tokens 序列以及混合专家等其他架构上进行评估。Transformer Engine 的最新更新现已全面支持在 Blackwell 上进行 NVFP4 训练。

附录

A. 模型

我们在本技术报告中评估了三种模型变体:两种 120 亿参数和 80 亿参数规模的混合 Mamba-Transformer 架构,以及一种 12 亿参数规模的 Transformer 变体。120 亿参数模型作为验证 NVFP4 训练方法的主要架构,而 80 亿参数混合模型用于对比 NVFP4 和 MXFP4。12 亿参数模型用于多项消融实验。本节描述了每个模型使用的架构细节、数据集和训练调度。

A.1 120 亿参数混合 Mamba-Transformer

模型架构:表 3 总结了 120 亿参数混合 Mamba-Transformer 架构的配置。该模型有 62 个块,包括 6 个自注意力块、28 个前馈网络块和 28 个 Mamba-2 块(每个块有 2 个线性层)。Mamba-2 块有 8 个组,状态维度为 128,头维度为 64,扩展因子为 2,卷积窗口大小为 4。前馈网络块使用平方 ReLU 激活函数,归一化层使用 RMSNorm(Zhang & Sennrich,2019),嵌入层和输出层权重分离。该模型没有位置嵌入、dropout 或线性层偏置。每个块都添加了残差跳跃连接。

表 3 120 亿参数 Nemotron-H 混合 Mamba-Transformer 架构摘要。

数据集:预训练数据使用了基于 NVIDIA(2025b)的高质量精选和合成数据集语料库,包含 10 万亿 tokens,数据混合包括通用网络爬取数据、维基百科、数学、编码、学术数据、crawl++、多语言数据和合成 SFT 风格数据。预训练采用分阶段数据混合方法(Feng 等人,2024),第一阶段占训练的 70%,数据混合旨在提高数据多样性,而第二阶段和第三阶段主要由高质量数据集组成,分别占训练的最后 20% 和 10%。

超参数:模型在 10 万亿 tokens 上训练,序列长度为 8192,批量大小为 736。WSD 调度的恒定学习率为4.5⋅10−4,在训练的最后 20% 衰减到4.5⋅10−6。Adam 参数为β1=0.9和β2=0.95,权重衰减设置为 0.1。

精度:参考模型按照 NVIDIA(2025b)中的方法在 FP8 中训练。具体而言,所有线性层都在 E4M3 中计算,除了第一个块和最后两个块中的线性层保留为 BF16。权重的缩放因子应用于 128×128 块,激活和梯度的缩放因子应用于 1×128 块。它们在每个块上在线计算,存储在 FP32 中,并在将张量量化为 FP8 格式之前应用。其他操作的精度与第 4.1 节相同。对于 NVFP4,我们遵循第 4 节中描述的方法。所有线性层都在 NVFP4 中计算,除了前两个块和最后八个块(前馈网络或 Mamba-2)中的线性层保留为 BF16。这意味着 16% 的总线性层保留为高精度。

A.2 80 亿参数混合 Mamba-Transformer

模型架构:80 亿参数混合 Mamba-Transformer 与 120 亿参数混合模型具有相似的架构。表 4 总结了 80 亿参数模型的配置。该模型有 52 个块:4 个自注意力块、24 个前馈网络块和 24 个 Mamba-2 块。模型隐藏维度为 4096,前馈网络隐藏维度为 21504,分组查询注意力有 32 个查询头和 4 个键值头。Mamba-2 块有 8 个组,状态维度为 128,头维度为 64,扩展因子为 2,卷积窗口大小为 4。

超参数:模型在与 120 亿参数模型相同的数据集上训练了 1 万亿 tokens。使用的批量大小为 768,仅包含两个阶段的数据混合,分别占训练的前 60% 和后 40%。序列长度为 8192,WSD 调度的恒定学习率为8.0⋅10−4,在训练的最后 15% 衰减到8.0⋅10−6。Adam 参数为β1=0.9和β2=0.95,权重衰减设置为 0.1。

表 4 80 亿参数 Nemotron-H 混合 Mamba-Transformer 架构摘要。

精度:参考模型在 BF16 中训练。对于 NVFP4,我们遵循第 4 节中描述的方法。所有线性层都在 NVFP4 中计算,除了最后八个块(前馈网络或 Mamba-2)中的线性层保留为 BF16。

A.3 12 亿参数 Transformer

模型架构:12 亿参数模型遵循标准 Transformer 架构。模型配置细节总结在表 5 中。该模型有 20 个 Transformer 块,每个块包括自注意力和前馈网络块。模型隐藏维度为 2048,前馈网络隐藏维度为 6144,自注意力有 16 个查询头和 8 个键值头。前馈网络块使用平方 ReLU 激活函数。该模型使用 RoPE 嵌入,没有 dropout 或线性层偏置。每个 Transformer 块都添加了残差跳跃连接。

表 5 12 亿参数 Nemotron Transformer 架构摘要。

超参数:模型在与 80 亿参数模型相同的数据集上训练了 1 万亿 tokens,使用两个阶段的数据混合。模型训练的序列长度为 8192,批量大小为 768。WSD 调度在前 85% 的训练中使用1.2⋅10−3的学习率,在最后 15% 的训练中衰减到1.2⋅10−5。

精度:参考模型在 BF16 中训练。对于 NVFP4,我们对第 4 节中的方法进行了消融实验。线性层张量转换为 NVFP4。其他操作的精度与第 4.1 节相同。

B. NVFP4 量化流程

下面描述了将张量从更高精度(FP32或BF16)转换为NVFP4的流程。给定一个张量x,每个由连续高精度值\( x_i \)(\( i \in b \))组成的块b被量化为FP4。在量化之前,使用两级缩放策略对值进行缩放:首先,全局FP32张量级缩放因子将张量内的所有值重新映射到块的可表示范围(FP4×FP8);其次,局部块级缩放因子将块内的值\( x_i \)移动到FP4可表示范围。

B.1 全局张量级缩放

全局编码缩放计算如下:
\( s_{enc} = \frac{6 \cdot 448}{amax_x} \) (1)
其中\( amax_x = max_i(|x_i|) \)表示整个张量x的绝对最大值,6和448分别是E2M1和E4M3格式中的最大可表示幅值。相应的解码缩放\( s_{dec} = 1 / s_{enc} \)存储在FP32中,用于在NVFP4通用矩阵乘法运算后解码结果值。由于全局缩放是在整个张量上动态计算的,因此它需要额外遍历一次设备内存:一次计算全局amax,另一次在转换为FP4之前进行缩放,如下所述。然而,全局缩放的粒度可以更小(例如,一行或一个元素块),以避免额外的设备内存往返。

B.2 局部块级缩放

选择局部解码缩放,使每个块中的最大绝对值\( amax_b = max_{i \in b}(|x_i|) \)归一化到FP4的最大可表示值:
\( s_{dec,b} = \frac{amax_b}{6} \) (2)

由于局部解码缩放必须存储在FP8中以供张量核心使用,因此在量化之前先将它们乘以全局编码缩放:
\( s_{dec,b,e4m3} = e4m3(s_{dec,b} \cdot s_{enc}) \) (3)
其中\( s_{enc} \)的目标是将最大局部解码缩放(即\( max(s_{dec,b}) = amax_x / 6 \))重新映射到FP8的最大可表示值。我们通过在更高精度下反转量化的局部解码缩放并将其缩放回原始可表示范围,获得实际的局部编码缩放因子:\( s_{enc,b} = 1 / (fp32(s_{dec,b,e4m3}) \cdot s_{dec}) \)。通过这种方式,我们尝试确保在经过\( s_{enc,b} \cdot s_{dec} \cdot s_{dec,b,e4m3} ≈ 1 \)缩放后可以恢复原始值,因为如果无法恢复会影响模型准确率。计算等式(3)中的解码缩放因子时使用最近偶数舍入。

B.3 转换

综合所有这些步骤,块中的每个元素\( x_i \)通过局部编码缩放进行缩放并量化为:
\( \hat{x}i = q(x_i \cdot s{enc,b}) \) (4)
其中\( q(\cdot) \)表示FP4量化函数。除了存储量化值\( \hat{x}i \)外,局部和全局解码缩放(\( s{dec,b,e4m3} \)和\( s_{dec} \))也存储在内存中,并在矩阵乘法期间使用。

张量核心读取局部解码缩放,并将其应用于对b个元素计算的部分点积:
\( s_{dec,b,e4m3}^x \cdot s_{dec,b,e4m3}^y \cdot \sum_{k \in b}(x_k \cdot y_k) \) (5)
其中x和y表示两个输入操作数。在通用矩阵乘法运算后,以类似方式将全局解码缩放\( s_{dec}^x \)和\( s_{dec}^y \)应用于最终输出。

B.4 MXFP4 和 NVFP4 缩放因子的说明

MXFP4缩放因子仅限于幂次,这意味着无法将值完美缩放到FP4可表示范围。缩放后,块amax要么溢出FP4最大可表示值并饱和,要么向下舍入到更小的FP4样本。由于观察到饱和会导致MXFP8训练的收敛问题(Mishra等人,2025),我们通常将解码缩放因子向上舍入以防止饱和。

这种缩放策略可能导致一些FP4样本被浪费,同时也会减少利用的动态范围。例如,考虑一个块的值,其绝对最大值为\( amax = 3 + \delta \),其中\( \delta \)表示一个小增量。为了将块amax移动到FP4最大可表示数(即E2M1的±6),解码缩放因子计算为\( s_{dec,b} = amax / 6 = 0.5 + \delta / 6 \),向上舍入到下一个幂次,得到\( s_{dec,b,ue8m0} = 1 \)。缩放后,块的amax变为\( amax / s_{dec,b,ue8m0} = 3 + \delta \),在FP4中量化为3。结果,在最坏情况下,FP4无法表示±4和±6的样本。这也将动态范围减少了近一个二进制阶,仅利用了\( log_2(3 / 0.5) = 2.58 \)个二进制阶,而不是完整的\( log_2(6 / 0.5) = 3.58 \)个二进制阶(其中0.5表示FP4中的最小正非零幅值)。

NVFP4通过更精确的E4M3块缩放克服了这一限制,该缩放将块amax映射到更接近FP4最大可表示数的位置。这最大限度地利用了FP4样本,并保留了更多的FP4动态范围。

C. 哈达玛变换机制

随机哈达玛变换对要量化的张量应用正交旋转,即\( x' = q(xH \cdot s) \),其中H是哈达玛矩阵,\( q(\cdot) \)是量化函数,s是在旋转空间xH中计算的缩放因子。哈达玛矩阵定义为归一化矩阵,形式为\( H_d = (1 / \sqrt{2}) H_2 \otimes H_{d/2} \),元素限制为±1。由于其正交特性,它们可以应用于矩阵乘法的两个操作数:
\( C = (AH)(H^T B) = AB \) (6)
其中每个操作数的变换通过点积中的\( HH^T = I \)反转。

随机哈达玛变换通过将d维对角随机矩阵\( S_d \)与哈达玛矩阵左乘,在变换中引入随机性,得到\( H = S_d H_d \),其中\( S_d \)的对角元素随机选自{−1, 1}。\( S_d \)中的元素将翻转\( H_d \)不同行的符号。

我们采用分块方式执行哈达玛变换,将具有\( d×d \)矩阵条目的H与\( m×k \)张量相乘,其中张量的每个\( d×d \)元素都与H相乘。该变换涉及\( mkd \)次乘加运算和\( d^2 \)次哈达玛矩阵读取,当d远小于张量维度m或k时,这是一个小成本。在这种情况下,哈达玛变换可以实现为批量矩阵乘法,当使用张量核心时,其受限于读取输入张量的内存流量,并且可以与其他层融合以减少设备内存往返。

D. 切换到更高精度

对于 FP4 训练无法完全匹配更高精度训练损失的情况,我们观察到在训练后期从 FP4 切换到更高精度可以缩小损失差距。图 7 显示,当在 8.2 万亿 tokens 后切换精度时(例如,占训练的 18%),损失与 FP8 基线模型匹配;而在 10 万亿 tokens 后切换时(例如,占训练的不到 1%),损失仅略差。虽然在训练后期切换精度无法完全恢复损失(可能是因为学习率过低,无法进行权重更新),但它显著减少了未在 FP4 中执行的训练部分。因此,我们建议在学习率衰减开始前不久切换到高精度以完全恢复损失,或者在最后切换以显著改善损失,同时对训练运行时间的影响最小。

图 7 训练后期切换到更高精度。图中展示了 120 亿参数模型在 10 万亿 tokens 上训练的验证损失相对差异。NVFP4 在整个训练期间使用第 4 节中指定的方法(绿色)。前向传播和反向传播中张量的精度(蓝色)、仅前向传播中张量的精度(橙色)以及仅反向传播中张量的精度(紫色)在 8.2 万亿 tokens 时从 NVFP4 切换到 BF16,直至训练剩余部分。还展示了在 10 万亿 tokens 左右切换到高精度的运行(红色)。在这种设置中,切换反向传播的精度时使用一维权重缩放,因为这比二维权重缩放略好。

我们发现,FP4 训练的大部分损失差距源于前向传播中张量的量化(Castro 等人,2025)。更具体地说,通过在 8.2 万亿 tokens 开始时将前向传播切换到更高精度,120 亿参数模型的大部分损失得以恢复(相对误差从 1.5% 降至 0.5%)。与 Chmiel 等人(2025)的报告(通过切换反向传播的精度恢复损失)不同,我们在模型中没有观察到这种改善。专注于前向传播最大限度地减少了切换精度的开销,因为只有约 6% 的总计算(大约是训练最后 18% 的三分之一)在更高精度下执行。

E. 训练方法的消融实验

图 8 组合 NVFP4 训练技术:最后四个块的线性层使用 BF16、二维权重缩放、Wgrad 上的随机哈达玛变换以及梯度上的随机舍入。图中展示了 12 亿参数模型在 1 万亿 tokens 上训练的验证损失相对差异。

E.1 组合技术

由于 FP4 训练需要一系列技术,我们探索了组合这些技术的效果。我们从一种基础方法开始,该方法将所有层量化为 NVFP4,对所有张量应用标准 NVFP4 缩放(即 1×16 E4M3 块级缩放和 FP32 张量级缩放),并对所有张量使用最近偶数舍入。除非另有说明,本附录中始终使用这种基础方法,并与其他技术组合使用。当使用这种基础方法而不使用任何额外技术时,我们的模型在训练早期就会发散。我们发现,保留一些线性层的高精度对于训练稳定性至关重要,如下一节所述。虽然随机舍入等技术可以提高训练稳定性,但单独使用时最终仍会发散。图 8 显示,组合这些技术有助于改善损失。每种技术的相对益处取决于组件的添加顺序。组合所有组件相比单一技术减少了损失差距。

E.2 层敏感性

虽然使用基础方法且不使用任何技术时训练会发散,但某些层似乎比其他层对 FP4 更敏感。图 9 显示,当最后四个块中的线性层保留为 BF16 时,损失会收敛,这意味着最后几层对 FP4 量化更敏感。除非与最后几个块组合,否则保留前几个块的高精度不会提高稳定性(例如,当前两个块和最后两个块保留为 BF16 时训练稳定,但仅当前四个块保留为高精度时训练不稳定)。

图 9 线性层对量化的敏感性。除模型中前几个和后几个块外,所有线性层均使用 NVFP4。图中展示 12 亿参数模型在 1 万亿 tokens 上训练的验证损失。

基于张量分析,我们观察到最后几层的权重梯度(即输入为 FP4 的 Wgrad 输出)往往具有更大的量化误差。量化误差指标可能可以作为确定训练期间哪些线性层应保留为高精度的机制。

E.3 张量上的随机舍入

由于随机舍入对 FP4 训练很重要,我们研究了其在训练期间对各种张量的影响。如图 10 所示,对梯度应用随机舍入导致 12 亿参数模型的训练损失稳定收敛,而对激活或权重应用随机舍入则导致发散。激活和权重张量的随机舍入导致发散的一个潜在原因是,这种舍入方式比最近舍入引入了更多的量化误差(Chmiel 等人,2025)。这与先前的发现一致,即随机舍入减轻了量化引起的梯度偏差(Tseng 等人,2025b;Chmiel 等人,2025;Chen 等人,2025;Castro 等人,2025)。此外,对反向传播中的所有张量进行随机舍入相比仅对梯度进行随机舍入几乎没有改善。这表明发散源于前向传播中张量的随机舍入。对于 120 亿参数模型,我们观察到必须对进入 Dgrad 和 Wgrad 的梯度应用随机舍入才能实现适当的收敛。

图 10 随机舍入应用于不同张量:梯度、激活、权重和反向传播张量。除最后四个块外,所有线性层均应用 NVFP4。图中展示 12 亿参数模型在 1 万亿 tokens 上训练的验证损失。

E.4 随机哈达玛变换

图 11 对不同通用矩阵乘法(Fprop、Dgrad 和 Wgrad)应用随机哈达玛变换(RHT)与不应用 RHT 的训练效果对比。对于 RHT 运行,每个变换在整个训练过程中使用固定的随机种子。除最后四个块外,所有线性层均应用 NVFP4 量化。图中展示了 12 亿参数模型在 1 万亿 tokens 上训练的验证损失相对于 BF16 基线的相对变化。

E.4.1 应用 RHT 的通用矩阵乘法

我们评估了在 FP4 训练期间对不同通用矩阵乘法(Fprop、Dgrad 和 Wgrad)应用随机哈达玛变换(RHT)的影响。如图 11 所示,对 Wgrad 输入应用 RHT 改善了 12 亿参数模型的验证损失,而对 Fprop 或 Dgrad 输入进行变换则降低了模型质量。我们假设 RHT 引入了额外的量化误差,抵消了异常值去除的益处。因此,尽管 RHT 减少了表示异常值所需的动态范围,但在某些通用矩阵乘法上使用时可能会对训练产生负面影响。

图 12 哈达玛矩阵大小的影响。Wgrad 张量在前 3.4 万亿 tokens 中使用 16×16 变换,然后在训练的剩余部分切换到 4×4 或 128×128。图中展示了 120 亿参数模型在 4 万亿 tokens 上训练的训练损失相对差异。线性层应用 NVFP4,使用第 4 节中指定的方法。

E.4.2 哈达玛矩阵大小

由于哈达玛矩阵大小会影响异常值缓解的程度,我们考虑了不同的矩阵大小来变换 Wgrad 输入。对于 12 亿参数模型,我们观察到 2×2、4×4、16×16 和 128×128 矩阵之间的损失几乎没有差异。为了在更大规模上验证这一趋势,我们选取了训练到 3.4 万亿 tokens 的 120 亿参数模型,将矩阵大小从 16×16 切换到 4×4 或 128×128,并继续训练。

图 12 显示,4×4 矩阵导致损失增加,而 128×128 矩阵对模型质量有轻微益处。这符合直觉:更大的哈达玛矩阵可以更好地分布异常值,而条目过少的矩阵不太可能重现高斯分布。结果验证了我们选择 16×16 矩阵的合理性,该矩阵在不影响模型准确率的情况下降低了变换成本。这也突显了在更大模型和更长 tokens 序列上进行实验的必要性,因为从小规模得出的结论可能并不总是适用于更大的模型。

图 13 哈达玛变换随机性的影响。在前 3.4 万亿 tokens 中,所有变换使用单一固定种子,然后在训练的剩余部分切换到以下随机性选项之一:所有层使用单一固定种子、每个变换使用唯一种子、不使用随机符号向量。图中展示了 120 亿参数模型在 4 万亿 tokens 上训练的训练损失相对于 FP8 基线的相对差异。NVFP4 训练使用第 4 节中指定的训练方法。

E.4.3 随机性的作用

随机哈达玛变换在变换中引入了随机性,因此我们研究了这种随机性在训练期间的重要性。图 13 展示了使用不同随机性程度训练时的损失:(1)"实例种子",每次变换使用新的随机符号向量;(2)"单一固定种子",整个训练期间所有变换使用单一随机符号向量;(3)不使用随机符号向量。我们观察到,在没有随机符号向量的情况下,模型质量较低,而在每次变换实例中引入随机性没有任何改善。因此,我们发现对于 120 亿参数模型,所有变换使用单一固定种子就足够了。有趣的是,12 亿参数模型上的随机性策略之间没有明显的模型质量差异,这进一步证实了这些技术在更大模型和更长 tokens 序列上更为关键。

E.5 张量之间的一致表示

对权重或激活张量应用缩放和哈达玛变换通常会导致前向传播和反向传播中不同的量化表示。因此,我们研究了模型训练期间张量不一致表示的影响。具体而言,我们考虑了缩放因子的不同选择:(1)前向传播和反向传播中沿相同维度(即输入通道)的 1×16 块缩放;(2)沿不同维度(即点积维度,从前向传播中的输入通道变为反向传播中的输出通道)的 1×16 块缩放;(3)16×16 块缩放因子。虽然(1)和(3)在训练的两个阶段保持相同的量化表示,但(2)在前向传播和反向传播之间会有不同的量化。实际上,只有(2)和(3)可以实现,因为张量核心要求沿点积维度的缩放因子,而该维度在反向传播中会被转置。

图 14 张量一致性的影响。12 亿参数模型在 1 万亿 tokens 上训练的验证损失相对于 BF16 基线的相对差异。NVFP4 应用于权重或激活。应用不同的缩放因子选择:沿相同维度的 1×16 块缩放、沿不同维度的 1×16 块缩放和 16×16 块缩放,以及全局 FP32 张量级缩放。

在图 14 中,我们观察到,在 12 亿参数模型的整个训练过程中,不同的量化权重张量对损失有负面影响,其中(1)比(2)实现了更好的准确率。尽管(3)中的二维块缩放具有更大的块粒度,但与(2)相比也改善了损失。另一方面,激活对前向传播和反向传播中张量之间的一致性不太敏感,仅在学习率衰减的后期阶段受到影响。我们假设权重比激活受到的影响更大,因为权重不一致引起的误差会体现在激活梯度中,并在反向传播期间流经模型层。我们还怀疑应用哈达玛变换会加剧这种不一致性,并进一步影响模型准确率。

相关推荐
颜值博主17 小时前
新一代大模型范式: Inner Tools
人工智能·ai·语言模型
IT_陈寒17 小时前
Python 3.12 新特性实战:这5个改进让我的开发效率提升40%
前端·人工智能·后端
comli_cn17 小时前
残差链接(Residual Connection)
人工智能·算法
摸鱼仙人~17 小时前
在政务公文场景中落地 RAG + Agent:技术难点与系统化解决方案
人工智能·政务
Aaron158817 小时前
基于VU13P在人工智能高速接口传输上的应用浅析
人工智能·算法·fpga开发·硬件架构·信息与通信·信号处理·基带工程
予枫的编程笔记17 小时前
【论文解读】DLF:以语言为核心的多模态情感分析新范式 (AAAI 2025)
人工智能·python·算法·机器学习
HyperAI超神经17 小时前
完整回放|上海创智/TileAI/华为/先进编译实验室/AI9Stars深度拆解 AI 编译器技术实践
人工智能·深度学习·机器学习·开源
大模型真好玩17 小时前
LangGraph智能体开发设计模式(四)——LangGraph多智能体设计模式:网络架构
人工智能·langchain·agent
北辰alk17 小时前
RAG嵌入模型选择全攻略:从理论到代码实战
人工智能