随着英伟达(Nvidia)预期推出的 Vera Rubin GPU 架构,我想我们很多人都已经频繁听到 MVFP4 这个术语了。比如,“在 MVFP4 精度下,它能实现每秒 50 PetaFLOPS(千万亿次浮点运算)的计算能力。”听起来很酷。虽然有很多数字和花哨的术语,但恐怕 90% 的股票持有者甚至不知道这句话是什么意思。因此,在今天的视频中,让我们深入探讨精度对于人工智能时代的重要性,并找出英伟达为何如此坚定地要将 MVFP4 推向大型语言模型(LLM)的前沿。顺便说一下,本视频并非由英伟达赞助。
但在深入探讨之前,既然我们谈到了运行 LLM 的硬件精度,下一个合理的阶段就是部署和优化您想要运行的模型,对吧?今天的赞助商 Cruso 通过其名为“Cruso Intelligence Foundry”的产品,将 LLM 部署过程变得优雅得多。他们基本上为您提供针对领先开源模型的无服务器推理和无服务器微调服务,而无需自行配置或管理底层 GPU 基础设施。您可以在几分钟内部署模型并通过 API 开始调用它,或者在您自己的数据集上进行微调,而无需先设置整个集群。
因此,无论您是希望快速实验开源模型、围绕其构建应用程序,还是使用自己的数据定制模型,Cruso 都会处理底层基础设施,让您能花更多时间真正进行构建。目前,每个新的 Cruso 账户都会自动获得 5 美元的免费积分供您试用。您只需要注册,积分就会直接应用到您的账户中。因此,请使用描述中的链接立即查看 Cruso Intelligence Foundry 并试用它。感谢 Cruso 对本视频的赞助。
总之,计算机中的精度并不是什么新鲜事。在最基本的层面上,精度仅仅意味着计算机使用多少位来存储一个数字。FP32 使用 32 位,BF16 使用 16 位,FP8(原文为 FBA,推测指 FP8)使用 8 位,而 FP4 仅使用 4 位。数字越小,移动、存储和计算的成本就越低。这对人工智能非常重要,因为训练和推理基本上就是不断地将大量数字相乘。因此,通过使用更少的内存来表示一个数字,您自然可以节省更多内存。但显然存在一个问题:格式越小,每个数字能携带的信息就越少。
因此,随着精度降低,关于如何分配位来表示一个数字的设计决策就越多。因为如果您仔细查看,我们在上面的例子中实际上有一个名为 BF-16 的格式。而我提到的其他所有格式都以字母 FP 开头。FP 基本上代表浮点数(floating point)。但至于 BF,它实际上代表脑浮点(brain floating point)。之所以称为“脑”,是因为 BF-16 最初由 Google Brain 团队设计,并用于机器学习工作负载。在这些场景中,我们更关心表示更广泛范围的值,而不是完美地代表每一个微小的十进制细节。
因此,当您说一个数字格式有 16 位时,这并不完全是全部情况。真正的问题是这些 16 位是如何使用的?浮点数通常分为三部分:符号、指数和尾数。符号是最简单的部分,它告诉您数字是正还是负。至于指数,它告诉你数字的规模(scale)。然后对于尾数,它告诉您该规模内的细节。所以这里有一个例子。假设你想存储这个数字 6,250。计算机的存储方式是 6.25 * 10^3(即 6.25 * 1,000)。这里的“3”是指数,它告诉你规模或数字大致有多大。6.25 部分是尾数,它告诉您该尺度内的细节。
现在想象一下我们的尾数位更少了。所以与其存储 6.25,也许我们只能存储 6.2。那么数字就变成了 6.2 * 10^3 = 6,200。如您所见,我们基本上偏离了 50。再次强调,如果您有更少的尾数精度,也许您只能存储“6”,导致结果为 6 * 10^3 = 6,000。现在我们要偏离了 250。这就是尾数所控制的内容,因为它显示了所选尺度内数字的精确度。然后想象一下分配给指数的位数更少了。那意味着我们甚至无法达到千位级别。这就是权衡取舍。
因此回到区别上,FP16 给了我们更多的尾数位,所以它可以更详细地表示附近的值,但它的指数位较少,因此范围较小。BF16 则与此相反。它保持了与 FP32 相同的指数大小,这赋予了它更宽的范围,但它削减了尾数,因此十进制细节较少。但这就是 BF16 在 AI 训练中变得如此流行的原因。因为在训练期间,神经网络需要数字不会爆炸、消失或溢出,当梯度、激活和权重跨越非常不同的尺度移动时。
虽然您保留了 XON 提供的大动态范围,但当我们低于 BF-16 时,问题变得更加困难。使用 FP8(原文为 FPA)尤其是 FP4 时,您可用的位数非常少。这意味着模型的每一部分都对舍入误差更加敏感。权重将开始丢失有用信息,激活可能会被舍去,这意味着注意力机制会变得不准确。梯度也可能变得嘈杂或完全消失。当这些错误在训练期间发生时,它们不仅仅影响一个操作。它们在数十亿次操作中累积。
因此,通常在训练中,研究人员必须使用更高的精度进行计算,因为您需要精确的学习信号,这导致了极其高昂的内存需求。但在推理期间,模型已经训练完毕,您主要是在尝试以低廉的成本运行前向传递,同时保留模型的行为。这里的错误更容易妥协(compromisable)。因此您会看到在推理期间以较低的位数运行更为流行。但这并没有阻止人们尝试使训练和推理尽可能便宜。而英伟达的 MVFP4 基本上是他们让 FP4 变得实用的尝试。
但在讨论 MVFP4 之前,我们必须先谈谈其前身 MXFP4(微缩放浮点 4)。MXFP4 也是一种 4 位浮点格式,它使用某种缩放机制。其理念是:与其单独处理每个四位数字,不如将一组值分组在一起,并为该组分配一个共享的缩放因子。例如,如果这个块被分配了 100 的缩放因子,那么一个微小的四位数值如“6”可以代表 600,“1.5”可以代表 150。因此,四位数字并不是试图直接存储完整的实数。相反,它存储的是一个缩放后的值。
局部微小值通过缩放因子扩展回正确的范围。但如果数值不在同一范围内呢?想象这样一个块,其中大多数值非常小,而有一个较大的值。如果选择的共享缩放因子是为了保留80,那么微小值可能会变得太小而无法准确表示;但如果为了保留这些微小值而选择缩放因子,那么80可能会过大并被截断。这是MXFP4面临的问题之一,因为它必须使用一个缩放因子来覆盖每32个值。另一个问题是MXFP4使用的是以二为底的幂次缩放,这意味着当理想的缩放因子应为70时,格式仍必须选择64或128。
这就是Nvidia的MVFP4介入的地方。它保留了微缩放的核心思想,但将块大小从32个值改为16个值。这意味着一个缩放因子现在需要覆盖更少的数字,使量化对张量具有更局部的视角,从而减少差异发生的可能性。第二个变化是MVFP4用FP8缩放取代了以二为底的幂次缩放。更具体地说,它使用E4M3作为块缩放因子,即四个指数位和三个尾数位。
这意味着缩放因子同时具有指数位和尾数位,因此它可以表示更精确的缩增值,而不仅仅是在二的幂次之间跳跃。第三个变化是MVFP4在FP8块缩放之上增加了一个额外的FP32缩放因子。添加这个FP32缩放是因为E4M3 FP8块缩放的精度高于MXFP4的二幂次缩放,这意味着它们的动态范围较小。因此Nvidia添加了一个FP32张量缩放因子来处理较大的全局范围,然后让FP8块缩放处理较小的局部差异。
因此,当应用时,这肯定比简单的精度格式更复杂且更具算法性。而且,能够在FP4中表示更多的数字并不意味着它现在成为一种完全可行的方法。也许对于推理而言,你可以量化模型训练过程并在之后恢复精度;但对于训练来说,模型仍在学习中。前向传播、反向传播、梯度和权重更新都必须保持稳定以处理万亿个令牌。
为了使它可行,Nvidia必须围绕其开发一套完整的训练配方。该配方的第一部分是在较高精度下保留敏感层,就像任何其他低精度训练一样。在论文《使用MVFP4预训练LMS》中,他们发现如果将所有线性层量化为FP4,训练将会发散。最终层特别敏感,因为它们需要更多的动态范围和精度。因此对于网络最后15%的部分,他们必须保持较高精度,其中大多数高精度层位于末尾附近。
配方的第二部分是所谓的权重二维块缩放。还记得MVFP4如何使用16个值的块吗?但在训练期间,相同的权重矩阵以不同的方向使用。在前向传播中,模型使用权重计算激活值;在反向传播中,模型再次使用权重来计算梯度。如果在这两个方向上对权重进行不同的量化,训练将变得不那么忠实,因为反向传播本应计算前向传播中发生的精确操作的梯度。
但如果前向传播看到一个舍入版本的权重矩阵,而反向传播看到该相同矩阵的另一个略有不同的舍入版本,那么梯度就不再基于模型实际执行的精确计算。因此即使不匹配很小,它仍然会堆积并累积成噪声或有偏的学习信号。所以Nvidia的二维块改变了权重分组的缩放方式。通常,Nvidia使用1x16块,其中张量沿一个方向分解为片段,每16个值共享一个缩放因子。
但对于权重而言,权重矩阵在前向方向使用一次,然后在反向传播的转置方向再次使用。如果缩放仅沿一个方向定义,那么相同的权重矩阵可能会根据你查看其行还是列而以不同的方式进行分组。这意味着前向传播可能使用权重的一个量化版本,而反向传播可能使用另一个版本。因此Nvidia不为权重仅使用1x16块,而是使用16x16块。
因此无论矩阵是在前向传播中正常使用时还是在反向传播中转置时,相同的16x16补丁都可以保持相同的缩放因子。只是16x16的缩放比1x16的缩放宽泛一些,因为现在一个缩放因子需要覆盖256个值而不仅仅是16个值。但Nvidia的研究人员认为,权重比激活值或梯度更能容忍这种差异,因为权重是可训练的。所以它只是时间问题以适应FP4。
配方的第三部分是随机哈达玛变换,这主要解决异常值问题。还记得我们之前讨论过这样一个块以及80如何基本上主导缩放吗?随机哈达玛变换试图在量化发生之前减少这个问题。为了解释它,让我们举一个更简单的例子。这对FP4量化是不利的,因为缩放因子必须围绕块中最大的值(即四)来选择。整个块的数值基本上都是围绕一个数字进行缩放的。
为了平衡这一点,哈达玛变换将值混合在一起变成类似这样的形式。你可能会想这看起来与原始向量相去甚远,但实际上更重要的效果是当你计算向量的幅度时它仍然相同。因此信息只是被重新分配,同时降低了整个向量所需的缩放因子。至于为什么允许这种变换,这是因为只有幅度很重要,因为对于矩阵乘法来说真正重要的是信息是否位于相同的坐标中并不重要,而是能否仍用于产生相同点积。
配方的第四部分是梯度随机舍入。通常当计算机对数字进行舍入时,它们使用确定性舍入。因此如果一个值更接近零则舍入为零;如果更接近一则舍入为一。起初这听起来没问题,但在非常低的精度下这可能成为一个严重问题。例如如果你有一个0.3的梯度更新但FP4格式在该缩放级别只能表示零或一,那么正常舍入总是将0.3向下舍入为零,这意味着模型完全丢失了梯度。
你不能让小数一直消失对吧?因此不是总是将0.3向下舍入为零,而是以30%的概率将其舍入为一。
以70%的概率归零。单次更新可能具有噪声,但在多次更新后,平均值或期望值将变为0.3。因此梯度在利用过程中得以保留。将所有这些部分整合在一起后,他们使用MVFP4在10万亿个token上训练了一个拥有120亿参数的混合Mamba Transformer模型,并将其与FP8基线进行了比较。在训练期间,MVF Force模型的验证损失紧密跟随FB A模型,并且在大部分稳定训练阶段,相对损失差距保持在1%以下。临近结束时,当学习率开始衰减时,差距略微扩大,但模型仍然保持稳定。
更重要的是下游基准测试结果几乎相同,只有编码基准测试略差,且损失差距并未完全消失。在这个120亿参数混合模型成功后,他们随后使用MVFP4构建了Neotron 3系列,并包含了一些关于MVFP4的消融研究。对于拥有约30亿活跃参数的Neimotron 3 Nano,与BF16相比,MVFP4训练损失差距保持在1%以下。但让他们惊讶的是,当他们测试一个拥有80亿活跃参数的更大模型时,该差距实际上降至了0.6%以下。
这意味着如果量化损失随着模型的增大而缩小,那么MVFP4将变得更加理想和经济,这表明较大的模型可能拥有足够的冗余和能力来吸收由FP4引入的噪声。因此,在2026年6月,他们推出了Neimotron 3 Ultra,这是一个拥有550亿参数的混合专家模型,每个token有550亿活跃参数。该模型在20万亿个token上以MVFP4进行预训练,当然他们仍然保留了敏感部分的高精度。
这包括网络的最后15%,即总共108层中的后16层,加上mumbo输出投影、潜在投影、QKV和注意力投影、MTP层以及嵌入层。除此之外,在5万亿、10万亿和16万亿token的消融研究中,训练运行仍然非常顺利。他们从MVFP4的训练过程中取出检查点,将所有张量切换为BF-16,并继续训练另外740亿个token。这是为了检查MVFP4是否损坏了模型,因此切回BF-16应会显示出与高精度路径的巨大差距。
如果是这样,但相对训练损失差距平均保持在0.4%以下。在这些BF-16延续运行的开始时,差距都非常小。即使在BF-16上训练了740亿个token后,上限也仅为0.33%至0.34%,甚至从16万亿检查点降至0.03%,支持了他们早期的缩放声明。因此,精度本身或在此阶段更像是一种算法,确实非常有前景。但这与Nvidia的硬件有什么关系呢?为什么所有新的Nvidia数据都以FP4格式宣传?
这是因为他们正在构建GPU,其中最大的性能提升 specifically 集中在低精度格式上,尤其是FP4。在MVFP4论文中,Nvidia显示在Blackwell GB300上,FP8的吞吐量约为BF-16的两倍,但FP4的吞吐量约为BF-16的六倍。为什么是六倍而不是仅仅四倍?因为吞吐量数字不仅由位宽决定。当然,你可以预期FP4在相同空间内打包四倍多的值,这在GB200上确实如此,FP4约为BF-16的四倍。
但在GB300上,Nvidia为FP4路径提供了更多的硬件吞吐量。因此FP4成为BF-16的六倍,而不仅仅是四倍。这都是因为他们的硬件设计选择。他们基本上构建了它,通过使FP4数据路径更宽来执行更多每个块的FP4乘法加法运算,这意味着每个周期可以处理比仅从位宽节省中获得的更多的FP4操作。然后Nvidia的新Ruben将这一逻辑进一步推演。
根据Semi Analysis的数据,Ruben的密集FP4速度比GB200快3.5倍。他们增加了1.4倍的SM计算块,将每个块内的FP4张量核心宽度加倍,并将时钟速度提高了25%。因此Ruben的FP4和FPA性能比GB200增加了约3.5倍。然而,重要的是要注意BF16和TF32仅提高了约1.6倍。因此,对于宣传的35p FLOPS,它仅限于密集FP4,而四处流传的50p FLOPS数字则是FP4推理。
它实际上来自Ruben更新的Transformer引擎,该引擎具有自适应压缩功能。这依赖于这样一个条件:如果工作负载有更多的零,那么它可以更接近50p FLOPS数字。因此50p FLOPS并不等同于每个密集FP4 gem都以50p FLOPS运行。它更多地取决于工作负载的可压缩性,即有效的推理峰值是多少。那么在Ruben上训练FP4与GB200相比究竟有多好?让我们做一些简单的餐巾纸数学计算。
在Neimotron 3 Ultra中,Nvidia将网络的最后15%保持在较高精度。因此85%可以从MVFP4中受益。在GB200上,FP4约为BF-16的四倍。因此归一化时间变为36.25%,这意味着与全部使用BF-16相比,它花费的时间约为36%。这意味着在GB200上你获得了约2.8倍的理论计算加速。现在在GB300上,FP4约为BF-16的六倍,这提供了约3.4倍的加速,并且仅花费大约29个单位的BF-16时间。
然后是Ruben。在密集FP4操作上,你基本上获得了比GB200快14倍的速度。而Ruben的BF16路径仅比GB200提高约1.6倍,这意味着它花费的BF-16时间约为15.5%。因此与使用相同85% FP4和15% BF6混合精度设置的GB200相比,它快了约2.3倍。所以是的,希望到现在你已经对MVFP4以及Nvidia硬件如何应对未来的计算有了更好的理解。
除了这种简单的餐巾纸数学外,他们还不断进行更多的消融研究,最新的研究是使用MVFP4训练的Llama 38B和405B,与FP8相比获得了约1.3至1.73倍的加速,且几乎没有零精度损失。此外,随着FP4推理变得越来越主流,例如DeepSeek在训练期间采用FP4适应阶段,以便在使用时更准确地进行推理,MV FP4格式可能会深度参与LLMs的未来。只是在实现方面有一个小障碍需要克服。
如果你想更深入地了解LM的工作原理而不被数学淹没,我的平台intuitive.academy可能是你开始学习的完美场所。
从头到尾解析大语言模型,涵盖从基础的大语言模型架构到混合专家系统及优化等高级主题。不仅如此,我们的主要重点是帮助你直观地理解核心思想,这意味着我们不会用看似复杂的数学公式轰炸你,而是专注于确保你完全掌握更高层面的逻辑。
我们还刚刚发布了一章新内容,直观地拆解线性注意力机制,这是 Kimi 和 Qwen 等模型所基于的最新前沿概念之一。因此,如果你在工作中使用大语言模型、正转型进入该领域,或希望投身于大语言模型研究,请通过描述栏中的链接查看。
请使用我们的限时优惠码“返校季”,享受年度会员五折优惠。感谢大家观看,特别鸣谢 Spam Match、Chris Ladoo、Degan、Robert Zaviasa、Proof 和 Enu、DX Research Group、Alex Leo Halawani 以及许多通过 Patreon 或 YouTube 支持我的人。
如果你还没关注我,请关注我的 Twitter,我们下期再见。