端到端 4 比特训练|10 个关键问题Q&A
- Q:这项工作的核心目标是什么?
A:在 GB300 Blackwell 硬件上实现大模型端到端 4 比特训练,用 NVFP4 提速,控制量化误差,兼顾训练速度与模型效果,代表模型为 Inkling 2 Small。 - Q:数值格式怎么搭配使用?
A:MoE 层前向用 NVFP4,反向梯度计算用 MXFP8;BF16 作为基础高精度格式,NVFP4 理论速度远高于 MXFP8、BF16,但量化误差更大。 - Q:NVFP4 的原理是什么?
A:4 比特 FP4 搭配 E4M3 分块缩放,16 个值为一个块,按块内最大值确定缩放系数;还可叠加 FP32 外层缩放,拓宽数值表达范围。 - Q:NVFP4 训练的主要难点是什么?
A:张量转置时分块方式改变,缩放因子变化,容易造成梯度偏差、大量数值下溢归零,破坏反向传播稳定性。 - Q:怎么解决反向传播的梯度偏差?
A:采用随机舍入重量化,反量化、转置后再随机舍入量化到 MXFP8,保证张量在期望上不变,消除系统性偏差。 - Q:计算提速后遇到什么新瓶颈?如何解决?
A:MoE 专家并行的 GPU 通信瓶颈。分发传输 NVFP4;合并时做随机哈达玛变换,再量化为 S2F6,压缩通信量且不损失精度。 - Q:BBBK 内核作用是什么?
A:自研融合内核,调度 Tensor Core、ALU、NVLink 流水线,把哈达玛变换、量化等逻辑融合进算子收尾,减少停顿,拉高硬件利用率。 - Q:这套方案最终收益和代价?
A:预训练提速 8%,RL 采样提速 20%;代价是约 2% 的计算效率损失,RL 奖励无明显下降。 - Q:为什么优先选 MoE 层做 NVFP4 量化?
A:MoE 计算量大,量化后对精度的负面影响相比其他层更小,提速收益高,是投入产出最优的量化位置。 - Q:未来研究方向是什么?
A:探索反向传播也使用 FP4 的训练方案,以及在英伟达 Vera Rubin 新硬件上迭代这套低精度训练配方。
作者:Jack Cook(X 账号:@jackcookjack),与 Thinking Machines 团队其他成员合作 发布时间:2026 年 11 月 13 日
配图:克劳德・莫奈作品《韦特伊的塞纳河》(来源:维基共享资源),经过量化压缩至 16 色
原文链接
https://thinkingmachines.ai/blog/end-to-end-4-bit-training/#introduction
训练大语言模型需要计算、存储海量数值。每个数值使用更少比特,可以降低内存占用,同时让 GPU 的计算速度更快。但这是一种取舍:比特数越少,可表示的数值就越少,舍入误差会变得更明显。低精度表示最终会给计算引入误差,损害模型精度。
举个例子:假设我们要存储数字 3.2,但该数值格式下最接近它的两个值是 3 和 4。如果舍入为 3,就会产生量化误差:−0.2,也就是真实值与量化格式可表达值之间的差值。单次误差看起来很小,但训练过程中,每一层、每一轮优化都会反复舍入,误差会不断累积,最终干扰模型学习。
这就是低精度训练的核心难题:如何在利用高速计算优势的同时,不让引入的误差破坏学习过程?
我们在训练中采用三种核心数值格式来平衡这一矛盾:BF16、MXFP8、NVFP4。每种格式的精度固定,但算力速度取决于硬件。我们基于英伟达 Grace Blackwell Ultra 平台 GB300 开展训练,这款硬件专门针对 NVFP4 矩阵乘法做了优化。值得一提的是,NVFP4 存储所需比特数仅为 BF16 的 1/3.6,在 GB300 上最高可快 6 倍。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
NVFP4 在 GB300 上的加速能力,在大规模推理场景里非常好用 —— 推理场景优先追求速度。但对比 BF16 与 MXFP8,NVFP4 会显著放大量化误差。不同训练阶段对误差的耐受度不一样,前向、反向传播、预训练、有监督微调(SFT)、强化学习(RL)的采样与训练环节,都需要单独权衡取舍。
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
高吞吐环节最看重速度:处理万亿 token 的预训练、每一轮生成上万 token 的强化学习采样。采样每个 token 时,都需要从全局内存读取模型权重,读取开销和权重存储比特数成正比。
用来更新权重的反向传播,会在一个批次内对大量 token 做平均,随机分布的舍入误差会被稀释。但反向传播对量化偏差十分敏感:如果量化时数值总是固定向上或者向下舍入,就会产生偏差。这种偏差不会被平均抵消,反而会跨层、跨样本、跨训练步不断累积。
我们训练 Inkling 2 Small 模型时,做出了如下方案选型:
-
MoE(混合专家)层前向传播使用 NVFP4 精度,配套专用内核实现; -
反向传播使用 MXFP8 精度,搭配重量化与随机舍入技术,降低梯度偏差; -
采用量化通信技术加速 GPU 之间的数据传输,解决计算提速之后暴露出的通信瓶颈。
Inkling 2 Small 是目前已知首个全程原生 4 比特前向传播完成端到端训练的大规模模型。从预训练开始,一直到最后的强化学习 rollout,全程使用同一套数值配置。这简化了训练流程,训练结束输出量化权重时,不再需要额外校准。在我们最大规模的训练任务里,这套方案相比纯 MXFP8 训练,预训练墙钟速度提升 8%,强化学习阶段提速 20%。本文将详细拆解这套方案背后的技术细节。
量化目标选择
理想情况下,我们希望在对模型精度影响最小的位置降低精度,同时拿到可观的整体加速收益。MoE 混合专家层是最合适的选择:这类层计算开销巨大,过往实验也证明,对它做量化,对精度的负面影响通常小于其他层。
今年早些时候,我们完成了 MoE 层全 MXFP8 训练,发现这套方案几乎不影响模型的计算效率(CE)—— 计算效率是一项指标,用来衡量引入新方法后训练损失、评估损失的变化。
参考文献:Mishra 等人,2025;Kaplan 等人,2020
但我们早期直接做全 NVFP4 训练时,模型计算效率大幅下跌,精度损失超出了可接受范围。
我们单独隔离 NVFP4 量化在前向、反向传播里的影响后发现:只在前向传播使用 NVFP4,速度和精度的综合收益更好。但仅量化前向传播,会给反向传播、GPU 通信等环节带来一系列联动问题。想要理解这些问题,我们先深入了解 NVFP4 的工作原理。
Blackwell 架构上的低精度格式
4 比特最多可以表示 16 个不同数值:FP4 的取值集合为 ±{0, 0.5, 1, 1.5, 2, 3, 4, 6}。显而易见的短板是无法表达大于 6 的数,这个问题依靠分块缩放(block scaling)解决:存储一个缩放因子,用它乘以连续一整块内的所有数值。NVFP4 会把连续 16 个数值划为一个块,根据块内绝对值最大的值确定缩放系数。
举个例子:块内最大值是−54,就用−6 代表这个数值,缩放因子设为 9;块内所有数值都会基于这个缩放因子做舍入。
Blackwell GPU 同时支持微缩放(MX)格式,例如 MXFP4、MXFP8,这类格式以 32 个数值为一个块做缩放。
参考文献:Rouhani 等人,2023(OCP 微缩放规范)
两者的缩放因子格式也不一样:NVFP4 的缩放因子采用 E4M3,精度更高,但取值范围有限;MXFP4/MXFP8 的缩放因子是 E8M0,精度低很多,但可以覆盖极大的数值范围。
E4M3:8 位浮点格式,1 位隐式符号位、4 位指数位、3 位尾数位;E8M0:8 位指数位,无符号位、无尾数位。
在大语言模型任务中,NVFP4 缩放因子精度更高,对输入数据的表达更准确,量化误差通常低于 MXFP4。
下方交互工具演示了 NVFP4 分块缩放机制以及对应的量化误差:本文所有配图均由 Inkling 2 Small 生成。
高精度数值 96×6=576 量化误差:−17.7 E4M3 缩放因子 符号:0 指数:1101 尾数:100 计算公式:\((-1)^0 × 2^{(1101_2-0111_2)} × 1.100_2 = 96\)
FP4 数值 符号:0 指数:11 尾数:1 计算公式:\((-1)^0 × 2^{(11_2-01_2)} × 1.1_2 = 6\)
一个由 FP4 数值 + FP8 缩放因子重构得到的 NVFP4 值。你可以修改输入或者单独修改比特位,探索它的表达范围。灵感来源:float.exposed。
FP4 搭配 FP8 缩放因子,让 NVFP4 可以表达低至\(2^{-10}\)、高至 2688 的幅值。实际场景里经常会遇到超出这个区间的数值,因此 NVFP4 一般会额外增加一层外层缩放因子,用 FP32 存储,作用在整个张量这样的超大数值组上。最终量化值的重构公式:
\(x_i = x_i^{\text{FP4}} × x_{\lfloor i/16 \rfloor}^{\text{FP8}} × x^{\text{FP32}}\) 外层 FP32 缩放因子可以整体平移可表达范围。比如设为 2,可表达幅值区间就从\([2^{-10},2688]\)变为\([2^{-9},5376]\);设为 0.5 则反向平移。
分块缩放下的反向传播
网络前向传播的计算:量化激活值 × 量化权重 \(y = x_q w_q^T\)。 NVFP4 矩阵点积的计算方式:取\(x_q\)一行里连续 16 个值、\(w_q^T\)一列里连续 16 个值成对相乘,求和之后再乘上各自块的缩放系数。
反向传播需要对前向张量转置:\(dx = g w_q\),\(dw = g^T x_q\)。 此时分块的规则变了:从\(x_q\)的列、\(w_q^T\)的行里取 16 个值组成一个块。同一个数值会和另外 15 个不同邻居分到一组,对应的缩放因子、量化结果都会改变。下图展示了分块从按行切换为按列带来的影响:很多数值会被舍入到 0。
图示说明:1×16 缩放块 / 16×1 缩放块 高精度原始数据:0、1、4、16、64 16×16 高精度数值块;NVFP4 量化结果 1×16 按行缩放:256 个值全部保留,每行独立缩放 16×1 按列缩放:由行内大值决定每一列的缩放,大部分小数被归零 对数高度标尺,放大小数差异
这就造成了前向、反向传播使用的张量不一致,梯度计算失真。针对权重张量,英伟达给出一个直接方案:不再按 1×16 块单独算缩放,而是以 16×16 方块 tile 为单位,取 tile 内最大值统一缩放;张量转置前后缩放因子保持一致。
参考文献:NVIDIA 等人,2025;DeepSeek-AI,2024(FP8 相关方案)
这个方案的主要缺陷是大量数值会下溢归零。把块大小从 16 扩大到 256 之后,对异常值极度敏感:256 个数里只要有一个极大值,就会拉高整体缩放系数,剩下绝大多数数值直接被舍入为 0。
图示说明:1×16 缩放块 / 16×16 tile 统一缩放 高精度原始数据:0、1、4、16、64 带一个异常大值的 16×16 数值块;NVFP4 量化结果 1×16 分组:仅异常值附近少量小数归零 16×16 全局 tile 缩放:异常值拉高缩放,大量数值归零 对数高度标尺,放大小数差异
我们尝试了这个方案,但最终发现 16×16 tile 的缩放粒度太粗,模型计算效率下跌到无法接受的程度。想要 NVFP4 训练可用,我们需要权重保持 1×16 分块缩放,同时解决转置带来的分块不匹配问题。
基于随机舍入的重量化
使用 16×16 tile 可以做到转置前后比特层面完全一致:\(w_q=(w_q^T)^T\),但严格的比特一致并不是硬性要求。真正关键的约束是:前向、反向用到的张量期望相等:\(\mathbb{E}[w_q]=\mathbb{E}[(w_q^T)^T]\)。只要期望不变,就能解决反向传播的偏差问题;不再强制比特完全相同,就给我们留出多种方案解决转置分块矛盾。
我们选择了一套简洁方案:把前向传播保存的张量反量化,在更高精度下做转置,再用随机舍入(SR)重新量化。 常规量化是就近舍入;随机舍入则按概率向上 / 向下舍入,离哪个值更近,舍入到它的概率就更高。
举个例子:前向张量里某个值是 5.4,所在块缩放系数为 9。5.4 ÷ 9 = 0.6,就近舍入到 FP4 的 0.5,前向里实际使用的量化值是 4.5。反向传播时,我们希望在期望上还原这个 4.5。
我们先把它反量化到高精度,但反向传播时这个数值被分到新的块,新缩放系数为 2。如果用 NVFP4 重量化:4.5 ÷ 2 = 2.25。确定性就近舍入会直接取 2,量化结果为 4。而随机舍入有 75% 概率取 2、25% 概率取上一个临近值 3。计算期望:\(2 × (0.75×2 + 0.25×3)=4.5\),前向的数值在期望上得以保留。 重要的是,Blackwell GPU 硬件原生支持随机舍入加速。
这套思路借鉴了 TetraJet-v2、Quartet II 的设计,它们同样会对前向保存的张量做重量化。
参考文献:Chen 等人,2025;Panferov 等人,2026
直接对反量化后的数值做随机舍入,还有一个好处:重量化时可以自由选择精度。我们实验发现,权重、激活值随机重量化到 MXFP8,再用 MXFP8 矩阵乘法计算梯度,在精度和速度之间取得最优平衡。
示意图说明:量化线性层架构 前向:BF16 激活 → 按 token 量化到 NVFP4(4/6 FPROP)→ NVFP4 矩阵乘法;FP32 权重 反向:反量化、转置 → 随机舍入量化至 MXFP8;梯度矩阵乘法(DGRAD、WGRAD);优化器更新权重 图例:FP32 / BF16 / MXFP8 / NVFP4 核心逻辑:前向 NVFP4 计算,反向 MXFP8 计算,保存的激活、权重在重量化时使用随机舍入
量化通信
启用 NVFP4 矩阵乘法之后,MoE 层前向理论上会比 MXFP8 版本快大约 3 倍。但精度降下来之后,我们撞上了新瓶颈:专家并行场景下的 GPU 通信。
MoE 层通常体量巨大,专家会被拆分到不同 GPU 上。计算 MoE 时,路由模块决定每个 token 去往哪个专家,token 被分发到存放对应专家的 GPU;矩阵乘法完成后,计算结果再传回源 GPU 合并,得到 MoE 层最终输出。 在 GB300 NVL72 系统上,token 通过 NVLink 传输,双向带宽各 900GB/s;而 NVFP4 矩阵乘法最高可达 15 PFLOPS。换算下来:GPU 收到 1 字节数据的时间里,最多可以执行 16000 次浮点运算。如果每字节数据带来的计算量达不到这个水平,Tensor Core 就会空转等待 NVLink 数据。
这种算力和带宽的失衡造成了瓶颈:要么 MoE 矩阵乘法等 token 分发数据,要么后续算子(Inkling 2 Small 里是短卷积)等合并后的 token。
分发阶段,我们把 token 直接以 NVFP4 格式传输,规避瓶颈。和 Quartet II 思路一致:反向传播直接复用前向保存的量化激活值(不是高精度版本),大幅减少 NVLink 传输的数据量,缓解分发瓶颈。 但合并阶段,输出激活值必须维持更高精度(默认 BF16),否则模型性能会受损。
我们对合并阶段的传输数据同样做量化,进一步缓解通信瓶颈。一开始尝试把激活量化到 MXFP8,但 MXFP8 对异常值表达能力差,精度损失明显。 最终方案:先做 32 维随机哈达玛变换(RHT),再量化到分块缩放 S2F6(另一种 8 位格式),全程没有观测到可衡量的训练精度下降。
图示说明:16bit 合并 / 8bit 合并 分发→计算→合并;多波专家流水(DeepSeek-V4 细粒度重叠方案) 量化合并数据,可以缩短合并阶段的尾部耗时
哈达玛变换是正交变换,可以保留总能量,同时抹平数据分布,弱化异常值带来的量化误差。已有研究证明,低精度场景下,整数格式往往比浮点格式更适合表达经过哈达玛变换后的数据。
参考文献:Chen 等人,2025;Egiazarian 等人,2025
S2F6 是定点格式:2 位有符号整数位 + 6 位小数位,取值范围 \([-128/64,\ 127/64]\),本质上接近整数格式。
示意图:原始高精度数据 / 哈达玛变换之后 异常值(|v|≥200)在变换后被均匀打散,变换可逆,接收端可以精确还原原始数据
Blackwell GPU 内置专用 PTX 指令,高效完成分块 S2F6(搭配 E8M0 缩放因子)的格式转换:
cvt.frnd2.satfinite{.relu}{.scaled::n2::ue8m0}.s2f6x2.f32 d, a, b{, scale-factor};
cvt.frnd2.satfinite{.relu}{.scaled::n2::ue8m0}.s2f6x2.bf16x2 d, a{, scale-factor};
cvt.rn{.satfinite}{.relu}{.scaled::n2::ue8m0}.bf16x2.s2f6x2 d, a{, scale-factor};
我们基于这套指令实现了高性能内核。在每个 GPU 完成 MoE 计算之后,w2 分组矩阵乘法的收尾阶段,就地完成哈达玛变换 + S2F6 量化,每 32 个数值共用一个缩放因子。接收端收到数据后,边接收边反量化、聚合,最后逆哈达玛变换恢复原始值。 这套方案把合并阶段每数值 16bit 的传输开销降到 8.25bit,缩短合并阶段耗时,加速 MoE 层。
面向低精度训练的内核
想要充分发挥 NVFP4 的性能,需要自研专用内核支撑整套低精度方案。我们的 MoE 融合内核栈代号 BBBK(Big Beautiful Blackwell Kernel),同时服务训练与推理,在保证计算完全可复现、可确定的前提下,打满硬件利用率。
MoE 层计算的主体是矩阵乘法。我们使用 GB300 独有的 2SM UMMA 指令(K=96)打满 Tensor Core,配套 6 级乘数流水线、7 级缩放因子流水线。 但我们这套精度方案对 GPU 算术逻辑单元(ALU)压力也很大:就算 Tensor Core 已经跑满,计算缩放系数、权重重量化、随机舍入、数据合并这些 ALU 密集步骤,依然会造成内核停顿。
BBBK 内核的设计目标就是让多条硬件流水线同时饱和运转。例如,把哈达玛变换、S2F6 量化直接融合进 w2 矩阵乘法的收尾 epilogue。更广泛的优化手段包括激进的 epilogue 融合、ALU 向量化、指令调度、寄存器打包、超内核推测调度。训练时 BBBK 可以同时打满 NVLink、ALU、Tensor Core;强化学习采样场景下,它可以触达 NVLink 与 HBM 决定的延迟下限。
方案细节
我们借鉴多篇 NVFP4 训练相关论文完善整套方案:
-
最后 16.6% 的层保留更高精度,使用 MXFP8 而非 BF16 计算。英伟达方案取 15%,我们的预训练阶梯里层数放大 6 倍,1/6 的比例适配我们的配置; -
激活量化采用 4/6 技术:NVFP4 量化时在两组缩放因子之间择优,降低量化误差;权重量化不使用 4/6;
参考文献:Cook 等人,2025
-
参考 Composer 2:权重量化使用按专家外层缩放,激活量化使用按 token 外层缩放,兼顾效率、批次不变性,同时避免因果泄露。
参考文献:Cursor 等人,2026
这套方案在我们最大规模任务里,SFT 和强化学习阶段无需修改配置。用它预训练 Inkling 2 Small,计算效率损失约 2%:意思是,想要达到相同损失,这套方案的算力消耗,等价于纯 MXFP8 训练多花了约 2% 的 FLOPs,换来 NVFP4 带来的速度提升。 强化学习场景收益更大:端到端速度明显提升,奖励指标没有观测到可感知的下降。
结语
十年前,大家还不确定神经网络能不能用低于 32bit 的参数训练;直到 2020 年 Ampere 架构上线,BF16 才正式登上英伟达 GPU,那时 FP32 还是默认格式。 如今我们已经把 BF16 称作 “高精度”,8 比特甚至 4 比特训练都有了稳定可用的方案!英伟达前瞻性的硬件设计,为这些突破打下基础。我们还在持续探索:反向传播全程 FP4 计算的方案,以及这套方案在英伟达新一代 Vera Rubin 平台上的演进路线。
预训练、后训练的提速,是一整套栈上科学与工程优化叠加的成果,各个环节互相增益。几个月前,训练一个和 Inkling 2 Small 规模相近的模型需要数周;而 Inkling 2 Small 在 GB300 NVL72 集群上,仅用 68 小时就完成预训练。数值精度方案只是众多改进中的一环,我们也会持续迭代。
每一次实验、每一轮训练,我们都在收获新认知,期待后续博客继续分享更多进展。
引用
引用格式: Cook, Jack and Thinking Machines Lab, "End‑to‑End 4‑Bit Training", Thinking Machines Lab: Connectionism, Nov 2026.
BibTeX:
@article{cook2026lowprecision,
author = {Jack Cook and Thinking Machines Lab},
title = {End‑to‑End 4‑Bit Training},
journal = {Thinking Machines Lab: Connectionism},
year = {2026},
note = {https://thinkingmachines.ai/blog/end-to-end-4-bit-training/},
}

