【AI大模型微调】第 5 章 微调方法选择
第 5 章 微调方法选择
根据是否更新模型全部参数,监督微调(SFT)的方法可分为两类:
- 全参数微调(Full Fine-tuning)
- 参数高效微调(Parameter-Efficient Fine-tuning, PEFT)
5.1 全参数微调
全参数微调是一种在微调过程中更新模型全部参数的方法。它能最大限度地适配目标任务,通常获得最优性能。
但由于大语言模型参数量庞大(数十亿至数千亿),全参数微调对显存、算力和训练时间要求极高,单设备通常无法承载模型参数、优化器状态与激活值,必须依赖分布式训练技术才能实施。
因此,全参数微调适用于资源充足、对性能要求严苛、且拥有高质量标注数据的场景。在实际应用中,常作为参数高效微调无法满足需求时的高成本备选方案。
5.2 参数高效微调
5.2.1 概述
参数高效微调(Parameter-Efficient Fine-tuning, PEFT)是一系列微调方法,其核心思想是仅更新少量参数或引入少量可训练模块,在显著降低资源消耗的同时,高效适配目标任务。目前,最先进的PEFT方法已经能实现与全参微调相当的性能。
PEFT 的兴起可追溯至 2019 年前后。当时以 BERT、GPT-2 为代表的预训练模型规模迅速扩大,传统全参数微调的资源成本逐渐难以承受。伴随模型规模持续膨胀,这种矛盾愈发凸显,由此推动了 PEFT 技术的快速发展,形成了包括 Prompt Tuning、Prefix Tuning、P-Tuning、Adapter、LoRA 等多条技术路线,如下图所示:
在众多方法中,LoRA(Low-Rank Adaptation)因其结构简洁、训练高效、稳定,已成为当前大语言模型监督微调(SFT)的主流选择;其量化版本 QLoRA (Quantized Low-Rank Adaptation)进一步融合量化技术,将微调门槛降至消费级 GPU 也可运行的水平。相比之下,其他 PEFT 方法因在效率、稳定性或通用性等方面存在局限,已逐渐边缘化。
5.2.2 LoRA
1)概述
LoRA(Low-Rank Adaptation)是一种高效且广泛使用的参数高效微调方法,由微软研究院于 2021 年提出。因其训练成本低、适配能力强、推理无额外开销等优势,已成为当前大语言模型监督微调(SFT)中最广泛使用的技术。
2)原理
在传统的全参数微调(Full Fine-tuning)中,模型中的某个参数矩阵W0∈ ℝd×k会在训练过程中被更新为:
W=W0+Δ**W
其中 _Δ**W_是微调阶段需要学习的完整增量矩阵。
LoRA 的作者在实践中观察到:Δ**W往往具有低秩结构,也就是说它的有效自由度远低于其表面维度。基于这一关键现象,LoRA 将 _Δ**W_近似分解为两个低秩矩阵的乘积:
$ \Delta W \approx AB,\ A \in \mathbb{R}^{d \times r},\quad B \in \mathbb{R}^{r \times k}, $
其中r≪ min (d,k),通常取 4、8 或 16 等远小于原始维度的数值。这样,微调后的权重矩阵可写为:
W=W0+A**B.
如下图所示:
在训练过程中,LoRA完全冻结原始权重W0,仅对新增的低秩矩阵 _A_和 _B_进行优化。这大幅减少了需要更新的参数量,同时也避免了对大规模模型权重的直接修改,使微调过程更加轻量、高效。
在推理阶段,低秩增量 _A**B_可以无缝合并回原始权重W0中,不会引入额外的计算复杂度,因此 LoRA 的高效性不仅体现在训练中,也体现在推理过程中。如下图所示:
由于秩 _r_很小,LoRA 的参数开销和计算成本都极低。例如,对d=k= 4096的权重矩阵进行全参数更新需要约 16M 个参数,而采用 LoRA(如r= 8)时,仅需:
4096 × 8 + 8 × 4096 = 65, 536
个参数,占原始权重的仅约 0.4%。这种数量级的压缩使得在有限资源下微调大模型成为可能,也使得在多个任务之间共享底层模型、仅保存轻量级 LoRA 适配器成为现实。
5.2.3 QloRA
1)概述
QLoRA(Quantized Low-Rank Adaptation)是 LoRA 的量化增强版本,由华盛顿大学和微软研究院于 2023 年提出。QLoRA 在 LoRA 的基础上引入 4-bit 量化技术,在几乎不损失性能的前提下,将大语言模型微调的硬件门槛大幅降低,使得数十亿参数级别的模型可在单张消费级 GPU(如 RTX 3090/4090)上完成高效微调。
2)原理
QLoRA 的核心思想是:先对预训练模型权重进行 4-bit 量化以压缩显存占用,再在其上应用 LoRA 进行参数高效微调。
整个流程包含三个关键技术组件:
- 4-bit NormalFloat(NF4)量化
量化(Quantization) 是一种通过降低数值精度(例如从 16-bit 降至 4-bit)来压缩模型、节省显存的技术。传统 4-bit 量化通常采用如下流程:
- 使用权重的最大绝对值(absmax)将权重归一化到区间 [ − 1, 1];
- 将该区间均匀划分为 24= 16个等距格点;
- 每个权重被映射到最近的格点,并以对应的 4-bit 索引存储。
具体如下图所示:
然而,大语言模型的权重分布并非均匀,而是近似服从标准正态分布(均值为 0,方差为 1)。在这种分布下,传统均匀量化存在明显缺陷:
- 在权重密集的 0 附近,格点相对不足,导致量化误差较大;
- 在权重稀疏的两端,格点又相对冗余,造成信息利用率低下。
为解决这一问题,QLoRA 提出了 4-bit NormalFloat(NF4)量化,专为标准正态分布设计:
- 将标准正态分布按累积概率均分为 16 个等概率区间;
- 每个区间选取其中位数作为该区间的量化代表值。
这样得到的量化格点在 0 附近更密集,在两端更稀疏,与权重的实际分布高度匹配,从而显著降低量化误差。
- 双重量化(Double Quantization)
在权重量化过程中,为了保证精度,通常的做法是让每 64 个权重共享一个 32-bit 的缩放因子(Absmax)。虽然这种方法能有效控制量化误差,但这些大量的缩放因子自身也会带来显著的存储开销。
为缓解这一问题,QLoRA 提出了“双重量化”:不仅对模型权重量化,更对这些高精度的缩放因子进行二次量化。其实现方式是,将缩放因子以 256 个为一组,使用 8-bit 数据类型进行二次量化。如此一来,量化所需的辅助存储空间得以大幅减少。
- 分页优化器(Paged Optimizers)
在微调过程中,优化器状态(如 Adam 的一阶矩、二阶矩)往往比模型权重本身更占显存。即使使用 LoRA 或 QLoRA,大量优化器状态仍可能导致显存不足,尤其是在消费级 GPU 上。
为解决这一瓶颈,QLoRA 使用了分页优化器(Paged Optimizer)技术,使优化器状态能够按需加载、按需卸载,从而更加高效地利用显存。
其核心思路是:
- 将优化器状态拆分为多个小块(pages);
- 仅在需要更新某层时,临时把对应 page 载入到显存;
- 更新完成后立即将该 page 写回内存,并从显存中释放;
借助分页机制,显存只需容纳当前正在使用的优化器状态,显存占用随之显著降低。这一技术让大型模型的 QLoRA 微调能够在更低显存环境下高效运行,并最大化消费级 GPU 的可用算力。