简介QLoRA核心概念
QLoRA = NF4(4-bit NormalFloat Quantization)+DQ(Double Quantization )+Paged Optimizers
NF4
常规量化都是均匀量化,类似,而NF4就是指按正态分布分位数(假设LLM权重参数值近似服从正态分布)进行量化,最终量化到4bit。这些分位数都可以提前算好,不会造成额外性能损失。
注意QLoRA只对LLM的参数进行量化,LoRA的权重无需量化(16甚至32bit都行)。另外由于只有LoRA参数参与训练,LLM参数一直freeze,因此梯度流不会经过量化函数,不需要考虑STE之类的东西。
DQ
由于LLM本身很大,因此各个参数block的zero-point & scale总量也非常大,因此对这些量化相关参数再做一次普通均匀8bit量化。(当然这还是和LoRA的参数无关)
Paged Optimizers
将Optimizer的数据视为数据块。当显存存即将耗尽或遇到尖峰时就自动转移到RAM去,要用时在调回来,即可避免OOM,实现小显存调大模型。
性能指标
- 和16bit LoRA大体持平
- 和full FT相比下降大致在1%以内,差距很小
- 显存需求大幅下降,例如LLaMA 65B从780G(这是16bit FT的显存,如果是更原始的微调方式显存占用可能要更高)降到48G以下