NVFP4: 4位浮点数预训练

大语言模型训练精度的革命性突破

首次实现4位浮点数(FP4)训练超大规模语言模型(12B参数,10T tokens), 达到了与FP8训练相当的精度,相比FP8实现算力提升2-3倍内存使用减半能耗显著降低, 为未来LLM训练效率提升打开了新的可能性。

为什么需要更低精度的训练?
训练一个前沿模型需要数十到数百 yottaflops的计算量。 就像建造摩天大楼,如果能用更轻的材料达到相同强度,就能节省材料、提升速度、降低能耗。 FP4训练相比FP8可以带来:
  • 算力提升 2-3倍
  • 内存使用 减半
  • 能耗 显著降低
现有方法的三大挑战
1. 数值表示范围极窄 - FP4只有1位符号、2位指数、1位尾数,可表示的值极其有限

2. 训练不稳定 - 量化误差累积,梯度更新容易偏差,大规模模型放大问题

3. 实现复杂度高 - 需要保持数值一致性,异常值破坏量化效果,不同层敏感度不同

核心矛盾:如何在极窄的4位精度下,保证数万亿tokens的训练稳定性和模型质量?
2-3×
算力提升
50%
内存节省
12B
模型参数规模
10T
训练Tokens

NVFP4 四大核心创新

1
NVFP4 数据格式:精细化微缩放
改进传统MXFP4格式:
更小的块大小:16个元素(vs 32),更精细地适应局部数值分布
FP8缩放因子:相比UE8M0的2^n精度,FP8可以表示如1.5×2^n的值
两级缩放:micro-block处理局部 + tensor-level处理全局,双重保险

公式: NVFP4 = 局部微缩放(16元素 + FP8缩放因子) + 全局张量缩放(FP32)
2
随机Hadamard变换(RHT):驯服异常值
问题:异常值会强制放大整个块的缩放因子,导致其他正常值精度损失

解决方案:
• 将权重梯度乘以随机Hadamard矩阵
• 将异常值的能量分散到多个元素
• 使数值分布更接近高斯分布,降低块内动态范围

关键设计:只对Wgrad(权重梯度)应用,使用16×16矩阵,固定随机种子
3
二维(2D)块缩放:前向后向一致性
问题:传统量化在前向和反向传播中可能产生不一致的量化表示

NVFP4的2D缩放方案:
• 使用16×16的块缩放因子
• 同时考虑行和列的缩放
• 确保W和W^T的量化表示数值一致

重要性:在数万亿tokens的长训练中,一致性至关重要,避免误差累积
4
随机舍入(Stochastic Rounding):无偏梯度估计
问题:传统"四舍五入"会引入系统性偏差,可能导致梯度消失

随机舍入做法:根据小数部分的大小,概率性地向上或向下取整

关键发现:
• 只对梯度应用(Wgrad和Dgrad的梯度输入)
• 不对激活和权重应用(会引入过多噪声)
保证梯度更新的期望无偏:E[量化梯度] = 真实梯度
NVFP4矩阵存储格式
16×32矩阵的NVFP4存储格式 - 展示微块划分和双层缩放机制
NVFP4量化线性层的计算流程
NVFP4量化线性层的计算流程示意图
NVFP4与MXFP4对比
NVFP4与MXFP4格式对比 - NVFP4在精度和稳定性上的优势
混合精度策略
不是所有层都能承受FP4的精度损失,需要选择性保持高精度

保持FP8/BF16精度的层:
• 嵌入层(Embedding):输入输出敏感
• 最终的线性层:直接影响输出质量
• 最后几个Transformer块:决定最终表示质量
• LayerNorm和激活函数:数值稳定性关键

12B模型的具体配置:总共40层,前36层线性层用NVFP4,最后4层保持FP8
量化流程
完整的NVFP4量化包含以下步骤:

1. 全局缩放:计算张量级FP32缩放因子
2. 分块:将张量划分为16元素的微块
3. 局部缩放:为每个微块计算FP8缩放因子
4. 量化:将缩放后的值映射到FP4可表示范围
5. 存储:紧凑存储FP4值和两级缩放因子
12B模型10T tokens训练的消融实验
12B模型在10T tokens训练上的消融实验结果 - 验证每个组件的重要性
NVFP4与FP8训练损失对比
12B模型使用10T tokens训练的验证损失曲线 - NVFP4与FP8几乎完全一致
NVFP4与FP8在预训练过程中的任务准确率
预训练全程的任务准确率对比 - NVFP4在各项任务上与FP8保持一致
史无前例的训练规模
这是迄今为止公开报道的最大规模FP4训练

模型规模:12B参数(hybrid Mamba-Transformer)
训练数据:10T tokens
训练时长:数千GPU-小时
成果:loss曲线和下游任务精度与FP8基线相当
下游任务性能
在多个标准评测基准上的表现:

任务 FP8基线 NVFP4训练 差异
MMLU-pro 62.62% 62.58% -0.04%
GSM8K ~85% ~84.5% -0.5%
HumanEval ~52% ~51% -1%
关键发现:NVFP4在MMLU-pro上几乎完全匹配FP8基线,证明了FP4训练的可行性
消融实验的重要发现
详尽的消融实验验证了每个组件的重要性:

Hadamard变换:不使用RHT导致loss上升~3%
随机舍入:不使用会导致训练发散
2D缩放:1D缩放(不一致)会使loss增加~2%
混合精度:全FP4训练不稳定,最后4层FP8最优
技术架构总结:分层优化设计
数据格式层: [NVFP4格式] - 16元素微块 - FP8局部缩放 + FP32全局缩放 ↓ 数值处理层: [Hadamard变换] → [2D块缩放] - 分散异常值 - 保证前向后向一致性 ↓ 量化策略层: [随机舍入] + [混合精度] - 梯度无偏估计 - 敏感层高精度 ↓ 训练流程: [稳定的FP4训练]

核心设计哲学:
格式优化数值鲁棒统计无偏选择性精度
适用场景
NVFP4训练特别适合以下场景:

超大规模预训练:数十亿参数、数万亿tokens的模型
资源受限环境:GPU内存或算力有限
能效敏感应用:降低训练能耗和成本
下一代硬件:NVIDIA Blackwell等原生支持FP4的加速器
研究探索:探索极低精度训练的可能性边界
局限性与未来方向
当前局限:
• 需要NVIDIA Blackwell等支持FP4的硬件才能获得实际加速
• 需要深度定制训练框架(如Transformer Engine)
• 主要在Mamba-Transformer混合模型上验证
• 超参数需要针对不同模型调优

未来改进方向:
• 自适应精度:根据训练阶段自动调整
• 更小精度:探索3-bit甚至2-bit训练
• 端到端优化:从架构到硬件的协同设计
实现建议与关键配置
数据格式:微块大小16元素,局部缩放FP8 (E5M2),全局缩放FP32

Hadamard变换:16×16矩阵,仅应用于Wgrad输入,固定随机种子

舍入策略:随机舍入应用于梯度,最近舍入应用于激活和权重

混合精度:前90% Transformer块用NVFP4,后10%用FP8,特殊层保持FP8/BF16

训练监控:密切监控loss稳定性,出现spike时临时切换到FP8

基于NVIDIA发布的NVFP4研究论文 | 论文原文 | Transformer Engine

Kcores LLM Arena Logo