ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

27届大模型面试准备(十八):LoRA 与 PEFT 全攻略——低秩适配、QLoRA、省显存微调全家桶

27届大模型面试准备(十八):LoRA 与 PEFT 全攻略——低秩适配、QLoRA、省显存微调全家桶 27届大模型面试准备十八LoRA 与 PEFT 全攻略——低秩适配、QLoRA、省显存微调全家桶上一篇《分布式训练全攻略》讲了怎么把大模型训起来但那是实验室/大厂的事——普通人没有几百张卡。这一篇讲普通人怎么低成本微调大模型PEFT参数高效微调家族重点是 LoRA 及其升级 QLoRA外加 Adapter、Prefix/Prompt Tuning 等兄弟方法。每节给原理 → 数学 → 代码 → 面试速答 高频追问。配合 A16后训练看刚好串成全量 SFT → 高效 LoRA 微调的完整选择。一、为什么需要 PEFT全量微调太贵了全量微调Full Fine-Tuning要把模型所有参数都更新一遍7B 全量微调: 训练显存 ≈ 56 GB见 A17 估算 → 至少 1 张 80G A100 70B 全量微调: ≈ 560 GB → 多机多卡才够 且每来一个下游任务就要存一份完整模型副本70B ≈ 140GB/份PEFT 的核心思想冻结主干只训练极少量新增/旁支参数显存和存储都骤降效果却接近全量。全量微调: 更新 ΔW (全部参数) 显存大、存多份 PEFT: 只更新少量参数 θ_peft 显存小、一份底座多份小适配器二、LoRA低秩适配Low-Rank Adaptation2.1 核心假设预训练模型在适配下游任务时权重的变化量 ΔW 具有低内在秩——可以用两个小矩阵的乘积近似原始: W ∈ R^(d×k) (冻结不更新) LoRA: W W ΔW W B·A 其中 A ∈ R^(r×k), B ∈ R^(d×r), 秩 r ≪ min(d,k) 只训练 A、B可训练参数从 d×k 降到 r×(dk)例dk4096r8 → 原参数 1677 万LoRA 参数仅 65536是原来的0.4%。2.2 前向怎么算h W·x ΔW·x W·x B·(A·x) # W 冻结BA 可训练训练时只更新 A、B推理时可把 B·A 合并回 W无额外延迟也可保持分离便于切换多个适配器。2.3 HuggingFace PEFT 最小代码frompeftimportLoraConfig,get_peft_modelfromtransformersimportAutoModelForCausalLMmodelAutoModelForCausalLM.from_pretrained(Qwen/Qwen2.5-7B)cfgLoraConfig(r8,# 秩lora_alpha16,# 缩放系数等效学习率放大target_modules[q_proj,v_proj],# 只在 Q、V 投影上加 LoRAlora_dropout0.05,biasnone,task_typeCAUSAL_LM,)modelget_peft_model(model,cfg)model.print_trainable_parameters()# 仅约 0.4% 参数可训练面试速答LoRA 为什么省显存因为冻结了底座 W不用存它的优化器状态和梯度只给低秩矩阵 A、B 建优化器状态显存从参数×8骤降到低秩参数×8且可训练参数极少。高频追问1. r 越大越好吗不是r 太大趋近于全量、失去 PEFT 意义太小可能欠拟合。常用 8/16/32/64。2. 为什么常加在 Q、V 而不是全部经验上 Q/V 投影对任务适配贡献大、效果好全加会增加参数和计算。3. lora_alpha 干什么对 ΔW 做缩放ΔW · alpha/r相当于调节适配器影响强度。三、QLoRA把 LoRA 塞进一张消费级显卡QLoRAQuantized LoRA在 LoRA 基础上做两件事让 65B 模型也能在单张 48GB 卡上微调4-bit NF4 量化底座用 NormalFloat4 把冻结的主干压到 4-bit显存再砍一大截。双量化 分页优化器对量化常数再量化、用分页避免显存峰值 OOM。QLoRA 4-bit 量化基座(冻结) 普通 LoRA(可训练) 效果: 65B 模型单卡 48GB 可微调效果接近 16-bit 全量 LoRAfromtransformersimportBitsAndBytesConfigbnbBitsAndBytesConfig(load_in_4bitTrue,bnb_4bit_quant_typenf4,bnb_4bit_compute_dtypebfloat16)modelAutoModelForCausalLM.from_pretrained(meta-llama/Llama-2-70b,quantization_configbnb,device_mapauto)# 再在其上挂 LoraConfig 即可面试速答QLoRA 相比 LoRA 多了什么多了 4-bit 量化基座NF4 双量化 分页优化器把可训练参数之外的底座驻留显存也压下去使得大模型能在消费级显卡微调。四、PEFT 家族其他成员方法做法可训练参数位置特点Adapter在层间插入小瓶颈层旁支 MLP早期经典略有推理延迟Prefix Tuning在输入前加可训练前缀向量软提示前缀不改模型结构Prompt Tuning只调输入的虚拟 token 嵌入软提示极简但难训大模型(IA)³学三个缩放向量乘激活乘性向量参数极少LoRA / QLoRA低秩分解 ΔWA、B 矩阵当前最主流LoRA 胜出原因不引入推理延迟可合并、效果稳、实现简单、生态成熟。五、工程实践多人多任务怎么管LoRA 的最大工程优势是底座共享、适配器热插拔base (70B, 一份) ├── lora_taskA.bin (几十 MB) ├── lora_taskB.bin └── lora_taskC.bin 推理时按需加载某一适配器无需复制整模型PEFT 还支持适配器合并 / 加权融合merge_and_unload、add_weighted_adapter把多个 LoRA 按比例融合成一个。面试速答多个 LoRA 怎么共存底座冻结共享每个任务训一个轻量 LoRA 文件MB 级部署时按请求动态加载对应适配器或加权融合多个。六、面试速答 高频追问清单汇总速答 TOP 81. PEFT 冻结主干 训少量参数省显存省存储。2. LoRA: ΔW B·A只训低秩 A/B可训练参数降至 1%。3. r 控制秩alpha 缩放适配器影响常加在 Q/V。4. QLoRA 4-bit NF4 基座 双量化 分页优化器。5. LoRA 推理可合并无延迟QLoRA 主要省的是底座驻留显存。6. Adapter/Prefix/Prompt 是兄弟方法LoRA 因无延迟稳定成主流。7. 多任务用底座共享 适配器热插拔。8. rank 不是越大越好需权衡。追问清单- LoRA 和全量微调的效果差距通常在哪些任务上明显- 为什么 LoRA 常加在 attention 的 Q/V 而非 FFN- QLoRA 的 NF4 相比 INT4 好在哪- 多个 LoRA 加权融合时alpha 要不要一起融合- 推理时合并 LoRA 和不合并精度有差别吗七、选型决策树到底用哪种微调面试常被问给我一个场景你选全量还是 LoRA 还是 QLoRA给一张可复述的决策树任务钱/卡够吗 / \ 够(多卡A100) 不够(单卡/消费级) | | 全量 SFT 效果上限最高 底座多大 / \ ≤13B 13B(如70B) | | LoRA(16bit) QLoRA(4bit基座) 要极致效果且数据多 要跑得动且效果接近再补一句工程经验绝大多数业务微调客服、分类、特定风格用 LoRA(r16/32) 就够了只有当你发现 LoRA 怎么调都不如全量时才上全量或加大 r。QLoRA 是先跑起来的默认选项之后再视效果升级。速答补充怎么判断 LoRA 训到位了看验证集 loss 平稳下降且下游指标达标若欠拟合train loss 仍高就加大 r 或放宽 target_modules若过拟合val 掉就加 lora_dropout 或减 r。7.1 常见翻车现场与排错现象可能原因排查/修复loss 不降学习率太小 / lora_alpha 太小调大 alpha 或 lr确认只冻结底座输出乱码4-bit 基座量化误差累积换 8-bit 或 NF4双量化减小 batch灾难性遗忘rank 过大逼近全量但数据少减小 r或混入通用数据 replay显存仍爆优化器状态梯度没省掉确认开启 gradient_checkpointing 用 PEFT 而非手动多适配器冲突融合时 alpha 未归一并缩放用 add_weighted_adapter 且传 weights 归一一句经验先用 QLoRA(r16) 跑通一条端到端 pipeline再谈调参很多人卡在显存而非效果 pipeline 跑通后 80% 的问题就消失了。八、下一篇预告PEFT 讲完低成本微调A 系列可以进入A19 量化W8A8/GPTQ/AWQ 推理侧压缩或A20 评测基准、刷榜、能力诊断。如果你更想看智能体侧B17/B18 已经就位。评论区告诉我优先级。
返回列表