这是我的 llama.cpp NVFP4/MXFP6 GGUF 量化工具
摘要
作者介绍了一款开源的 GGUF 量化工具,用于 llama.cpp,能够创建 NVFP4 和 MXFP6 量化模型,并采用 RSF、张量提升、动态量化等先进技术,质量优于现有方法(如 ModelOpt)。
大家好,我想分享一下我最近的工作。去年我开始为 llama.cpp 编写 NVFP4 内核,并且需要能够量化 NVFP4 GGUF 文件,所以这个项目最初只是一个 NVFP4 量化器。后来它变得远不止于此。我希望得到更多帮助来改进它。我把它叫做 [advanced-quantizer-tool](https://github.com/michaelw9999/advanced-gguf-quantizer)(MIT 许可)。这个工具用于直接创建 NVFP4 和 MXFP6 模型的 GGUF 文件。但它能做的远不止这些。我最近用它制作的模型有:[Qwen3.6-27B-NVFP4-MTP-GGUF](https://huggingface.co/michaelw9999/Qwen3.6-27B-NVFP4-MTP-GGUF)(版本 3,2026-06-04)和 [Qwopus3.6-27B-v2-MTP-NVFP4-GGUF](https://huggingface.co/michaelw9999/Qwopus3.6-27B-v2-MTP-NVFP4-GGUF)。我在 HF 上还有不少其他旧版本的模型,虽然不如现在量化器这么好,但仍然优于转换得到的 GGUF。评估基准表现优异,性能非常好。
**这个工具的特别之处:** 基本思路是,从源 BF16 GGUF、imatrix 数据和 logits KLD 文件开始。然后搜索量化方法,观察其与源模型的对比情况。它会根据预设指标、imatrix 和 KLD 数据评估所有候选量化类型,最终将多种量化技术融合到一个最佳方案中。我还提出了自己的方法,叫做“RSF”。这个工具远未完善、完美或零 bug,但作为动态量化器潜力巨大。在目前的测试中,它创建的 NVFP4 模型性能优于 ModelOpt。设计目标是可重现,因此会生成报告、账本、张量分配图和验证日志,让你清楚了解为何选择以及如何调试量化计划。
**目前能实现的部分功能:**
* 逐层对量化目标候选进行评分,基于 PPL、平均 KLD、p95/p99/p999 KLD、尾部 KLD、RMS 概率差、相同 top-p、top-flip 权重、熵、文件大小、BPW、张量类型。
* 正确创建 NVFP4 权重和输入张量缩放因子。
* 在数据集的选定语料输入上重复进行全模型 KLD 评估。
* 对敏感张量采取保守处理(如嵌入层、MTP/NextN 张量、相关分组张量如 QKV、gate/up 对、专家、头组)。
* 支持配方、账本、RSF/候选报告,并生成清单、检查点键、最终张量分配图和直方图。
* 集成了优秀的 [4 over 6](https://github.com/mit-han-lab/fouroversix) NVFP4 改进(作者:Jack Cook、Junxian Guo、Guangxuan Xiao、Yujun Lin、Song Han)。
* 融合了其他量化思路(如 AWQ 等)。
**RSF(精细化缩放因子拟合)**
* RSF 测量 imatrix 加权的重建误差,然后搜索邻近的缩放因子倍数,选择更好的格子拟合。最初是为 NVFP4/MXFP6 设计的,后来将相同思路应用于 Q2/Q3/Q4/Q5/Q6 K 量化,也提升了它们的量化质量。
**张量提升**
* 开始时将所有张量设为 NVFP4(或指定其他类型),然后在最终阶段,当剩余误差证明大小/速度损失合理时,根据加权分数将张量升级。
**MXFP6 的未来**
Blackwell 目前原生支持 MXFP6 硬件缩放,但没人写过真正的内核,也没有模型。因此我编写了一个完整的 [MXFP6](https://github.com/michaelw9999/llama.cpp/tree/mxfp6-cuda) CUDA 实现,在我的机器上运行良好。我已经发布了一些混合 NVFP4/MXFP6 模型(在工具最新改进之前制作的,因此新版本会更好),发现仅将少量“弱”张量从 NVFP4 提升到 MXFP6 就能显著提升模型质量。最新的 MXFP6 内核在模型全部为 MXFP6 时仍比 NVFP4 慢(符合预期,因为数据量更大),但已经进步很多,最新的 CUDA 构建已接近完成。在量化误差方面,MXFP6 质量优于 NVFP4。带有少量 MXFP6 层的 NVFP4 模型(至少在 Blackwell 上)不会明显变慢,且模型大小增加极少。
**量化深度预设:** 有三种默认模式可选。
* 快速:较小的深度搜索,较轻的 RSF 工作,候选筛选更快。
* 正常:期望的默认模式,用于真实、严肃的运行。可能需要更好的 GPU 资源;速度较慢。
* 深度:激烈、更广泛、穷举的搜索,并带有改进的验证。**非常慢。** 我很想知道它在大型 Blackwell GPU(如 B200)上的表现。
**Qwen3.5-0.8B 在 RTX 5090 上的模式对比:**
|模式|大小|量化时间|平均 PPL(Q)|平均 KLD|99.9% KLD|RMS Δp|相同 top p|Top flip|
|:-|:-|:-|:-|:-|:-|:-|:-|:-|
|正常|431.25 MiB|35:48.81|21.348164|0.120205|1.629277|8.491%|80.468%|0.019304|
|深度|432.18 MiB|57:53.39|21.017407|0.100507|1.245584|7.672%|81.869%|0.016312|
选择阶段使用首次 KLD 数据的快速代理误差来评估候选策略,缓存结果,然后通过 KLD 守卫查找张量胜出项。最后审查最终张量候选列表,并为每一层打上最佳候选补丁。
**基于 CUDA 和 llama.cpp**
KLD 和繁重评估尽可能使用 CUDA,设计原则是让工作量尽量在设备上完成,减少主机/设备拷贝。模型在显存中反复打补丁,因此只写入磁盘一次。每次评估都会将层重新量化为每种可用候选类型,然后重新检查 KLD/PPL,这一切都在内存中完成。主机端工作使用并行 CPU 工作线程加速,可以指定最大线程数。最终的 GGUF 写入只在最后进行。该工具会根据可用显存决定用于 KLD 评估的 n_seq,并将可重用检查点写入磁盘,因此长时间运行可以停止再恢复。只要源 KLD/BF16 可用,之前量化好的现有 GGUF 模型可以进一步编辑和改进。该工具还可以用于另一种形式,通过新的 imatrix 文件进行某种微调。我正在研究以更明确的方式单独进行更多此类工作。
**模块化设计用于研究**
设计在量化过程中将候选和量化策略/技术作为选项引入。添加新方法很容易。如果出现了更好的 NVFP4(或其他类型)量化方法,或者需要研究,只需将新方法编写为常规的 C 或 C++ 函数,然后添加到策略和候选列表中即可。其余量化、PPL/KLD 处理、imatrix、推理、后端处理等都是普通的 llama.cpp。因此可以轻松测试和比较新量化技术。你可以快速用它制作真实模型,并在真实环境中观察其性能。有一个基于文本的 UI 向导,但远未完善或完美,也不是主要关注点。我为 AI 编程器创建了各种 SKILLS/AGENTS MD 文件,以便与之配合。告诉它你想要什么,它就会根据 MD 指令知道该怎么做。当然,所有操作仍可通过命令行完成。
**已知问题:**
* 暴露了太多选项和参数作为 CLI 标志或定义,导致理解起来相当复杂。
* 很多代码和选项仍默认 NVFP4 是唯一的量化目标。
* 各种函数和候选逻辑需要进一步人工清理,去除臃肿的 AI 代码。
* ETA/进度报告不完美,可能具有误导性,尤其在后期选择阶段。
* 文档需要改进。
* 整个流程在功能完备后需要进一步简化。
* 速度还可以通过移除和减少重复候选逻辑来大幅优化。Qwen3.6-27B 的深度搜索优化在我的机器上花了大约 17 小时。模型很棒,但这太慢了。
* 无
相似文章
NVFP4 + MTP - 现已登陆 llama.cpp
NVFP4 量化和 Multi-Token Prediction 支持已添加到 llama.cpp 的 b9297 版本中。
@ggerganov:llama-server -hf ggml-org/Qwen3.6-27B-GGUF --spec-default
Georgi Gerganov 分享了一条一行命令,用 llama-server 以默认投机解码设置启动量化版 27B Qwen3.6 模型。
ggml-org/llama.cpp
llama.cpp 是一个开源 C/C++ 库,用于在本地硬件上高效运行 LLM 推理,支持多种量化方法和多后端(CPU、GPU 等)。
在24GB显存环境中运行Qwen 3.6 27B的配置:后端对比、量化选择与设置(llama.cpp, ik_llama.cpp, BeeLlama, vllm)
本文对比了在RTX 3090 24GB上运行Qwen 3.6 27B使用的llama.cpp后端,发现搭配IQ4_KS量化的ik_llama.cpp性能最佳(预填充1261 tok/s,解码72.9 tok/s)。
Mix-Quant: 量化预填充,精准解码的智能体大语言模型
Mix-Quant 提出了一种面向智能体大语言模型的阶段感知量化框架,在预填充阶段使用 NVFP4 量化以加速计算,同时在解码阶段保持 BF16 精度以维持准确性。该方法在智能体基准测试中实现了预填充速度提升最高 3 倍,且性能下降极小。