[控场AI]
· 8 分钟阅读· 4,189 字

NVFP4 vs FP8 vs GGUF:16GB Ada显卡上解码快2.3倍

NVFP4 vs FP8 vs GGUF:16GB Ada显卡上解码快2.3倍

同模型同卡受控对比:NVFP4 解码快 2.3 倍,FP8 预填充最强,质量均与 BF16 打平。

文章利用 NVIDIA 同时发布的 Nemotron Labs Dory 1.0 4B 的 BF16、NVFP4、MXFP8 和 GGUF 四种格式,在 RTX 4070 Ti SUPER(16GB Ada,无原生 FP4 硬件)上做了一次变量受控的量化对比,并采用预注册规则保证结论可信。结果显示:解码速度基本跟随权重体积,NVFP4 权重仅 3.28 GiB,生成达 116.8 tok/s,是 BF16 的 2.3 倍;但长提示预填充由 FP8 领先(10,118 tok/s),因为 NVFP4 在 Ada 上走 weight-only Marlin 路径,计算仍回到 16 位。完整 GSM8K 上四种格式在容差内打平;逐 token 保真度上 NVFP4 为 89%–90%,MXFP8 最接近 BF16。文章还记录了工具链陷阱,并给出按场景选择的实践建议。

当你在搜索引擎输入“nvfp4 vs”,自动补全的选项往往是“fp8”、“gguf”、“q4_k_m”和“bf16”。多数对比文章的问题在于,它们比较的是不同人量化的不同模型,变量根本没有控制住。NVIDIA 在10月16日一次性发布了 Nemotron Labs Dory 1.0 4B 的 BF16、NVFP4、MXFP8 和 GGUF 版本,这让在同一张 RTX 4070 Ti SUPER(Ada 架构、16GB 显存、无原生 FP4 硬件)上做受控对比成为可能。作者在首次运行前就写好了测试规则,并公开了预注册表格和脚本。

NVFP4 vs FP8 vs GGUF 在 16GB Ada GPU 上的对比

测试设置:同一模型、同一显卡、预注册规则

测试对象是 Nemotron Labs Dory 1.0 4B,NVIDIA 同时放出了 BF16、NVFP4、MXFP8 和 GGUF 四种格式。硬件为 RTX 4070 Ti SUPER,Ada 架构,16GB 显存,没有 FP4 计算单元。这意味着 NVFP4 在这张卡上并非“原生加速”,而是通过 weight-only Marlin kernel 运行——权重保持低精度存储,实际计算仍在 16 位下完成。

所有 vLLM 格式使用同一引擎,GGUF 则走 llama.cpp。作者强调规则在第一次跑分前就已固定,避免事后挑选有利数据。这种预注册做法在量化评测中并不常见,却直接决定了结论的可信度。

NVFP4 是 NVIDIA 随 Blackwell 架构推出的一种 4 位浮点权重格式,每个权重仅占 4 bit,并配合块级缩放因子(每 16 个值共享一个 FP8 缩放系数)来保留动态范围。与 INT4 等定点格式相比,浮点结构对权重分布中长尾值的表示更友好,因此在极低位宽下通常比定点量化有更小的精度损失。MXFP8 则是 OCP 微缩放标准定义的 8 位浮点格式,同样使用块级共享缩放因子,但位宽与 FP8 一致,属于“微缩放”家族。两者的关键区别在于:NVFP4 把体积压到 3 位有效信息附近,而 MXFP8 保留 8 位精度,因此前者解码更快、后者保真度更高,这与正文的数据完全吻合。

weight-only Marlin kernel 指一种只对权重做低精度存储、计算时反量化回 16 位的 GPU 内核,Marlin 是 vLLM 中针对 4 位权重优化的高效实现。它让没有原生 4 位算力的 GPU(如 Ada 架构)也能享受权重体积缩小带来的显存和带宽收益,但无法减少矩阵乘法的计算量,所以预填充吞吐不会提升。这正是 NVFP4 在 Ada 上“解码快、预填充不占优”的底层原因。

核心数据:解码速度跟随权重体积

格式引擎生成速度 (tok/s)读取2048 token提示 (tok/s)权重体积
BF16vLLM51.07,0037.69 GiB
FP8 (W8A8)vLLM78.510,1184.67 GiB
MXFP8vLLM81.46,0614.76 GiB
NVFP4vLLM116.86,9783.28 GiB
GGUF Q5_K_Mllama.cpp58.81,7103.42 GiB

在 vLLM 的几种格式中,生成速度基本跟随权重体积:NVFP4 权重最小(3.28 GiB),解码速度达到 116.8 tok/s,是 BF16 的 2.3 倍。MXFP8 与 FP8 体积接近,速度也相近。GGUF Q5_K_M 虽然文件体积与 NVFP4 接近,但受限于 llama.cpp 引擎和不同的内核实现,生成速度只有 58.8 tok/s。

长提示读取:FP8 才是赢家

生成速度之外,预填充(prefill)表现呈现另一条规律。读取 2048 token 的长提示时,FP8 以 10,118 tok/s 明显领先,BF16 为 7,003 tok/s,NVFP4 为 6,978 tok/s,MXFP8 只有 6,061 tok/s,GGUF 则垫底在 1,710 tok/s。

原因在于矩阵乘法的精度路径:FP8 是这几种格式中唯一让 Ada 在 8 位下完成乘法的格式。NVFP4 在 Ada 上走 weight-only 路径,权重虽小,但计算仍回到 16 位,预填充阶段无法享受 4 位带来的吞吐优势。这解释了为什么 NVFP4 在短提示生成场景优势巨大,在长上下文读取场景却与 BF16 持平。

预填充(prefill) 是推理的第一个阶段:模型一次性处理整个输入提示,为每个 token 计算键值缓存(KV cache),本质是一批大矩阵乘法,属于计算密集型。解码(decode) 则是逐 token 生成,每步只处理一个 token,需要反复读取全部权重,属于显存带宽密集型。这一区别解释了正文的规律:解码速度跟随权重体积,因为权重越小、每步读取的数据越少;预填充速度则取决于算术精度路径能否真正降低计算开销。NVFP4 虽缩小了权重,但在 Ada 上计算仍回到 16 位,计算量没变,所以预填充只在 BF16 水平;FP8 能让 Ada 在 8 位下完成乘法,计算吞吐翻倍,预填充因而领先。

质量对比:GSM8K 上四种格式打平

速度之外,量化最怕的是质量塌陷。作者跑了完整的 GSM8K(1319 题,8192 token 上限):BF16 得 1249,FP8 得 1241,MXFP8 得 1250,NVFP4 得 1238。按 ±3 分的容差规则,三种量化格式都与 BF16 打平,95% 置信区间均在 ±2 分以内。

这个结果说明,在 4B 参数规模上,NVFP4 的量化损失在数学推理任务中并未造成可测量的下降。至少 GSM8K 这一项上,4 位权重没有拖累模型能力。

GSM8K(Grade School Math 8K)是评估数学推理的经典基准,包含约 8500 道需要多步算术的小学应用题,通常以准确率或正确题数报告。文中“8192 token 上限”指思维链推理(chain-of-thought)被允许生成的最大长度,超过则截断。GSM8K 对量化相对敏感,因为它要求模型维持多步精确计算,低精度若引入数值偏差容易在中间步骤累积错误。因此在该基准上量化后仍与 BF16 打平,是判断“量化没有造成实质质量塌陷”的较强证据。不过需注意,4B 模型在 GSM8K 上的绝对分数接近饱和,可能掩盖更细微的能力差异,这也是作者补充逐 token 保真度测试的原因。

逐 token 保真度:MXFP8 最接近 BF16

整体分数打平,不代表每一步预测都一致。作者在固定的英文和西班牙语文本上逐 token 对比:NVFP4 有 89%–90% 的概率与 BF16 选择相同的下一个 token;FP8 和 MXFP8 则达到 94%–96%。困惑度(perplexity)几乎不变,但 token 级别的分歧确实存在。

这一维度上 MXFP8 最忠实于 BF16。换句话说,如果你的应用对生成内容的逐词稳定性敏感(例如结构化输出、代码补全),NVFP4 的微小偏差可能比 GSM8K 分数反映的更明显。但若只看困惑度和基准分数,这些差异会被掩盖。

逐 token 保真度(token-level fidelity) 衡量的是两个模型在给定相同上文时,选择相同下一个 token 的频率;困惑度(perplexity) 则是对整个 token 分布的对数似然取平均后的指数,反映模型对文本的“意外程度”。两者差异在于:困惑度对分布的整体形状敏感,即使最高概率 token 选错,只要概率质量分配相近,困惑度变化也很小;而逐 token 一致率只看排名第一的 token 是否相同,因此对“差一点就选对”的分歧非常敏感。这就是正文所说 89%–90% 与 94%–96% 的差距在困惑度上几乎不可见、却可能影响结构化输出稳定性的原因——对代码补全、JSON 生成这类要求逐词确定的场景,最高概率 token 的偏移会直接表现为输出格式错误。

测试中踩过的坑

文章还记录了测量前遇到的问题:llama.cpp 的转换器拒绝公共检查点;prefix cache 曾虚高预填充数据;被截断的推理内容被误计为答案。作者还提到审计在自己第一次保真度测试中发现了一个错误。这些细节的价值在于提醒复现者:量化评测的陷阱往往不在模型本身,而在工具链和缓存行为。

实践建议

根据这组数据,选择逻辑可以归纳为:

  • 追求生成吞吐、显存紧张:NVFP4 在 Ada 上解码快 2.3 倍,权重仅 3.28 GiB,是最优解,前提是接受 token 级 89%–90% 的保真度和无原生 FP4 硬件的事实。
  • 长提示、RAG、文档问答:FP8 的 8 位乘法让预填充速度领先,长上下文场景收益更明显。
  • 需要与 BF16 最大程度一致:MXFP8 在逐 token 保真度上表现最好。
  • GGUF 生态:在相同硬件上,llama.cpp 的预填充速度远落后于 vLLM,若工作流依赖 GGUF,需接受这一引擎层面的差距。

这项测试的局限也很清楚:单一模型(4B)、单一显卡(RTX 4070 Ti SUPER)、单一推理引擎组合。NVFP4 在 Blackwell 等具备原生 FP4 硬件的平台上表现可能完全不同, Ada 上的 weight-only 路径只是过渡方案。但就 16GB Ada 用户而言,这组受控数据提供了少见的清晰参照。

#NVFP4#FP8#GGUF#量化对比#Ada GPU#vLLM#GSM8K#模型量化
分享:

相关推荐