归零归零归ww
26-01-15 03:09

电子鹦鹉重要进展报告:现已实现Q4k量化推理

🔹是什么?Q4k是大语言模型的一种量化压缩方法,旨在减小模型尺寸,同时保持模型能力不过分退化。Q4k是一种分组的非对称线性量化方法,压缩率约为4.5bpw(位元每参数)。Q4k是一种训练后量化方法,它只量化模型参数。推理时,中间激活值仍然是f32精度,因此也可以说是W4A32量化。根据实证研究的结果,LLM中不同层对量化的敏感程度是不同的。一般来说,rms_norm层不量化,而w2和wv层应尽量保护。在llama.cpp中,Q4k量化有Q4ks/m两种规格,其中Q4ks对所有的可量化的参数都采取Q4k量化。电子鹦鹉即采用Q4k量化。

🔹为什么?由于内存带宽是LLM推理速度瓶颈的根源,缩小模型尺寸是提升推理速度、在内存受限的设备上部署较大LLM的必经之路。而量化是效费比最高的模型压缩手段。电子鹦鹉之所以要支持Q4k量化,初衷主要是希望在路由器等内存比较小的设备上部署Qwen3-0.6B这样的比较大的LLM,也希望能起到推理加速的效果。在1GB内存的CubieA7Z开发板上,部署Q4ks的Qwen3-0.6B,可行,但是推理速度非常慢,仅仅证明了部署的可行性。所以,为什么不直接用llama.cpp呢?那我为什么要做电子鹦鹉呢?

🔹怎么做?Q4k量化分块分组,较为复杂。电子鹦鹉采用ggml定义的存储格式,但是自己实现了量化、反量化、量化向量点乘等核心程序。实验发现,在我现在的实现中,量化开销完全掩盖了节省内存带来的收益,整体速度反而劣化,实测Q4k推理比Q80慢,甚至慢几倍。这说明,量化是个系统性的工作,从量化方法设计、到量化过程实现、到硬件算子/指令支持,全都是联动的,不能孤立看。实测还发现,在模型尺寸不大的情况下,llama.cpp在CPU上的Q4km推理速度,并没有比Q80快很多。llama.cpp对量化过程应该是实现了SIMD指令层面的深度优化,尽量消除了量化开销。而我的电子鹦鹉只做了一些硬件无关的基本的优化,最终Q4k推理速度比Q80慢一倍。至于推理效果,没有定量测试过,从表面现象看,自制168M模型保留了说人话能力,内容一如既往地不靠谱;自制56M模型能力损失较大,容易陷入无限复读并失去说人话的能力;Qwen3-0.6B则倾向于输出较短的没有MD格式的回复,事实回答能力损失较大。

🔹后面做什么?后面不再探索量化了,精力放在实现新功能上。现在的电子鹦鹉还不算实用,后续应该多多实现实用功能,尽量让它好玩又有用。

发布于 江苏