☰
LLM 训练系列(三):参数更新策略——Full FT、LoRA 与 QLoRA
2026/10/12 2:25:33 网站建设 项目流程

LLM 训练系列(三):参数更新策略——Full FT、LoRA 与 QLoRA

SFT、DPO、GRPO 描述训练过程或优化方法;Full FT、LoRA、QLoRA 描述模型参数如何更新。它们不是同一个维度。

本文重点介绍全量微调与参数高效微调,并梳理 LoRA、QLoRA 的核心原理和常见误区。

系列导读

系列位置文章主题主要内容
总览LLM 训练系列(总览):从数据工程到推理部署数据工程、预训练、后训练、评测和部署
第一篇LLM 训练系列(一):预训练——通用预训练与持续预训练CLM、Next Token Prediction、Base Model
第二篇LLM 训练系列(二):后训练——SFT 与偏好对齐SFT、PPO、DPO、GRPO
第三篇(本文)LLM 训练系列(三):参数更新策略——Full FT、LoRA 与 QLoRAFull FT、LoRA、QLoRA 与 PEFT

一、参数更新策略先看全貌

先区分四个维度

维度典型概念回答的问题
生命周期阶段预训练、后训练当前处于模型生命周期的哪个环节
训练过程或优化方法持续预训练、SFT、DPO、PPO、GRPO使用什么数据和训练方式
优化目标或信号Next-Token CE、DPO Loss、Reward模型具体优化什么
参数更新策略Full FT、LoRA、QLoRA哪些参数参与更新

SFT 是训练过程或训练范式,Full FT、LoRA、QLoRA 是参数更新策略。SFT 通常使用自回归 Token-level Cross Entropy Loss;工程上经常 Mask 掉 Prompt,只计算 Assistant 回答部分的损失,但这是一种常见实现方式,并不是 SFT 的必要定义。

持续预训练与 SFT 可以使用形式相近的 Next-Token Prediction 损失,主要区别在于训练目的、数据形式、数据分布和 Loss Mask。因此,更准确的说法是它们属于不同的概念维度,而不是严格数学意义上的“正交”。

DPO 是直接偏好优化方法;GRPO 是基于奖励信号和组内相对优势的强化学习策略优化方法,二者不能简单归为同一种训练目标。

因此,LoRA 并不等于 SFT,SFT 也不等于全量微调。

持续预训练 + Full FT / LoRA / QLoRA SFT + Full FT / LoRA / QLoRA DPO + Full FT / LoRA / QLoRA PPO + Full FT / LoRA / QLoRA GRPO + Full FT / LoRA / QLoRA

这些组合在概念上成立,但具体框架是否支持、训练是否稳定,以及量化模型能否参与相应训练,需要结合工程实现、成本和任务需求判断。

预训练、后训练与参数更新方法的关系

Full FT、LoRA、QLoRA 回答“哪些参数参与更新”;预训练、SFT、DPO、PPO、GRPO 回答“模型使用什么数据和目标进行训练”。二者属于不同维度,可以根据任务和工程条件进行组合。

从零预训练主流采用 Full FT;已有基座上的持续预训练和后训练则可以选择 Full FT、LoRA 或 QLoRA。选择哪种方式,需要综合考虑训练目标、数据规模、模型容量、显存资源和训练框架支持情况。

参数更新策略总览

参数更新策略(Fine-Tuning Strategy) ├─ 全量微调(Full Fine-Tuning) │ └─ 更新全部模型参数 │ 【适合数据和算力充足、追求效果上限的场景,但需要大量计算资源和显存】 │ └─ 参数高效微调(PEFT,Parameter-Efficient Fine-Tuning) ├─ 低秩适配类(Low-Rank Adaptation) │ ├─ LoRA(Low-Rank Adaptation) │ │ └─ 【在原模型权重旁加入低秩矩阵,只训练新增的低秩参数】 │ └─ QLoRA(Quantized LoRA) │ └─ 【在量化后的基座模型上进行 LoRA 训练,进一步降低显存需求】 │ ├─ Adapter 插入类 │ └─ Adapter Tuning │ └─ 【在 Transformer 层中插入小型 Adapter 模块,只训练 Adapter 参数】 │ ├─ Soft Prompt 类 │ ├─ Prompt Tuning │ │ └─ 【在输入前添加可学习的 Soft Prompt,只优化 Prompt 参数】 │ ├─ Prefix Tuning │ │ └─ 【在 Transformer 各层加入可学习的 Prefix 向量,影响 Attention 计算】 │ └─ P-Tuning v2 │ └─ 【在多层 Transformer 中加入可学习的连续提示,增强任务适配能力】 │ └─ 参数选择类 ├─ BitFit │ └─ 【只更新模型中的 Bias 参数,实现极低成本微调】 └─ Sparse Fine-Tuning └─ 【只更新模型中的部分稀疏参数,减少需要训练的参数量】

二、Full Fine-tuning 与 PEFT

Full Fine-tuning

全量微调会让模型的全部参数参与梯度更新。

预训练模型 ↓ 全部参数计算梯度并更新 ↓ 完整的新模型权重

优点:

  • 参数自由度高,效果上限通常较高。
  • 不受低秩适配器容量限制。
  • 训练完成后得到独立的完整模型。

缺点:

  • 参数梯度、优化器状态和激活值带来较大显存开销。
  • 保存多个任务模型需要大量存储空间。
  • 训练和分布式工程成本较高。

什么是 PEFT

PEFT 全称是 Parameter-Efficient Fine-Tuning,即参数高效微调。

它的共同思想是:

不更新整个模型的全部参数,而是只训练少量新增参数或选定参数,以较低成本适配新任务。

PEFT 是一类方法的总称,LoRA 是其中最常见的一种。

三、LoRA:从原理到应用

3.1 LoRA 核心原理


LoRA 全称是 Low-Rank Adaptation。

LoRA 论文与代码

  • 论文地址:LoRA: Low-Rank Adaptation of Large Language Models
  • 官方代码:microsoft/LoRA
  • 作者报告:LoRA 论文报告视频

先说结论:LoRA 会冻结预训练模型的原始权重,只训练少量新增的低秩适配器参数,从而显著降低训练阶段的可训练参数量、显存占用和模型存储成本。推理时可以合并权重,也可以动态加载 Adapter。

LoRA 的关键点可以概括为:

  • 基座权重冻结:原始预训练参数不参与更新。
  • 只训练少量参数:主要更新新增的低秩矩阵A、B,可训练参数量通常远小于 Full Fine-Tuning。
  • 挂载范围可配置:由target_modules决定 LoRA 加在哪些模块上。
  • 经典初始化影响较小:通常随机初始化A、将B初始化为零,使训练开始时 LoRA 分支的输出接近零。
  • 推理方式可选择:合并权重后通常没有 LoRA 分支带来的额外延迟;动态加载 Adapter 则会增加少量计算开销。
  • 支持多任务切换:同一套基座模型可以加载多个不同的 LoRA Adapter,用于不同任务、领域或风格。

它冻结原始权重W₀,使用两个低秩矩阵表示权重增量:

W = W 0 + Δ W , Δ W = B A W = W_0 + \Delta W, \qquad \Delta W = BAW=W0​+ΔW,ΔW=BA

h = W 0 x + α r B A x h = W_0x + \frac{\alpha}{r}BAxh=W0​x+rα​BAx

如果原始权重矩阵很大,而秩r较小,那么训练A、B所需的参数量会远少于更新完整的W₀。

输入 x ├─ 原始分支:W₀x,W₀ 冻结 └─ LoRA 分支:BAx,只训练 A、B ↓ 输出:W₀x + scaling × BAx

常见缩放因子:

scaling = α / r

LoRA 更新哪些层

LoRA 挂载到哪些模块由target_modules配置决定。它通常填写一组模块名称,例如q_proj、v_proj;PEFT 会在整个模型中查找名称匹配的模块,并为每一个匹配项添加 LoRA Adapter。

因此,当 Transformer 的每一层都包含q_proj和v_proj,并将它们写入target_modules时,通常意味着所有 Transformer 层中匹配的 Query、Value 投影都会挂载 LoRA,而不是只修改某一层。

q_proj、v_proj是许多常见 Decoder-only 模型的入门配置,但并不是所有模型统一的默认值。k_proj、o_proj以及 MLP 中的gate_proj、up_proj、down_proj是否加入,需要根据模型结构和任务需求手动决定。

以 LLaMA、Qwen2、Qwen3、Mistral、Gemma 等常见 Decoder-only 模型为例,最小配置通常只作用于注意力中的 Query 和 Value 投影:

frompeftimportLoraConfig lora_config=LoraConfig(r=16,lora_alpha=32,target_modules=["q_proj","v_proj"],lora_dropout=0.05,bias="none",task_type="CAUSAL_LM",)

常见配置范围如下:

配置范围target_modules示例说明
Query、Value 投影["q_proj", "v_proj"]参数量较少,是常见的入门配置
全部注意力投影["q_proj", "k_proj", "v_proj", "o_proj"]同时适配 Q、K、V 和输出投影
注意力与 MLP 投影再加入gate_proj、up_proj、down_proj可训练参数更多,适配能力和训练成本通常也更高
全部线性层"all-linear"由 PEFT 自动匹配模型中的线性层,常用于 QLoRA 风格配置

不同模型架构的模块名称并不统一。例如:

模型架构PEFT 中常见的目标模块名称
LLaMA、Qwen2/Qwen3、Mistral、Gemmaq_proj、v_proj
GPT-2c_attn
ChatGLM、BLOOM、Falconquery_key_value
BERT、RoBERTaquery、value

对于 PEFT 已支持的模型,如果没有显式传入target_modules,框架可能根据模型的model_type使用内置映射;对于自定义模型或尚未适配的架构,应当显式指定。

不确定模块名称时,可以先查看模型结构:

forname,moduleinmodel.named_modules():print(name,type(module).__name__)

然后从输出中确认注意力层和 MLP 层的真实名称,再填写target_modules。不要直接照搬其他模型的配置,否则可能出现找不到目标模块,或者 LoRA 挂载范围与预期不一致的问题。

选择更多模块通常会增加可训练参数、显存占用和训练时间,也可能提高复杂任务的适配能力。实际配置需要结合模型架构、数据规模、任务难度和硬件资源进行验证。

LoRA 的初始化

经典 LoRA 通常随机初始化矩阵A,并将矩阵B初始化为零。由于训练开始时BA = 0,LoRA 分支的初始输出接近零,因此模型在刚开始训练时基本保持原有基座模型的行为。

不同实现和 LoRA 变体可能采用不同初始化方式,因此不应把某一种初始化写成所有 LoRA 的强制规则。

3.2 LoRA 的训练产物与推理方式

LoRA 的训练产物

冻结的 Base Model + 体积较小的 LoRA Adapter

同一个 Base Model 可以加载不同 Adapter,用于不同任务、领域或风格。

LoRA 的两种推理方式

合并权重

W' = W₀ + ΔW

合并后不再单独计算 LoRA 分支,推理计算图通常与原始基座模型基本一致,因此一般没有 LoRA 分支带来的额外延迟。具体速度仍会受到推理框架、量化方式和硬件实现影响。

动态加载 Adapter

Base Model + 运行时加载 LoRA Adapter

动态加载便于一套基座切换多个任务,但运行时需要计算 LoRA 分支并与基座输出相加,因此通常会引入少量计算和权重管理开销。

因此,LoRA 的主要收益体现在训练、存储和多任务 Adapter 管理阶段,并不会自动让模型推理更快:合并后通常接近原始基座模型的推理速度,动态加载时则可能略慢。

QLoRA 同样主要解决训练显存问题。它在训练时量化并冻结基座模型,再更新 LoRA Adapter;部署时的推理速度取决于最终是否保留量化权重、使用什么量化格式以及推理引擎是否提供高效算子,不能简单归因于 LoRA。

3.3 怎样理解 LoRA Rank

Rankr控制 LoRA Adapter 的可学习容量。对于一个输入维度为d_in、输出维度为d_out的线性层,两个低秩矩阵新增的参数量约为:

r × ( d i n + d o u t ) r \times (d_{in} + d_{out})r×(din​+dout​)

因此,在其他配置不变时,Rank 增大通常会使可训练参数量、Adapter 体积和显存开销近似线性增加:

  • r较小:参数少、开销低,但可能欠拟合。
  • r较大:容量更强,但参数量和显存占用增加。

不存在适用于所有模型和任务的固定最佳 Rank。下面的取值只能作为实验起点,不能当作固定标准:

Rank 候选值适用思路
4 / 8快速实验、简单任务、少量数据或资源受限场景
16常用基线,可以优先作为起点
32 / 64基线明显欠拟合、任务复杂或需要更大适配容量时尝试
128+谨慎实验,需要确认效果收益能否覆盖额外训练和存储成本

Rank 较大并不等于效果一定更好。模型规模、数据质量、任务差异以及 LoRA 挂载范围都会影响最合适的取值。

Rank 与 LoRA Alpha

经典 LoRA 的缩放因子通常为:

scaling = α / r

工程上常见把α = r或α = 2r作为起始候选,使缩放因子分别为1或2,但这只是调参经验,不是强制规则。修改 Rank 时还需要关注 Alpha,不能只调整r而忽略实际缩放强度;不同 LoRA 变体也可能采用其他缩放方式。

原始论文中的 Rank 配置

LoRA 原论文在 GPT-3 175B 实验中,为了保持大约相同的可训练参数预算:

  • 只适配一种 Attention 投影时使用r = 8。
  • 同时适配 Query 和 Value 投影时使用r = 4。
  • 对 Query、Key、Value 和 Output 四种投影同时适配时使用r = 2。

论文还比较了r = 1、2、4、8、64。在其中部分任务上,很小的 Rank 已经具有竞争力,因此不能把“GPT-3 的 Q/V 配置固定为r = 8”当作论文结论。

QLoRA 原论文的主要实验设置是r = 64、α = 16,并把 LoRA 挂载到基座模型的全部线性层。这是该论文的实验配置,不代表所有 QLoRA 任务都应该比普通 LoRA 使用更大的 Rank,也不能简单地认为 4-bit 量化后必须把 Rank 提高一档。

实操调参思路

  1. 从r = 8或r = 16建立基线。
  2. 如果训练集和验证集都表现不足,确认数据、学习率和训练轮数没有问题后,再尝试16 → 32 → 64。
  3. 如果出现过拟合、显存不足或 Adapter 体积过大,可以降低 Rank。
  4. 每次实验同时记录target_modules、Alpha、学习率、Dropout、数据量和训练轮数,避免把效果变化全部归因于 Rank。
  5. 最终通过验证集和目标任务指标选择,不要根据“简单任务固定用8、复杂任务固定用64”机械决定。

一句话总结:Rank 决定 LoRA Adapter 的容量和参数规模;8或16可以作为常见起点,是否继续增大必须通过验证集判断。

四、QLoRA 与其他参数高效方法

4.1 QLoRA 核心原理

QLoRA 在低比特量化并冻结的预训练模型上训练 LoRA Adapter。

预训练模型 ↓ 4-bit 量化并冻结基座权重 ↓ 插入高精度 LoRA Adapter ↓ 只训练 LoRA 参数

经典 QLoRA 论文中的关键技术包括:

  • 4-bit NormalFloat(NF4)。
  • Double Quantization(双重量化)。
  • Paged Optimizers(分页优化器)。
  • 梯度穿过冻结的量化基座,更新 LoRA Adapter。

QLoRA 的核心收益是降低训练时基座权重的显存占用。实际可训练的模型规模仍然取决于显卡显存、序列长度、Batch Size、激活值、优化器和是否使用 CPU Offload 等因素。

4.2 Full FT、LoRA 和 QLoRA 对比

对比项Full FTLoRAQLoRA
基座参数更新冻结低比特量化并冻结
可训练参数全部LoRA AdapterLoRA Adapter
显存需求高较低通常更低
训练产物完整模型Adapter 或合并模型Adapter,部署方式取决于实现
效果上限通常较高受配置和任务影响受量化、配置和任务影响
适用场景资源充足、追求上限常规低成本适配、多任务显存受限的大模型微调

不能笼统地说某种方法“一定效果最好”。模型规模、数据质量、训练目标和超参数都会影响结果。

4.3 其他常见 PEFT 方法

方法可训练部分特点
Adapter Tuning插入的瓶颈网络模块化强,但增加额外推理路径
Prefix Tuning各层可学习 Prefix通过 Key/Value 前缀影响注意力
Prompt Tuning输入端 Soft Prompt参数极少,效果受模型规模影响
P-Tuning可学习虚拟 Token 或多层 Prompt有多种版本和实现
BitFitBias 参数参数量极低,能力上限有限

五、适用训练阶段与常见误区

5.1 它们可以用于哪些训练阶段

从零预训练

主流大模型从随机初始化开始训练时,通常采用全参数训练,不会把 LoRA 作为唯一的参数更新方式。冻结随机初始化的主干并只训练少量 LoRA 参数,通常无法获得完整的通用基座能力。

持续预训练

在已有 Base Model 上进行领域持续预训练时,可以选择 Full FT、LoRA 或 QLoRA。大规模领域迁移通常更偏向全量训练,资源受限时也可以使用 PEFT。

SFT

SFT 是 LoRA、QLoRA 最常见的应用场景:

指令数据 + SFT Loss + LoRA 参数更新
参数更新方式SFT 中的做法主要特点
Full FT更新全部模型权重参数自由度高,但训练显存和存储成本较高
LoRA冻结基座权重,只训练低秩 Adapter成本较低,是常见的参数高效 SFT 方案
QLoRA量化并冻结基座权重,只训练 LoRA Adapter进一步降低基座权重的显存占用

语境说明:在大模型应用和微调实践中,如果没有特别说明,“LoRA 微调”或“QLoRA 微调”通常指使用 LoRA、QLoRA 完成 SFT。这是一种常见的口语化表达,并不表示 LoRA、QLoRA 只能用于 SFT。严格来说,它们是参数更新方式,也可以与持续预训练、DPO、PPO、GRPO 等训练过程组合。

DPO、PPO 和 GRPO

偏好或强化学习训练也可以只更新 Policy 一侧的 LoRA Adapter,而不是更新全部 Policy 参数。不同算法中的模型角色需要分别处理:

  • DPO:通常更新 Policy Model,Reference Model 保持冻结;也存在不显式使用 Reference Model 的变体。
  • PPO:通常更新 Policy Model;Reference Model 和 Reward Model 一般保持冻结,Value Model 则需要训练或单独处理。
  • GRPO:通常更新 Policy Model,一般不需要独立的 Value Model;如果使用 Reference Model 计算 KL 约束,Reference Model 通常保持冻结,部分实现也可能采用无显式参考模型的方案。

因此,不能简单地说“所有组件都使用同一套 LoRA”。Full FT、LoRA、QLoRA 与 DPO、PPO、GRPO 在概念上可以组合,但具体可用性仍取决于训练框架、量化支持和模型组织方式。

5.2 常见误区

误区一:LoRA 就是 SFT

错误。LoRA 是参数更新方式,SFT 是训练过程。

误区二:LoRA 会让推理速度更快

错误。LoRA 主要降低训练和模型存储成本;合并后通常接近原模型推理路径,动态加载还可能增加少量开销。

误区三:QLoRA 就是把 LoRA 参数量化到 4-bit

错误。经典 QLoRA 量化并冻结的是预训练基座权重,LoRA Adapter 通常保持较高精度训练。

误区四:Rank 越大一定越好

错误。Rank 增大会提高容量和成本,但性能收益可能饱和,也可能增加过拟合风险。

误区五:PEFT 可以无条件替代 Full FT

错误。PEFT 是成本和效果之间的工程权衡,不同任务和数据规模需要实际评测。

六、总结

Full FT └─ 更新全部模型参数 LoRA └─ 冻结基座,训练低秩 Adapter QLoRA └─ 低比特量化并冻结基座,训练 LoRA Adapter

最重要的结论是:

训练阶段和参数更新策略属于不同维度。LoRA、QLoRA 不只能够用于 SFT,也可以用于持续预训练和偏好对齐,但是否适合需要结合具体工程条件判断。

参考资料

  • LoRA: Low-Rank Adaptation of Large Language Models
  • LoRA 官方代码
  • QLoRA: Efficient Finetuning of Quantized LLMs
  • Hugging Face PEFT:LoRA 开发指南
  • LoRA 作者报告
  • 个人 LoRA 论文阅读笔记

个人声明:本文为个人学习笔记,如有错误,欢迎指正。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询