QLoRA:量化下微调

QLoRA(Quantized LoRA)在 LoRA 基础上进一步把预训练基座量化到 4 比特,仅以低秩适配器做反向更新,使 65B 级模型也能在单张 48GB 显卡上微调,把大模型微调门槛降到消费级硬件。

NF4 与双量化

QLoRA 用 4 比特正态分布量化(NF4)匹配权重分布,并对量化常数再做一次量化(双量化)省显存。基座以 4 比特常驻显存,前向时用反量化参与计算。

from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, BitsAndBytesConfig

bnb = BitsAndBytesConfig(load_in_4bit=True,
                         bnb_4bit_quant_type="nf4",
                         bnb_4bit_compute_dtype="bfloat16")
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-70B",
                                             quantization_config=bnb)
model = get_peft_model(model, LoraConfig(r=8))   # 仅 LoRA 参数可训

与 LoRA 的关系

QLoRA 的梯度只流过 LoRA 适配器,基座权重被冻结且保持量化,因此显存主要来自量化基座与优化器状态。相比全量或纯 LoRA,它用相近质量把显存压到最低。

小结

QLoRA 以 NF4 量化冻结基座、仅训 LoRA 适配器,把大模型微调显存压到单卡可负担,是资源受限下最实用的微调方案。

参考与延伸阅读

本文累计阅读