qlora
QLoRA 代码实现及过程分析 | Liz
几个要点:
QLoRA 结合了 4-bit 量化和 LoRA 技术,具体实现步骤如下:
- 4-bit 量化:使用 bitsandbytes 库实现 4-bit NormalFloat (NF4) 量化,将预训练模型权重压缩至 4 位,显著降低内存占用
- LoRA:通过 peft 库实现 LoRA,添加低秩适配器(例如秩 r=16),仅更新少量参数
- 结合技术:加载量化后的模型,附加 LoRA 适配器,使用 16-bit (bfloat16) 进行前向/反向传播计算
QLoRA(Quantized LoRA)微调步骤
- 量化预训练模型:加载一个 已经量化的模型,例如 4bit 或 8bit 模型。
- 冻结量化后的权重,只训练 LoRA 适配矩阵。
- 在 量化后的模型 上进行微调,优化 LoRA 层的适配矩阵。
- 推理时,仍然使用 量化后的权重,加上训练好的 LoRA 适配矩阵
为什么量化通常只用于线性层?
- 线性层是参数最多、计算量最大的部分(参数集中)
- 线性层结构简单、便于量化和解码(数学结构简单)
- 非线性操作不好量化(其他层不适合,量化线性层影响较小)
- 工程上已经高度优化了线性层量化(工程已优化)