QLoRA 原理与量化类型是什么?
第18题QLoRA 原理与量化类型是什么1. QLoRA 的核心原理QLoRAQuantized Low-Rank Adaptation是一种面向大语言模型的参数高效微调方法。它的基本思路可以概括为将预训练基座模型压缩到 4-bit 并冻结只训练新增的 LoRA 低秩参数。设原始线性层权重为W∈Rdout×din W\in\mathbb{R}^{d_{out}\times d_{in}}W∈Rdout×dinLoRA 不直接更新整个WWW而是学习一个低秩增量ΔWαrBA \Delta W\frac{\alpha}{r}BAΔWrαBA其中A∈Rr×din,B∈Rdout×r,r≪min(din,dout) A\in\mathbb{R}^{r\times d_{in}},\qquad B\in\mathbb{R}^{d_{out}\times r},\qquad r\ll \min(d_{in},d_{out})A∈Rr×din,B∈Rdout×r,r≪min(din,dout)普通 LoRA 的前向计算可以写成yWxαrBAx yWx\frac{\alpha}{r}BAxyWxrαBAxQLoRA 进一步将基座权重WWW量化为 4-bitWqQ(W) W_qQ(W)WqQ(W)前向计算时将量化权重反量化到 BF16、FP16 等计算精度参与矩阵运算yD(Wq)xαrBAx yD(W_q)x\frac{\alpha}{r}BAxyD(Wq)xrαBAx其中Q(⋅)Q(\cdot)Q(⋅)量化操作D(⋅)D(\cdot)D(⋅)反量化操作WqW_qWq冻结的 4-bit 基座权重A,BA,BA,B真正参与训练的 LoRA 参数。因此QLoRA 的训练路径可以概括为预训练模型 → 4-bit量化基座 → 冻结基座 → 插入LoRA → 反向传播只更新LoRA参数梯度可以经过量化基座的计算路径继续向 LoRA 参数传播但基座模型的量化权重本身保持冻结。2. QLoRA 为什么能够显著降低显存QLoRA 的显存优化主要来自四个部分。2.1 4-bit 基座权重如果原模型使用 FP16 保存参数一个参数需要约 16 bit。QLoRA 将基座模型权重压缩到 4 bit因此仅考虑权重存储时理论存储量约下降到原来的41614 \frac{4}{16}\frac1416441实际训练总显存还包括激活值、LoRA 参数、优化器状态和临时计算空间因此整体显存不会简单下降到四分之一。2.2 只训练 LoRA 参数全参数微调需要为大量参数保存梯度优化器状态参数更新相关状态。QLoRA 冻结基座模型只训练规模很小的低秩矩阵AAA和BBB。因此优化器状态和梯度主要围绕 LoRA 参数保存进一步降低训练显存。2.3 NF4NormalFloat 4-bitQLoRA 提出了 NF44-bit NormalFloat。NF4 针对神经网络预训练权重近似正态分布这一特点设计了 16 个离散表示值。4 bit 可以编码2416 2^4162416种状态。NF4 根据标准正态分布构造非均匀的量化区间使每个量化区域对应近似相等的概率质量因此可以把更多表示能力分配到权重密集出现的区域。这一点非常重要NF4 属于 4-bit 浮点式代码本表示不能直接等同于普通的线性均匀 INT4。INT4 通常通过 scale 和整数区间进行均匀映射。NF4 使用针对正态权重分布设计的非均匀 codebook。2.4 Double Quantization双重量化普通分块量化不仅需要保存量化后的权重还需要保存每个 block 对应的 scale 等量化常数。Double Quantization 会继续量化这些量化常数。因此可以理解为第一次量化权重 → 4-bit权重 scale然后第二次量化scale等量化常数 → 更低精度表示QLoRA 论文报告Double Quantization 平均可以进一步节省约0.370.370.37bit/parameter 的存储。需要注意Double Quantization 的对象主要是第一次量化产生的量化常数。它并不表示把同一个权重简单执行两次普通量化。2.5 Paged Optimizers分页优化器训练过程中可能在某些步骤突然产生显存峰值例如长序列输入或梯度检查点相关计算。QLoRA 使用 Paged Optimizers并利用统一内存机制在 GPU 显存紧张时管理优化器状态从而降低瞬时显存峰值造成 OOM 的风险。因此 QLoRA 的三个标志性机制通常总结为NF4Double QuantizationPaged Optimizers3. 量化类型应该怎样分类“4-bit量化”只说明了一个维度。完整讨论量化时至少需要区分以下四个维度。3.1 按数值表示类型分类常见表示包括类型含义INT88-bit整数INT44-bit整数FP88-bit浮点FP44-bit浮点NF4针对近似正态权重设计的4-bit NormalFloat因此4-bit只说明位宽。还必须继续说明具体使用INT4 / FP4 / NF4 / 其他4-bit格式QLoRA 最典型的选择是NF4。3.2 按量化映射分类常见的均匀仿射量化可以写成qclip(round(xs)z,qmin,qmax) q \operatorname{clip} \left( \operatorname{round}\left(\frac{x}{s}\right)z, q_{\min}, q_{\max} \right)qclip(round(sx)z,qmin,qmax)反量化为x^s(q−z) \hat{x}s(q-z)x^s(q−z)其中sssscalezzzzero-point。3.2.1 对称量化对称量化通常令零点固定在零附近z0 z0z0量化区间围绕零对称。优点是计算和实现相对简单。3.2.2 非对称量化非对称量化允许z≠0 z\neq 0z0因此可以根据真实数据的最小值和最大值移动可表示区间。当数据明显偏离零对称分布时这种方法可能减少量化误差。3.3 按量化粒度分类还需要说明 scale 是在哪个范围共享的。常见类型包括3.3.1 Per-Tensor整个 Tensor 共用一个 scale。优点实现简单metadata 少。缺点容易受到 outlier 影响。3.3.2 Per-Channel每个 channel 独立使用 scale。通常可以降低量化误差但需要更多 scale 信息。3.3.3 Per-Group / Block-wise将权重划分成若干 group 或 block每个 group 独立量化。大模型低比特量化中非常常见。QLoRA 的 4-bit 权重量化采用 block-wise quantization。因此讨论 QLoRA 时仅说“用了 4-bit”信息仍然不足还应该进一步说明NF4 block-wise quantization4. 权重量化和激活量化有什么区别4.1 Weight Quantization只降低模型权重精度。例如FP16权重 → INT4/NF4权重主要作用是降低模型存储权重显存内存带宽需求。4.2 Activation Quantization同时降低中间激活值精度。例如FP16 Activation → INT8 Activation这样可能进一步提高低精度计算效率但激活值通常比权重更加动态量化难度也更高。4.3 QLoRA 属于哪一种经典 QLoRA 主要将基座模型权重存储为 4-bit NF4。计算时通常把这些权重反量化到 BF16 或 FP16 等计算精度。LoRA 参数、激活和主要矩阵计算也保持较高精度。因此不能简单理解为整个模型所有运算都在4-bit下完成更准确的描述是基座权重以 4-bit NF4 存储计算时按指定 compute dtype 反量化参与运算同时训练高精度 LoRA 参数。5. PTQ 和 QAT 有什么区别5.1 PTQPost-Training QuantizationPTQ 是模型训练完成以后再进行量化。基本流程FP32/FP16训练完成模型 → 校准/统计 → 低比特量化优点成本低通常不需要重新完整训练。缺点极低比特下量化误差可能明显增加。5.2 QATQuantization-Aware TrainingQAT 在训练过程中模拟量化和反量化误差。训练阶段通常加入 fake quantization使模型参数主动适应量化噪声。基本流程训练 模拟量化误差 → 参数适应量化 → 导出低精度模型QAT 通常能够获得更好的低比特精度但需要额外训练成本。5.3 QLoRA 与 PTQ/QAT 的关系QLoRA 通常先把已经预训练完成的基座权重量化为 NF4然后冻结这些量化权重并训练 LoRA。因此它的基座权重量化过程更接近对预训练模型进行低比特量化然后执行参数高效微调。QLoRA 的 LoRA 微调过程也不等同于传统 QAT。它没有通过全模型 fake quantization 重新训练基座参数来补偿量化误差。6. 几个容易混淆的概念6.1 NF4 和 INT4二者都有4 bit 4\text{ bit}4bit因此都只能表示 16 种编码状态。但编码方式不同。INT4整数表示NF4针对正态权重设计的非均匀 4-bit codebook。所以NF4 不能直接写成 INT4。6.2 4-bit 存储和 4-bit 计算QLoRA 的基座权重以 4-bit 保存。矩阵乘法通常需要将权重反量化到 BF16/FP16 等 compute dtype。因此4-bit weight storage 不意味着整个训练过程都执行原生 4-bit 浮点矩阵计算。6.3 QLoRA 和 LoRALoRA高精度冻结基座 低秩适配器QLoRA4-bit量化冻结基座 低秩适配器QLoRA 可以看作量化基座模型与 LoRA 参数高效微调的结合。6.4 Double QuantizationDouble Quantization 主要继续压缩第一阶段量化产生的 scale 等量化常数。它的目标是进一步降低量化 metadata 的存储成本。7. 为什么 QLoRA 能保持较好的微调效果QLoRA 的基本设计逻辑是基座模型中的大部分知识已经在预训练阶段形成因此下游任务通常不需要重新更新全部参数。量化会给基座权重引入一定误差但 NF4 尽量降低低比特表示造成的信息损失。随后使用高精度 LoRA 参数学习ΔW \Delta WΔW从而完成下游任务适配。因此最终模型可以表示为$$W_{\text{effective}}D(Q(W))\Delta W_{\text{LoRA}}$$其中D(Q(W))D(Q(W))D(Q(W))保留预训练模型主体能力ΔWLoRA\Delta W_{\text{LoRA}}ΔWLoRA学习下游任务增量。这种结构同时降低了基座权重存储成本和可训练参数数量。8. 面试时可以压缩成下面这段QLoRA 的核心是把预训练基座模型量化到 4-bit 并冻结然后只训练 LoRA 的低秩矩阵。前向计算时4-bit 基座权重通常会反量化到 BF16 或 FP16 等 compute dtype 参与矩阵乘法所以 4-bit 主要对应基座权重的低精度存储。QLoRA 有三个关键显存优化机制。第一是 NF4它是针对近似正态分布权重设计的 4-bit NormalFloat不能直接等同于普通 INT4。第二是 Double Quantization它继续量化第一次量化产生的 scale 等常数。第三是 Paged Optimizers用于处理训练过程中的显存峰值。如果进一步讨论量化类型我会从四个维度区分数值格式上有 INT8、INT4、FP4、FP8、NF4映射方式上有对称和非对称量化粒度上有 per-tensor、per-channel 和 per-group量化对象上可以分权重量化与权重激活量化训练流程上还可以区分 PTQ 和 QAT。经典 QLoRA 主要是 NF4 的 4-bit 基座权重量化加 LoRA 微调。它不会更新量化后的基座权重主要训练 LoRA 参数因此能够显著降低微调大模型所需的显存。9. 来源Tim Dettmers, Artidoro Pagnoni, Ari Holtzman, Luke Zettlemoyer.QLoRA: Efficient Finetuning of Quantized LLMs. arXiv:2305.14314, 2023.Edward J. Hu et al.LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685, 2021.Hugging Face / bitsandbytes Documentation.4-bit Quantization: Linear4bit and LinearNF4.Hugging Face Transformers Documentation.Bitsandbytes Quantization / QLoRA.PyTorch Documentation.Quantization API Reference.NVIDIA TensorRT Documentation.Quantization Schemes and Quantization Workflows.