一、二者是什么关系
- 相同点
NF4、INT4 都是4bit存储格式:1个数字只用4bit保存,1字节塞2个数字,显存占用都是BF16的1/4;都需要搭配scale缩放系数,计算时反量化还原成BF16/FP32浮点。 - 本质区别
- INT4:均匀线性量化,一把刻度间距完全相等的尺子;
- NF4(NormalFloat4):非均匀正态量化,专门适配大模型权重分布,0附近刻度极密、两端稀疏;
- QLoRA 官方标配是 NF4,INT4 用在推理(GPTQ/AWQ),绝不推荐QLoRA训练用INT4,精度掉得非常严重。
二、大白话拆解原理:用尺子比喻
大模型所有权重有统一规律:绝大多数数字挤在0附近,只有极少数数字很大/很小(正态分布,像一座尖山峰)。
1. INT4(均匀4bit整数)
把-1,1区间平均切成16段,每一段宽度一模一样:
- 山峰(0附近)权重最多,但只有少数几个刻度,大量微小权重会被合并、丢失细节;
- 山坡、山底(绝对值大的权重)几乎没数据,却浪费大量刻度;
- 结果:量化误差巨大,微调时模型学不动、效果暴跌。
2. NF4(正态4bit浮点数,QLoRA专用)
提前按照正态分布概率分配16个刻度:
- 0附近权重密度最高,塞大量细密刻度,微小权重精准区分;
- 正负两端权重极少,刻度间距拉宽,只覆盖少数大数值;
- 16个刻度每一段包含的权重数量基本相等,4bit信息利用率拉满,量化损耗几乎可以忽略,微调效果接近原生BF16 LoRA。
三、量化完整流程对比(基座权重硬盘→显存→计算)
前置统一条件
原始硬盘基座权重:BF16;分块大小64个权重一组,每组配1个scale缩放值。
1. INT4 量化流程(仅推理用,不用于QLoRA训练)
- 块内所有权重除以scale,缩放到-1,1;
- 线性均匀映射为0~15的整数(4bit)存入显存;
- 计算时:4bit整数 × scale 还原浮点;
缺陷:0附近分辨率极低,训练梯度丢失严重。
2. NF4 量化流程(QLoRA唯一推荐)
- 块内权重归一化到标准正态分布N(0,1);
- 查表映射到预定义的16个正态分位点(不是均匀等分),只存4bit索引号;
- 计算时查表+scale,一次性还原高精度BF16;
优势:贴合权重分布,微调不会丢精度,论文证明NF4效果≈完整BF16 LoRA。
四、QLoRA训练里二者的 dtype 流转差异(基座大权重)
1. NF4(bnb_4bit_quant_type="nf4",标准配置)
- 硬盘:原始BF16基座;
- 加载显存:量化为 NF4 4bit + INT8 scale(双重量化开启),常驻显存;
- 前向/反向计算:临时查表反量化为BF16运算,算完销毁临时BF16;
- 保存:不merge只存BF16 LoRA;merge时完整还原BF16基座。
2. INT4(bnb_4bit_quant_type="int4",禁用训练)
- 硬盘:原始BF16基座;
- 加载显存:均匀量化为 INT4 4bit + FP32 scale;
- 计算:反量化得到浮点,但0附近精度丢失,反向传播梯度失真;
- 微调表现:loss震荡、收敛差、评测指标明显下跌,QLoRA场景基本废弃。
五、LoRA小权重不受影响(关键区分)
不管基座是NF4还是INT4,LoRA A/B小矩阵全程BF16:
- 不做任何4bit量化,显存常驻BF16;
- 梯度、优化器状态全BF16高精度;
- 最终保存到硬盘也是BF16适配器文件;
只有基座主权重才分NF4/INT4两种4bit存储格式。
六、使用场景分界线(记住这条就不会混淆)
- QLoRA微调训练:必须 NF4;INT4会大幅掉效果,不要用;
- 离线推理量化(GPTQ/AWQ):多用INT4,追求推理速度,无梯度不需要高精度;
- 补充:还有FP4(E2M1 4bit浮点),性能介于INT4和NF4之间,QLoRA也不推荐。