
QLoRA量化微调实战:显存减半效果不减
QLoRA解决了什么问题? LoRA已经大幅降低了微调成本,但对于70B模型,仍然需要2×A100(80GB)。QLoRA(Quantized LoRA)通过4-bit量化基座模型,将显存需求再降一个数量级: 模型 全量微调 LoRA QLoRA 7B 80GB 16GB 6GB 14B 160GB 32GB 12GB 70B 800GB 160GB 24GB 这意味着:用一张RTX 4090就能微调70B模型。 QLoRA核心原理 三大创新 1. NF4(NormalFloat 4-bit)量化 传统4-bit量化(INT4)假设数据均匀分布,但神经网络权重通常服从正态分布。NF4专门为正态分布设计量化区间: # NF4量化原理 import numpy as np # INT4: 均匀量化 int4_levels = np.linspace(-1, 1, 16) # 16个均匀区间 # NF4: 正态分布感知量化 from scipy.stats import norm # 16个分位点对应正态分布的分位 nf4_levels = norm.ppf(np.linspace(0, 1, 17)[1:-1]) nf4_levels = nf4_levels / np.max(np.abs(nf4_levels)) # 归一化到[-1, 1] print(f"INT4 levels: {int4_levels}") print(f"NF4 levels: {nf4_levels}") # NF4在0附近更密集,在两端更稀疏,匹配权重分布 2. Double Quantization 对量化后的缩放因子本身再量化,进一步节省显存: 原始权重 W → 4-bit量化 → 量化值 + 缩放因子(32bit) ↓ 缩放因子再量化为8-bit ↓ 额外节省约0.4bit/参数 3. Paged Optimizer 使用NVIDIA的统一内存,当显存不够时自动将优化器状态转移到CPU内存: ...