NanoQuant的一种实现:一种灵活的二进制量化方法
摘要
NanoQuant是一种灵活的二进制量化方法,可将稠密Transformer压缩至每个权重低于1比特。本仓库提供了一个PyTorch实现,仍在开发中,能够量化Qwen3-0.6B和Qwen3-4B等模型。
[https://github.com/pitbox46/NanoQuant](https://github.com/pitbox46/NanoQuant) TLDR:NanoQuant是一种量化方法,可对稠密Transformer模型创建2比特/权重、1比特/权重、0.5比特/权重等量化结果。我遵循论文方法创建了自己的实现,目前仍在完善中,但看起来非常有前景。我与NanoQuant团队无关。
# 什么是NanoQuant
NanoQuant(Chong等人,2026,[https://arxiv.org/abs/2602.06694](https://arxiv.org/abs/2602.06694))是一种训练后量化方法,可将稠密Transformer模型压缩至每权重1比特甚至更低。它首先将每层的矩阵分解为两个较小的低秩矩阵。例如,如果W是一个100×200的矩阵,我们可以用矩阵U(100×r)和V(200×r)的乘积来近似W,即W ≈ UV^T。r值越小,实际参数越少,但近似效果越差。原始W矩阵有100×200=20000个参数。若r=20,则近似W的总参数数为U的参数数加上V的参数数,即(100×20)+(200×20)=5000,压缩比为4倍。调整r值可实现不同压缩比。本例中,r=66时压缩比约为1倍。
NanoQuant则将矩阵分解为两个缩放向量和两个二进制矩阵。缩放向量的总大小可忽略不计——大部分数据存储在二进制矩阵中。以上述为例,若使用r=66且将f16矩阵分解为两个f16矩阵,则压缩比为1倍。若将f16矩阵分解为两个二进制矩阵,则压缩比达到16倍。
其他类似方法(如DBF,Boza和Macko,2026)计算量远大于NanoQuant。所有方法都需要微调步骤以对齐量化输出与未量化输出。若不进行微调,最终模型将严重退化。由于初始分解的创新,NanoQuant的量化层比其他方法更接近目标,所需数据和调优轮次更少,即可实现合理的量化。此外,NanoQuant逐块顺序量化与微调,而非一次性处理所有块,这使其能够在消费级硬件上进行量化。
我省略了该方法及其研究的许多细节。强烈建议阅读原文以了解更多。
# 实现
论文作者尚未发布官方代码(但表示最终会发布)。我决定不等了,自己用PyTorch实现。经过几周的努力,现处于粗糙但可用状态。它远未达到生产就绪,仍有事情待完成,但我已成功量化了Qwen3-0.6B和Qwen3-4B模型(包括base和instruct版本)。原论文针对基础模型(预训练、非instruct),因此推荐使用WikiText数据集作为校准源。然而,校准instruct模型时,必须使用包含格式化对话的多样化数据集。我目前使用来自HuggingFaceH4/ultrachat_200k数据集的128个序列,每个序列2048个token。该数据集并非完美,但足以让模型生成英文。近期一篇论文建议,最好使用目标模型同系列生成的数据集(Family Aware Quantization,Xiao等人,2026)。理想情况下,若量化Qwen3系列模型,我的校准数据集应使用类似Qwen3-235B-A22B的模型生成。
当前方法不适用于更新型的混合架构模型(如Qwen3.5/3.6)。这些模型包含大量状态空间模型(SSM)层,对量化比Transformer层更敏感,需要对方法进行根本性改变。MoE模型也需要一些额外调整,但我认为使其适应会容易得多。此外,嵌入层目前保持不变,因此我使用的每比特权重数未计入嵌入层。
# 结果
目前尚无太多可展示。我已量化基础模型并取得很好结果,但大多数人更关注量化instruct模型。以下是Qwen3-4B量化至1比特/权重(总计1.15GB,包括全精度嵌入权重)的少量输出:
You: Where is the country France?
Bot: <think> </think> France, located in **France** (the United States) is a country with a rich history and culture. It has been established as a dominant economic power for decades, with its economy being one of the largest and most powerful countries in the world. The French government, known as the French Nationality Council or the French Republican Government**, plays an important role in shaping the political structure of France. The French Republic was founded by Napoleon at around 1850 when it became
显然不算很好,但至少生成了有效句子。如前所述,校准数据至关重要,若能获得更好的校准数据,结果几乎肯定会改善。此外,instruct模型可能比基础模型需要更多数据和微调。此量化在Google Colab的Nvidia L4上耗时约3.5小时。训练期间,VRAM保持低位(约8GB或更低),在“全局校准”阶段飙升至约20GB,最终“全局知识蒸馏”阶段约为12GB。
# 待办事项
我优先考虑优化和更好校准量化模型。当前最大性能瓶颈是LB-ADMM算法(用于矩阵分解)。它大量时间花在Cholesky分解上以求解线性方程组。我尝试使用梯度下降算法替代,但在CUDA上Cholesky分解高度优化,表现优于GD求解器。不过,在我本地PC的Intel ARC B580上,GD求解器比Cholesky更快。此外,我尚未实现GEMV和GEMM内核。目前对这些主题不太熟悉,因此推迟处理。但这些内核将带来二进制量化应有的显著推理速度提升。它们也可能提高量化速度,但我不确定。我还希望研究使用PV Tuning替代STE用于“TuneLatentSTE”步骤。
# AI使用
本项目广泛使用了AI,采用结对编程风格。在此之前,我不熟悉PyTorch和Transformer库,因此借助Google Gemini聊天窗口生成、审查和调试代码片段。未使用代理式编码。我已手动审查项目中的所有内容。目前,即使没有LLM辅助,我也能解释代码和NanoQuant方法的几乎所有方面。
相似文章
Qwen3.6 27B Pure Quant: 16 GB 显存下 40 tok/s
使用纯 Q4_K_M 方法对 Qwen3.6 27B 进行量化的版本完全适配 16 GB 显存,在 MTP 下可实现高达 40 tok/s 的 token 生成速度,相比其他 GGUF 变体显著缩小模型体积。
@PyTorch: 模型优化与训练后量化 模型量化是一种减少VRAM使用并提高...
这篇来自NVIDIA的文章介绍了如何使用NVIDIA Model Optimizer库,通过训练后量化方法将CLIP模型量化为FP8格式,从而减少VRAM使用并提升在消费级GPU上的推理性能。
@Ex0byt:激活、切片、拼接、微调数日,外加15小时屏息凝神的NVFP4校准/传播轮次……
社区成员发布了Qwen3.6-35B-A3B-PRISM-NVFP4——一款经过多轮、数据集校准、零损耗的NVFP4量化版Qwen模型。
nvidia/Qwen3.6-35B-A3B-NVFP4 · Hugging Face
NVIDIA发布了Qwen3.6-35B-A3B-NVFP4,这是阿里巴巴混合专家多模态语言模型的量化版本,使用Model Optimizer优化以在NVIDIA GPU上部署。
@SpaceTimeViking: 我有一个版本保持BF16注意力层,另一个混合精度量化使用NVFP4权重和FP8 At…
对Google的Gemma-4-12B-it模型进行混合精度量化,使用NVFP4用于MLP权重,FP8用于注意力层,实现了25%更小的存储占用和更快的吞吐量,同时保持质量。