Ch11 模型微调修订于 二〇二六年七月二日

11.3 QLoRA:单卡微调大模型

11.2 讲的 LoRA 解决了”训练参数太多”的问题。但还有一个问题没解决:基座模型本身就要占用大量显存,哪怕参数冻结不训练。 一个 70B 参数的模型,用 float16 精度存储就需要 140GB 显存。一张 RTX 4090 只有 24GB——连模型都装不下,别说训练了。

2023 年,华盛顿大学的 Dettmers 等人提出了 QLoRA(Quantized LoRA,量化低秩适配)1。它把 LoRA 和模型量化结合起来,让单张 24GB 显卡微调 70B 模型成为可能。

打个比方:LoRA 是在一本厚重的百科全书旁边贴几张便利贴(只训练便利贴,不动书)。但问题是——这本书本身要放到桌子上,桌面不够大就放不下。QLoRA 的做法:先把百科全书压缩成一本口袋书(量化),再在旁边贴便利贴(LoRA)。 桌面小也没关系了。

为什么 LoRA 不够:显存都去哪了

普通 LoRA 微调一个模型时,显存被以下东西瓜分:

显存占用全量微调 70B普通 LoRA 70B说明
模型权重140 GB (fp16)140 GB (fp16)基座模型本身
梯度140 GB0LoRA 不计算基座模型梯度
优化器状态280 GB (Adam)约 0.5 GBAdam 需要存两倍参数量的动量数据
激活值视 batch 和长度而定同左前向计算时暂存的中间结果
合计约 560 GB 以上约 140 GB 以上

LoRA 把”梯度”和”优化器状态”两栏几乎砍掉了,但模型权重 140GB 这一栏纹丝不动。如果不解决模型权重本身的加载问题,单卡微调大模型还是不可能。

核心创新一:NF4 数据类型

把 float16 精度降到 4-bit(即每个参数只占 0.5 字节),70B 模型从 140GB 压缩到约 35GB。但量化不是简单的”四舍五入”——直接把模型参数截断到 4-bit 会严重损害效果。

QLoRA 的第一个关键技术是 NF4(NormalFloat 4-bit) 数据类型2。

普通的 INT4 量化把数值均匀映射到 16 个整数值(-8 到 7)。但神经网络权重不是均匀分布的——它们近似正态分布(钟形曲线,大部分值集中在 0 附近,极端值很少)。

NF4 的设计思路:既然权重集中在 0 附近,就在 0 附近多放几个”刻度”(量化值),在两端少放几个,让信息保留最多。 数学上,NF4 的 16 个量化值是从正态分布的分位数中选取的——信息论上这是最优的 4-bit 表示方式 3。

量化格式设计思路适用数据对神经网络权重的效果
INT4均匀量化,16 个值等间距均匀分布损失大,0 附近精度不足
FP4浮点(符号+指数+尾数)需要大范围表达精度不足,浪费
NF4正态分布分位数量化近似正态的神经网络权重最优,信息损失最小

打个比方:拍照时,画面中人脸占大部分,天空背景占小部分。均匀分配像素的话,人脸和天空一样清晰。NF4 的做法是”人脸区域给更多像素,天空区域给更少”——反正天空细节本来就不重要。类比到权重:值密集的区域(0 附近)量化精度高,值稀疏的区域(极端值)量化精度低。

核心创新二:双重量化

量化不仅要存量化后的权重值,还要存”缩放因子”(scaling factor)——告诉计算机怎么把量化后的整数变回原来的浮点数。QLoRA 用分块量化:每 64 个参数为一组,共享一个缩放因子。

对于 70B 参数的模型,每 64 个一组,约 10 亿个组,每组一个 float32 缩放因子,光缩放因子就占约 4GB 显存。

双重量化(Double Quantization)4 的思路:对缩放因子本身再做一次量化——把缩放因子从 float32 压缩到 8-bit。

量化策略每参数平均位数70B 模型显存
单次量化 (NF4 + float32 缩放因子)约 4.5 bits约 38 GB
双重量化 (NF4 + 8-bit 缩放因子)约 4.13 bits约 35 GB

节省约 3GB。对 24GB 显卡来说,这 3GB 可能就是能不能跑起来的差别——可以用它来增大一次处理的文本量或批次大小。

核心创新三:分页优化器

训练时,优化器(如 Adam)需要额外存两份动量数据(一阶动量和二阶动量)。当显存快满时,QLoRA 的分页优化器(Paged Optimizer)5 灵感来自操作系统:把暂时不用的优化器状态从 GPU 显存换到 CPU 内存里,需要时再换回来。

就像桌面上放不下了,把暂时不用的书放到旁边的书架上,用的时候再拿过来。代价是速度——GPU 和 CPU 之间来回搬运数据有延迟,训练会慢约 20-30%。但比起”跑不起来”,慢一点总比不能跑强。

QLoRA 的显存计算

以 70B 参数模型为例,对比三种方案的显存需求:

方案模型权重LoRA 参数优化器总显存能在 24GB 上跑吗
全量微调140 GB (fp16)-280 GB约 560 GB不能
LoRA140 GB (fp16)约 0.3 GB约 0.6 GB约 140 GB不能
QLoRA35 GB (NF4)约 0.3 GB约 0.6 GB约 44 GB配合梯度检查点+CPU offloading 可以

44GB 仍超 24GB,为什么实际能跑?因为还配合了两个”以时间换空间”的策略:

  • 梯度检查点(Gradient Checkpointing):不保存所有中间计算结果,需要时重新算一遍。省显存,慢 15-25%。
  • CPU Offloading:把一部分激活值放到 CPU 内存而非 GPU 显存里。

三个技术叠在一起(NF4 + 梯度检查点 + CPU Offloading),70B 模型最终能在单张 24GB 显卡上跑起来。

对于 7-13B 的小模型,QLoRA 完全在单卡舒适区运行:

模型大小QLoRA 总显存消费级显卡举例
7B约 6 GBRTX 3060 (12GB) 轻松
13B约 10 GBRTX 4070 (12GB) 刚好
33B约 20 GBRTX 4090 (24GB) 可跑
70B约 44 GB (优化后约 20GB+)RTX 4090 (24GB) 需 offloading

QLoRA vs LoRA:决策指南

场景推荐理由
模型 7B 以内,显存充裕 (24GB+)LoRA (fp16)不需要量化,精度无损
模型 13B-70B,单卡 24GBQLoRA不量化根本装不下
模型 70B 以上,有多张 A100LoRA (fp16) + DeepSpeed多卡分担显存
推理部署QLoRA 训练后合并为 fp16 或转为 GGUF 格式训练省显存,推理按需选精度

核心原则:显存够就不用 QLoRA,显存不够再上。量化会引入微小精度损失——如果你的任务对精度极度敏感(如数学推理、代码生成),优先加卡而非上量化。但实际上,几乎所有个人开发者的起点都是 QLoRA——因为绝大多数人只有一张显卡。

QLoRA 的常见坑

计算精度不匹配。 量化模型用 4-bit 存储,但计算时要转回 16-bit。如果计算精度和训练精度不一致(比如量化用 fp16 但训练用 bf16),会导致计算结果异常,loss 无法正常下降。

合并权重时的额外误差。 QLoRA 训练完后把 LoRA 权重合并回基座模型时,如果基座仍是 4-bit 量化的,合并过程可能引入额外精度误差。建议合并前先把基座转回 fp16。

NF4 不是万能药。 对于数学推理、代码生成这类对精度敏感的任务,4-bit 量化的损失可能比通用对话任务更大。这时候考虑用 8-bit 量化(LLM.int8())作为折中 6。

没有校准数据可能导致量化效果差。 NF4 量化依赖对模型权重分布的假设(正态分布)。某些模型(特别是非 Transformer 架构或特殊初始化的模型)的权重分布可能偏离正态,NF4 效果会打折扣。

2026 年 QLoRA 的演进

  • QDoRA(2025):把 QLoRA 的量化训练和 DoRA 的方向分解结合——量化的基座加方向-幅度分解的 LoRA,进一步缩小与全量微调的差距 7。
  • 1 位量化训练(2025-2026):微软的 BitNet b1.58 尝试把模型压到极致(每个参数不到 2 bit),但训练稳定性仍是挑战,2026 年尚未成为主流。
  • HQQ+(2025):不用校准数据的即时量化,省去量化前准备校准数据步骤,配合 LoRA 训练更省事。
  • Unsloth(2024-2026):通过定制 Triton 内核让 QLoRA 训练速度提升 2-5 倍,已成为社区事实标准。

上一节:11.2 全量微调与LoRA | 下一节:11.4 SFT:让模型学会"回答"而不是"续写"

注释

  1. Dettmers et al., “QLoRA: Efficient Finetuning of Quantized Language Models”, NeurIPS 2023, https://arxiv.org/abs/2305.14314 ↩

  2. Dettmers et al., “QLoRA”, 2023; HuggingFace QLoRA 教程 2025 ↩

  3. Dettmers et al., 2023, Section 3.1 ↩

  4. Dettmers et al., 2023, Section 3.2 ↩

  5. Dettmers et al., 2023, Section 3.3 ↩

  6. Dettmers et al., “LLM.int8()”, 2022 ↩

  7. 结合 Dettmers 2023 与 Liu et al. 2024 ↩

关联7

知识图谱

局部图谱 · 点节点跳转