大模型 NF4 —— 量化的"神之一手"

前面聊过量化,从FP32砍到INT4,模型体积缩到八分之一,但变傻了。那有没有一种量化方式,又小又不太傻?NF4就是干这个的。

NF4全称是Normal Float 4-bit —— 一种专门为模型参数设计的4位量化格式。

普通的INT4就是把数值均匀地切成16份——不管参数分布在哪,一刀切,平均分。但模型参数有个特点:它们不是均匀分布的,而是集中在零附近,像个钟形曲线。大部分参数在0附近的小范围里,只有少数参数跑到两边去。INT4均匀切
分,等于把宝贵的精度浪费在了那些空旷区域——就像请客吃饭,菜都堆在角落里,大部分人夹不到。

NF4就聪明了——它按照正态分布来分配那16个档位。 中间密集的地方多切几刀,精度高;两边稀疏的地方少切几刀,省空间。像做人口普查——人口密集的城市多设几个普查点,荒郊野外一个就够了。

结果:同样的4位精度,NF4比普通INT4保留了更多有效信息。 模型推理时,参数密集区域的精度更高,模型的"智力"损失更小。

它跟GGUF是啥关系? NF4是一种具体的量化格式,GGUF是支持NF4的一种容器格式。你用llama.cpp跑GGUF文件时,可以把量化精度设成NF4。就像GGUF是个行李箱,NF4是里面的一种打包方式。

谁提出的? Hugging Face的Tim Dettmers团队。他们还在论文里提了QLoRA——用NF4量化模型,然后用LoRA微调。模型量化到NF4,几乎不占显存,还能在上面接着训练,堪称白嫖党的福音。

一句话:NF4是一种聪明的4位量化——不搞平均主义,按参数密度分配精度,中间多切几刀、两边少切几刀。同样是4位,它比普通INT4更聪明,是量化界的性价比之王。
展开
2