· 参数高效微调
QLoRA 原理图解:三个组件把微调显存压下来
4-bit 量化冻结基座 + 16-bit LoRA 适配器,按「传统量化 → NF4 → 双重量化 → 分页优化器」的顺序逐层拆开。
01 QLoRA 在讲什么
QLoRA(Quantized Low-Rank Adaptation)是 LoRA 的量化增强版本,2023 年由华盛顿大学与微软研究院提出。它在 LoRA 的基础上引入 4-bit 量化,在几乎不损失性能的前提下把大语言模型微调的硬件门槛大幅降低,使数十亿参数级别的模型可在单张消费级 GPU(如 RTX 3090 / 4090)上完成高效微调。讲义原文
核心思想同样是一句话:讲义原文 先对预训练模型权重进行 4-bit 量化以压缩显存占用,再在其上应用 LoRA 进行参数高效微调。
放在具体硬件上看这个差别的量级:原片口述 移动端单卡走全参微调连 0.6B 参数都吃力,同一张卡走 QLoRA 则可以调 8B 的模型。
- 全参微调:优化器状态是 32-bit 的全量副本,方框面积最大。
- LoRA:优化器状态大幅缩小(要训的参数少了),但 Base Model 仍要按 16-bit 完整加载——权重冻结也依然要参与前向计算与梯度回流;此外还额外多出 Adaptors(A、B 两个低秩矩阵)这一块显存。
- QLoRA:Base Model 换成 4-bit,这一块的显存面积才是真的降下来。图里从优化器状态牵向 CPU 的洋红虚线,是第三个组件的预示——优化器状态按页在 CPU 与显存之间往返。
02 先把传统 4-bit 量化讲清楚
NF4 是从传统 4-bit 量化发展来的,所以先看基线流程。讲义原文 传统 4-bit 量化通常采用三步:
- 使用权重的最大绝对值(
absmax)把权重归一化到区间 [-1, 1]; - 将该区间均匀划分为 24 = 16 个等距格点;
- 每个权重被映射到最近的格点,并以对应的 4-bit 索引存储。
- 为什么要按组归一:模型参数按 64 个一组切分,每组找自己的 absmax。组内每个权重除以这个 absmax,结果必然落进 [-1, 1]。
- 16 个格点 = 15 个间距:间距 = 2 / 15 ≈ 0.1333,所以格点表从 -1.00 起步、每次加 0.1333。
- 存索引而不是存格点:16 个格点是固定的,直接存格点数值等于没压缩。退一步存它在格点表里的下标(0~15),正好一个 4-bit 二进制数装得下:
0000→ 0,1111→ 15。 - 反量化 = 查表 × absmax:索引 9 查到格点 0.2,再乘回该组的 absmax 1.52,得到 0.304。
- 位宽账:量化前 4 个 FP16 权重 = 64 bit;量化后 4×4 bit 索引 = 16 bit,再加一个 16 bit 的 absmax,合计 32 bit。组越大,absmax 被摊得越薄,节省比例越高。
03 NF4:把格点从「等距」改成「等概率」
原片现场讨论出两条路,每条各有代价:
换更细的位宽(8-bit)
- 格点更密,量化误差更小
- 每个参数要 8 bit,压缩比变差
- 市面上确实有 8-bit 量化方案在跑
换切分方式的假设
- 均匀切分隐含假设「权重在 [-1,1] 内均匀分布」
- 真实权重近似正态分布:0 附近密、两端疏
- 格点错配,导致 0 附近精度丢得最狠
NF4 选了第二条路。讲义原文 将标准正态分布按累积概率均分为若干等概率区间,每个区间选取其中位数值作为该区间的量化代表值。
- 0 附近(数值最集中的地方)格点变密,量化误差显著下降;
- 两端格点变疏,把有限的码位花在真正有数据的地方;
- 格点数不变、位宽不变,仍然是 4 bit 存一个权重。
- NF4 不是一种新的量化位宽。它与传统 4-bit 位宽完全一样,改的只是 16 个格点取自哪里。
- 「4-bit 基座 + 16-bit 适配器」里的 16-bit 不能省。可训练的 LoRA 适配器与优化器状态仍是 16-bit / 32-bit,这一部分压不得。
- 量化误差不会在训练里被消掉。前向与反向都在「量化-反量化」构成的近似空间里进行,这正是 QLoRA 与全参微调之间存在性能差距的来源。
04 双重量化:连缩放因子一起压
为了让精度可控,通常让每 64 个权重共享一个 32-bit 的缩放因子(absmax)。问题在于模型一大,absmax 的数量就跟着炸。原片口述 以 671B 参数的模型估算:671B ÷ 64 = 10.48B,也就是上百亿个 absmax 常量——它们本身就成了新的显存瓶颈。
做法很直白,讲义原文 把这些高精度的缩放因子以 256 个为一组,使用 8-bit 数据类型做二次量化。原片对它的形容是:这就是个套娃。
适用范围要划清楚:原片口述 双重量化是针对超大模型的优化,不是强制项。一般规模的小模型可以不开,收益有限。
05 分页优化器:优化器状态不再独占显存
瓶颈在优化器状态:Adam 的一阶矩、二阶矩往往比模型权重本身更占显存。即使 LoRA 已经把可训练参数压得很小,优化器状态仍可能撑爆消费级 GPU。
- 效果:显存只需容纳「当前正在使用的」那部分优化器状态,占用随之显著下降。
- 这是个通用套路:原片口述 分页思想在整个计算机领域用得极多,后续讲 VLM 推理时还会再遇到,这里先建立印象即可。
06 三个组件收口
取材与还原方式
- 素材:本机课程录像第 06 讲(时长 24:43,1920×1080,无内嵌字幕), 主题为 QLoRA 的介绍;同目录未附带独立讲义文件,正文以画面中的文档内容为准。
- 画面还原:按 1 fps 采样成灰度帧、计算相邻帧平均绝对差,切出 58 屏静止画面, 逐屏按原始分辨率导出 PNG;先拼联络表通读,再对含公式、数字、小字的页面单独放大逐字核对。
- 语音转写:faster-whisper small(CPU / int8)转写全片音频,用于补足画面里没有的推导与结论。 中文转写存在系统性同音错字,引用前已按画面原文校正,例如 「低致适配」→ 低秩适配、「居住分布 / 距离分布」→ 均匀分布、「复算个」→ 服从、 「孙叶油花气」→ 分页优化器、「巴比特」→ 8-bit。
- 数字的来源:671B ÷ 64 ≈ 10.48B 为原片现场估算(录制时用计算器复核); 0.5 bit/参数 与 0.127 bit/参数 是按「64 权重 / 32-bit absmax」与「256 absmax 组 / 8-bit」复算得出, 原片对这两项只作了定性描述,未给出具体数值。
- 两种口径的处理:画面里的文档负责术语与流程的准确性,口述负责强调点与适用边界。 两者不一致时取更保守的一侧,并在正文用角标标出来源。
- 配图:全部按内容重绘为矢量 SVG,未使用录像画面截图,也未描摹原图。