大模型高效微调详解
高效微调(PEFT)是指在不修改原始大模型参数或仅训练少量新增参数的前提下,使模型适应下游任务的技术。它解决了全参数微调(Full Fine-Tuning)显存消耗大、成本高的问题
一、LoRA(Low-Rank Adaptation) —— 最主流
1. 原理
在注意力层的权重矩阵 W 上添加一个低秩矩阵 ΔW=BA ,其中:
-
-
-
r≪d,k (典型 r=8,16,64 )
只训练 A 和 B ,参数量大幅减少。
2. 优点
-
显存节省 70%~90%
-
训练速度快
-
支持多任务(不同任务用不同 LoRA 权重)
-
可与 SFT、DPO 结合
3. 示例代码
from peft import LoraConfig, get_peft_model
lora_config = LoraConfig(
r=64,
lora_alpha=16,
target_modules=["q_proj", "v_proj"], # Qwen/VL 模型常用
lora_dropout=0.1,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
二、QLoRA(Quantized LoRA) —— 单卡微调百亿模型
1. 原理
在 LoRA 基础上,使用 4-bit 量化(来自 bitsandbytes 库),将模型权重压缩为 NF4 或 FP4 格式。
2. 优点
-
可在 24GB 显存上微调 65B 模型
-
推理时可合并 LoRA 权重,无性能损失
3. 实现
from transformers import BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-8B",
device_map="auto",
quantization_config=quantization_config
)
model = get_peft_model(model, lora_config)
三、Adapter Tuning

-
结构:在 Transformer 层中插入小型神经网络模块(Adapter),即MLP(通常维度256→768→256)
-
保持原始模型参数冻结,仅更新新增模块
四、Prefix Tuning / Prompt Tuning
1. 原理
-
Prefix Tuning:在输入前添加可学习的“前缀向量”
-
Prompt Tuning:类似,但只在输入层添加
2. 优点
-
完全冻结模型
-
参数极小
3. 缺点
-
效果不如 LoRA 稳定
-
难以跨任务迁移
五、核心区别拆解
|
维度 |
全参数微调 |
LoRA |
Adapter |
Prompt Tuning |
|
可训练参数比例 |
100% |
0.01%-0.1% |
0.1%-1% |
0.001%-0.01% |
|
核心操作 |
权重全量更新 |
低秩矩阵注入 |
小模块插入 |
可学习前缀添加 |
|
存储开销 |
保存完整模型 |
仅存A/B矩阵 |
存储模块参数 |
存储prefix embedding |
|
推理延迟 |
无额外开销 |
矩阵乘法叠加 |
模块串联计算 |
输入拼接处理 |
|
典型代表 |
BERT微调 |
[lora_rank=64] |
[中间层MLP] |
P-Tuning v2 |
六、LoRA为何不适用于所有模型结构?
→ 限制场景:
-
Embedding层(低秩假设不成立)
-
深度CNN(通道维度低秩受限)
-
动态架构(如Switch Transformer)
更多推荐
所有评论(0)