论文阅读笔记——QLORA: Efficient Finetuning of Quantized LLMs

QLoRA 论文

4-bit 标准浮点数量化

常见的量化技术是最大绝对值量化:
X I n t 8 = r o u n d ( 127 a b s m a x ( X F P 32 ) X F P 32 ) = r o u n d ( c F P 32 , X F P 32 ) 式(1) X^{Int8}=round(\frac{127}{absmax(X^{FP32})}X^{FP32}) = round(c^{FP32},X^{FP32}) \qquad \qquad \text{式(1)} XInt8=round(absmax(XFP32)127XFP32)=round(cFP32,XFP32)式(1)

其中 c 是量化常数,为这个张量特征的绝对值最大值。

反量化为:
d e q u a n t ( c F P 32 , X I n t 8 ) = X I n t 8 c F P 32 = X F P 32 式(2) dequant(c^{FP32},X^{Int8})=\frac{X^{Int8}}{c^{FP32}}=X^{FP32} \qquad \qquad \text{式(2)} dequant(cFP32,XInt8)=cFP32XInt8=XFP32式(2)

分位数量化

分位数 数学上的定义为把顺序排列 的一组数据分割为若干个相等块的分割点的数值。在标准正态分布中,对于分布 X 给定的概率 α \alpha α ,如果存在 u a u_a ua ,使得他的分布函数(CDF) P ( X < u a ) = α P(X<u_a)=\alpha P(X<ua)=α ,则称 u a u_a ua 为标准正态分布的 α \alpha α 分位数,显然他是严格递增的,故存在反函数。CDF 的反函数的一个重要作用是用来生成该随机分布的随机变量。

Time Dettmers 认为 k-bit 的有损最小熵编码具有以下特性:当将输入数据进行量化时,每个可能的 k-bit 整数值出现的概率是相等的

那么对于预训练模型(参数符合正态分布),可以通过 CDF 的反函数 Q X = F X − 1 Q_X=F_X^{-1} QX=FX−1 简化分位数计算。对于两个分位点的中心 q i q_i qi 有:
q i = 1 2 ( Q X ( i 2 k + 1 ) + Q x ( i + 1 2 k + 1 ) ) q_i=\frac{1}{2}(Q_X(\frac{i}{2^k+1})+Q_x(\frac{i+1}{2^k+1})) qi=21(QX(2k+1i)+Qx(2k+1i+1))

然后量化计算得到:

  1. 归一化常数 N = m a x ( ∣ T ∣ ) N=max(|T|) N=max(∣T∣),将输入张量映射到目标范围
  2. 对于 T / N T/N T/N 的每个元素,采用二进制搜索找到最接近阈值的 q i q_i qi
    T i Q = a r g m i n j = 0 2 n ∣ Q j m a p − T i N ∣ 式(3) T_i^Q=argmin_{j=0}^{2^n}|Q_j^{map}-\frac{T_i}{N}| \qquad \qquad \text{式(3)} TiQ=argminj=02n∣Qjmap−NTi∣式(3)

分块 k 位量化

在式(1)中 127 a b s m a x ( X F P 32 ) \frac{127}{absmax(X^{FP32})} absmax(XFP32)127 如果是个异常的极大值或者极小值,那么会造成整个张量的绝大多数值在量化后在 0 附近,破坏了量化特征的均匀性。
分块 k 位量化通过将张量分成若干个块,让每个块有独立量化常数 c,解决了异常值问题,并减少了核之间的通信,有更好的并行性。

4-bit 标准浮点数量化通过将数据分为负数和正数两部分分别量化:负数部分用7位表示(8个值,含0),正数部分用8位表示(9个值,含0)。合并时去掉一个重复的0,最终占满4比特的16个值。这种方法确保零点精确映射到0,并充分利用了4比特的全部信息

双重量化

当我们保存模型时我们不仅要保存量化后的结果,还要保存每个块的量化常数。虽然量化后的参数只有4bit的精度,但是这个量化常量的精度是 float32。在 QLoRA 中,每个块的大小是 64,因为块中的每个值占 4 比特。这相当于为了存储量化常数,模型要额外占用 32/(64∗4)=12.5% 的显存。QLoRA 的双重量化就是对这个量化常数再做一次 8 bit 的量化。

分页优化

分页优化是针对梯度检查点做的进一步优化,以防止在显存使用峰值时发生显存OOM的问题。QLoRA分页优化其实就是当显存不足是,将保存的部分梯度检查点转移到CPU内存上。

QLoRA 核心工作在于模型量化,通过定义 4NF 的精度单位,大幅节约了训练时所用显存。因其作为 LoRA 系列被得到广泛应用,尽管本人对模型量化并没有太多研究,仅以此记录,如果有不对地方,还请各位给予批评指正。

实验结果

相关推荐
崔高杰9 分钟前
To be or Not to be, That‘s a Token——论文阅读笔记——Beyond the 80/20 Rule和R2R
论文阅读·笔记
AI.NET 极客圈10 分钟前
.NET 原生驾驭 AI 新基建实战系列(六):Pinecone ── 托管向量数据库的向量数据库的云原生先锋
数据库·人工智能·.net
YBCarry_段松啓12 分钟前
uv:下一代 Python 包管理器
人工智能·python
聚客AI13 分钟前
深度解构神经网络的底层引擎:从感知机到反向传播的数学之旅
人工智能·神经网络·掘金·日新计划
yorushika_15 分钟前
python打卡训练营打卡记录day45
开发语言·python·深度学习·tensorboard
张较瘦_17 分钟前
[论文阅读] 人工智能+软件工程 | 用大模型优化软件性能
论文阅读·人工智能·软件工程
机器之心21 分钟前
深夜突袭!谷歌Gemini 2.5 Pro更新蝉联榜一:推理超越o3,编程超越opus4
人工智能·gemini
咒法师无翅鱼22 分钟前
【个人笔记】数据库原理(西电)
笔记
fc&&fl23 分钟前
大模型面试题总结
人工智能·python
极昆仑智慧30 分钟前
极昆仑智慧与数元灵科技达成战略合作
人工智能·语言模型·自然语言处理