全参数微调 vs 参数高效微调:何时选择何种方案?

全参数微调 vs 参数高效微调:何时选择何种方案?

全参数微调 vs 参数高效微调:何时选择何种方案?

一、引言:一个真实的选型困境

想象这样一个场景:你所在的团队基于 Llama 3-70B 构建了一个垂直领域的问答系统,现在需要用 5000 条高质量的领域标注数据对其进行微调。你有两张 A100-80GB GPU,预算有限,时间窗口只有一周。

团队里出现了两种声音:

  • 算法工程师 A:「必须全参数微调!只有更新所有权重,模型才能真正"学会"领域知识。PEFT 那些方法都是折中方案,效果打折扣。」
  • 算法工程师 B:「5000 条数据全参数微调 70B?两张 A100 连模型都装不下。用 LoRA 吧,效果不差多少,成本只有十分之一。」

谁对谁错?答案是:取决于你的具体场景

本文将从原理、实践和工程角度,系统性地对比全参数微调(Full Fine-Tuning)与参数高效微调(PEFT,Parameter-Efficient Fine-Tuning),帮助你在不同场景下做出最优选择。我们不会停留在"LoRA 省显存"这种粗浅结论,而是深入到数学本质、显存分配机制和实际落地经验中。

二、核心概念:两种微调范式的数学本质

2.1 全参数微调

全参数微调是最传统、最直观的微调方式。给定预训练权重W 0 ∈ R d × k W_0 \in \mathbb{R}^{d \times k}W0Rd×k,全参数微调直接更新所有权重:

W = W 0 + Δ W W = W_0 + \Delta WW=W0+ΔW

其中Δ W \Delta WΔW是一个与W 0 W_0W0同形状的矩阵,通过反向传播在全部参数上计算梯度并更新。对于 Llama 3-70B,这意味着你需要为700 亿个参数存储梯度、优化器状态和中间激活值。

显存开销公式(以 AdamW 优化器为例):

M total = M model + M gradients + M optimizer + M activations M_{\text{total}} = M_{\text{model}} + M_{\text{gradients}} + M_{\text{optimizer}} + M_{\text{activations}}Mtotal=Mmodel+Mgradients+Moptimizer+Mactivations

其中:

  • M model M_{\text{model}}Mmodel:模型权重(2 bytes/param for BF16)
  • M gradients M_{\text{gradients}}Mgradients:梯度(2 bytes/param)
  • M optimizer M_{\text{optimizer}}Moptimizer</