LoRA 微调:低秩适配

全量微调大模型需更新全部参数,显存与存储极高。LoRA(Low-Rank Adaptation)冻结预训练权重,在注意力等层旁路注入可训练的低秩矩阵,只优化这些小矩阵,显存与存储大幅下降。

低秩分解

对权重矩阵 W(维度 d×d),LoRA 不更新 W,而是学 B×A,其中 A 为 d×r、B 为 r×d,r 远小于 d(如 8)。前向为 h = Wx + BAx,训练只更新 A、B,参数量从 d² 降到 2dr。

from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")
cfg = LoraConfig(r=8, lora_alpha=16, target_modules=["q_proj","v_proj"])
model = get_peft_model(model, cfg)          # 仅训练 LoRA 参数
model.print_trainable_parameters()          # 可训练参数通常 <1%

优点与用法

LoRA 训练快、可把适配器单独保存复用,一个基座挂多个任务适配器。r 与 alpha 控制容量,目标模块常选 q/v 投影。它适合资源受限下的领域适配。

小结

LoRA 用低秩矩阵旁路替代全量更新,以极小可训练参数量完成微调,显存省、适配器可插拔,是主流高效微调方法。

参考与延伸阅读

本文累计阅读