Qlora核心概念讲解
-
Qlora基本原理与优势
- 结合LoRA和量化技术:Qlora是一种量化LoRA的方法,结合LoRA(引入低秩矩阵微调模型)和量化技术(将高精度浮点数转换为低精度整数,如FP32或FP16转换为int8或int4),在大模型微调中可降低存储和计算成本,同时保持模型性能 。
- 节约内存优势:相比其他微调方法,Qlora能显著节约微调空间与运行所需空间。以10亿参数模型为例,全量微调(FP16精度,优化器状态按3倍参数量计算)需8GB内存;LoRA微调需2.008GB;Qlora微调时,GPU部分仅需0.058GB显存,总CPU存储需求为0.558GB 。
-
量化原理及相关计算
-
INT4量化过程:以一组权重值[0.3456, -0.8750, 1.2345, -0.4567]为例,首先确定最大绝对值1.2345,INT4值范围是[-7, 7],计算量化比例(缩放因子)约为0.1764(1.2345÷7) 。接着将权重值缩放到[-7, 7]并取整,如0.3456÷0.1764≈2,得到量化权重[2, -5, 7, -3] 。存储时,量化权重每个值占4位(INT4),即4×0.5 = 2字节,缩放因子存储为FP16,占2字节,总内存需求为4字节,相比原FP16存储(4×2 = 8字节)节省了一半空间 。
-
量化范围选择原因:INT4量化常用[-7, 7]而非[-8, 7],因为4位二进制可表示16个值,正数方向0111表示7 。选择[-7, 7]是为了对称化向量,防止边界化溢出,减少数值溢出风险。同理,INT8对应[-127, 127] 。
-
量化与反量化公式
-
量化公式:Xint8=round(Xfp32scalingfactor)X_{int8} = round(\frac{X_{fp32}}{scaling factor})Xint8=round(scalingfactorXfp32),如上述例子中权重值的量化计算。
-
反量化公式:dequantfp32(yint8,Xint8)=yint8×scalingfactordequant_{fp32}(y_{int8}, X_{int8}) = y_{int8}×scaling factordequantfp32(yint8,Xint8)=yint8×scalingfactor,通过反量化可将量化后的值还原为接近原始的浮点数,如[2, -5, 7, -3]×0.1764 = [0.3528, -0.8882, 1.2348, -0.5292],与原始值[0.3456, -0.8750, 1.2345, -0.4567]存在一定误差,这是由于量化过程中的约等计算导致精度损失 。
-
-
-
应对数据分布不均的策略
-
4 - Normal Distribution概念:模型权重通常不是严格正态分布,而是非对称或重尾性分布。4 - Normal Distribution是一种权重分布建模方式,具体来说,它依据中位数(50% 分位点)、四分位数(25%,75%)以及极值分位点(1%,99%)将数据划分为不同区间,用于让非正态分布的数据也能有效参与训练。极值分位点用于捕捉数据中的极端值
- 以数值[0.1, -0.2, 1.5, -1.2, 0.7, -0.5, 2.3, -2.1, 0.0]为例,大部分数值在[-1, 1],为保证权重相等(即面积相等),使用正态分布的分位点划分量化区间 。
- 中位数反映了数据的集中趋势,能够直观地展示数据的中心位置。四分位数反映了数据的离散程度和分布均匀性。 如果 25% 和 75% 分位点距离较近,说明数据在中间部分较为集中;如果距离较远,说明数据分布更分散。极值分位点用于捕捉数据中的极端值。
- 靠近中位数的区间:数据较为集中,可以使用较小的缩放因子,使数据在量化后能紧密分布在量化范围内。
- 包含极值的区间:数据较为分散,需要使用较大的缩放因子,确保数据能合理映射到量化区间,减少量化误差,提高量化效果。
-
量化区间划分及操作:中位数(50%分位点)为权重中心值0;四分位数(25%,75%)表示分布中相应比例权重的位置;极值分位点(1%,99%)代表接近尾部的权重 。根据这些分位点划分区间:区间1为[-0.5, 0.5],区间2为[-1.5, -0.5]和[0.5, 1.5],区间3为[-3, -1.5]和[1.5, 3] 。每个值映射到相应区间内,进行向量化与反向量化并转成整数,每个区间对应自己的缩放因子,以此减少因数据分布不均导致的精度损失 。
-
流程:
-
明确量化位数与整体量化目标:确定使用的量化位数(如 INT4、INT8 等)及其对应的量化范围,同时根据任务需求和硬件条件确定整体量化目标,比如是更注重压缩数据存储空间还是模型精度。
-
分析数据分布情况:统计各区间数据范围,找到每个区间的最大绝对值,同时统计不同区间的数据分布密度。
-
基于区间数据范围初步计算缩放因子:依据区间最大绝对值和量化范围,计算初步的缩放因子。
-
结合数据分布密度调整缩放因子:根据数据分布密度,对初步缩放因子进行调整,使高密度区间缩放因子变小,低密度区间缩放因子变大。
-
依据模型精度要求优化缩放因子:找出模型中的关键数据区间,通过实验或分析,对这些区间的缩放因子进行精细调整,以提升模型性能。
-
验证与调整:用设置好缩放因子的数据进行量化并在模型中试验,根据模型训练效果、推理准确性和资源使用情况等,决定是否需要再次调整缩放因子。如果模型性能不满意,就返回优化缩放因子步骤;如果满意,则完成缩放因子设置 。
-
-
-
Double Quantization:Double Quantization是对缩放因子的二次压缩。在已有缩放因子(如0.1764)的基础上,由于缩放因子在大量数据下存储占比大,对其再次进行类似量化的操作,添加一个新的缩放因子,将众多缩放因子整合并整除化,进一步减小存储空间 。
-
分页机制
-
分页机制的作用:在模型训练中,当模型参数过大无法一次性全部加载到GPU显存时,分页机制将模型参数分成小块,动态加载到显存中。假设模型有1亿个16位浮点数(FP16)参数,每个参数占2字节,共需200MB内存。若GPU显存为8GB(8000MB),虽能加载该模型,但对于更大模型(如100亿参数)则无法容纳 。
-
分页操作流程:将1亿参数(1b 参数通常指的是 10 亿参数。这里的 “1b” 是 “1 billion” 的缩写)模型分页为5个小块,每个小块2000万个参数,占用40MB 。训练时,按需加载当前需要的部分参数到显存,如训练第一个epoch时,先加载前3个分页块,此时显存占用120MB,远小于完整模型的200MB 。当需要后续分页块时,卸载前面已用的分页块,如加载第四个分页块时卸载第一个分页块,以此确保显存动态利用,避免溢出 。
-
分页数量的权衡:分页并非越多越好,虽然分块越小能使模型在更小显存下训练更大模型,但每次切换分页会引起额外I/O操作,影响微调效率。因此,需在分块大小和数量上找到平衡点,以优化训练效果 。
-
-
Qlora关键概念总结:Qlora的关键概念包括4 - Normal Distribution(处理非正态分布数据)、Double Quantization(优化缩放因子存储)和分页机制(解决大模型在有限显存下的训练问题)。这些概念共同作用,实现了在低显存条件下高效微调大模型的目标,与传统LoRA微调相比,进一步节约了资源,拓展了模型训练的硬件适应性 。