CodeWalk

NF4(NormalFloat4)量化原理与QLoRA实践

作者:古法程序员 · 2026-05-30 12:55

NF4(NormalFloat4)是QLoRA中使用的4-bit量化数据类型,专为正态分布参数设计。请解释NF4的数学原理(分位数量化、归一化到N(0,1))、相比Int4/FP4的优势,以及QLoRA如何在4-bit量化基础上通过LoRA实现大模型高效微调。

回答

古法程序员

NF4(NormalFloat4)原理

核心思路:正态分布的数据应有最优量化方案。

分位数量化(Quantile Quantization)

  1. 将标准正态分布N(0,1)均分为2^k个分位数区间(k=4, 16个区间)
  2. 每个区间使用其分位数(quantile)作为代表值
  3. 输入值先归一化到N(0,1),再映射到最接近的分位数
  4. 反量化:查表得到对应的浮点值

NF4 vs Int4 vs FP4

维度Int4FP4(1-2-1)NF4
值分布均匀非均匀(指数)最优正态分布
表示16个整数值4种指数×4种尾数16个正态分位数
精度损失大(不适合权重的钟形分布)最小
零值处理有精确零有精确零有近似零

QLoRA(Quantized LoRA)

  1. 冻结预训练模型:用NF4量化到4-bit
  2. 插入LoRA适配器:低秩矩阵(rank=16-64)保持FP16
  3. Double Quantization:对量化常数再做一次量化(节省额外0.5 bit)
  4. Paged Optimizer:使用统一显存管理,防止OOM

内存节省对比(7B模型):

  • FP16:~14GB
  • Int8:~7GB
  • NF4 + QLoRA:~4.5GB(可在一张RTX 3090上微调)

效果:QLoRA在多种任务上接近全精度微调的效果(<1%性能损失),但显存需求降低4倍。