字节笔记本
2026年5月31日
大模型微调:全量、LoRA、QLoRA 三种选型
大模型微调这个词听起来很技术,但如果拆开来看,核心概念其实不多,搞清楚几个关键术语就能明白怎么选型。
微调的本质是用你的数据让模型变得更擅长你的任务。预训练阶段模型已经在海量通用数据上学会了语言知识和推理能力,但它不擅长特定任务——比如你的客服场景需要理解行业术语,你的写作文案需要特定的品牌调性。微调就是在你的任务数据上对模型做针对性的适配。
全量微调是更新模型的所有参数,效果最好但计算成本最高。对于 7B 级别的模型,全量微调需要至少 4 张 A100 显卡。对于 70B 级别的模型,需要 16 张以上的 A100。全量微调的优势是模型能充分利用新的训练数据,在所有参数层面上适应新任务。劣势是对硬件资源要求高,而且微调后的模型会占用大量存储空间,每个任务都需要保存一份完整的模型权重。
LoRA(Low-Rank Adaptation)是微软提出的高效微调方法。它的核心理念是:模型参数虽然多,但真正需要改变的只是这些参数所张成的低维子空间。LoRA 在原始模型参数旁边插入少量可训练的低秩矩阵,训练时只更新这些矩阵,原始参数保持冻结。只需要更新原始参数量的 0.1% 到 1%,一张消费级显卡就能跑。一张 RTX 4090 就能微调 7B 模型,两张就能微调 13B 模型。
LoRA 的具体实现是给 Transformer 的注意力层中的 Query 和 Value 投影矩阵分别加上一个低秩分解矩阵。训练时冻结原始权重,只训练这些低秩矩阵。推理时可以把训练好的低秩矩阵合并回原始权重中,不增加推理延迟。LoRA 的 rank 值控制了可训练参数的数量,rank 越高表达能力越强,但计算量也越大,通常设置为 8 到 64 之间。
QLoRA 在 LoRA 的基础上更进一步,把模型参数做了量化压缩。通常的做法是把原始模型量化到 4-bit,大幅降低显存需求,然后在这个量化后的模型上做 LoRA 微调。一张 24GB 显存的 RTX 3090 就能用 QLoRA 微调 70B 级别的模型。性能损失很小,4-bit 量化加上 LoRA 微调的效果和全量微调的差距通常在 1% 以内。
QLoRA 的关键技术是 NF4 量化,即 NormalFloat4 数据类型。它假设模型权重服从正态分布,将权重量化为 4-bit 的离散值,最大化了每个 bit 的信息密度。同时 QLoRA 使用了双重量化技术,对量化常数再做一次量化,进一步减少了内存占用。
实践中有几个重要的参数设置。学习率通常设置为 1e-4 到 5e-4,比全量微调大一个数量级。训练轮数 1 到 3 个 epoch 就够,过多会导致过拟合。目标模块通常选择注意力层的 q_proj 和 v_proj,也可以扩展到所有线性层。LoRA 的 dropout 一般设为 0.05 到 0.1,防止过拟合。
选择哪种方案取决于你的实际情况。有足够硬件资源就选全量微调,效果最好。硬件有限用 LoRA,消费级显卡就能跑。资源紧张用 QLoRA,一张卡就能调大模型。了解这三种方案的区别,你就能在不同的资源条件下做出合理的选择。
AdaLoRA 是 LoRA 的改进版本,它根据参数的重要性自适应地分配 Rank。重要的参数获得更高的 Rank,不重要的参数使用较低的 Rank。相比标准 LoRA 使用统一的 Rank,AdaLoRA 在同样的参数预算下能达到更好的效果。DoRA(Weight-Decomposed Low-Rank Adaptation)是另一种改进方案,它将权重分解为幅度和方向两个组成部分,分别应用 LoRA。这种分解方式让微调过程更稳定,收敛更快。DoRA 在多个基准测试上的表现优于标准 LoRA。微调方法的选择不仅要考虑训练阶段的效果,还要考虑推理阶段的部署成本。全量微调的模型需要存储完整的权重,多任务时需要保存多个副本。LoRA 只需要存储少量插件权重,不同任务之间可以共享基础模型。