资料摘要:personal chatgpt 24 — peft LoRA merge pipeline(lora inject,svd)
本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列。
本讲不再只解释 LoRA 的低秩公式,而是沿 PEFT 源码和 TinyLlama 实例走完完整生命周期:把 LoRA 分支注入原模型、仅训练 adapter 参数、保存 adapter state dict、在多个 adapter 间切换、执行推理,以及把低秩增量 merge 回基础权重。课程另用 SVD/from-scratch notebook 连接 LoRA 的低秩近似直觉。
1. 在 Dummy Model 中注入 LoRA
Section titled “1. 在 Dummy Model 中注入 LoRA”第一个 notebook 构造包含 embedding、linear 和 LM head 的小模型,再调用 PEFT API 注入 adapter。注入后,目标 Linear 不再只是原始 ,而是多一条 LoRA A→B 分支:
- 基础权重 冻结;
- 、 可训练;
target_modules决定哪些层被替换/包裹。
2. 初始化与 scaling
Section titled “2. 初始化与 scaling”课程源码跟踪强调:LoRA A 通常随机初始化,LoRA B 初始为零,因此训练开始时 ,模型行为与底座一致。缩放系数通常为:
fan_in_fan_out 用来适配不同线性层的权重存储方向,不能只看变量名推断 shape。
3. 保存与恢复 adapter
Section titled “3. 保存与恢复 adapter”课程查看 get_peft_model_state_dict,说明保存结果只包含 LoRA 等 adapter 参数,而不是整份基础模型。这样 checkpoint 很小,但恢复时必须同时拥有与训练时匹配的 base model、结构和 target modules。
4. TinyLlama 实例与多 adapter
Section titled “4. TinyLlama 实例与多 adapter”第二部分在 TinyLlama 上构造多个 adapter,用不同指令数据训练,并演示:
add_adapter:增加新的 adapter;set_adapter:选择当前生效/训练的 adapter;disable_adapter:暂时只用基础模型;- 同一底座上保留多个任务 adapter,并在推理时切换。
课程示例涉及广告/指令到 SQL 等小任务,重点是 API 与参数管理,不是证明这些小数据已得到稳定泛化。
5. Merge 与低秩近似
Section titled “5. Merge 与低秩近似”merge 的权重计算:
合并后前向不再需要独立 LoRA 分支,部署更直接;但会失去轻量切换 adapter 的便利。lora_svd_basics.ipynb 还从 SVD 角度展示用截断低秩矩阵近似权重变化,作为 LoRA “低内在秩”假设的数学背景,而非 PEFT 训练必做步骤。
公式 / 代码要点
Section titled “公式 / 代码要点”config = LoraConfig( r=r, lora_alpha=alpha, target_modules=[...], lora_dropout=...,)model = get_peft_model(model, config)model.set_adapter("task_a")merged = model.merge_and_unload()可训练参数量(忽略 bias)约为:
相对完整矩阵 ,当 时显著减少。
00:00:连接上一讲 LoRA merge 与 SVD 背景。00:59:说明本讲包含注入源码与完整 LoRA pipeline。01:29:构造 Dummy Model 并查看前向 shape。04:31:查看仅保存 LoRA 参数的 state dict。05:01:结束注入部分,转入 LoRA 配置详解。06:01:解释lora_alpha/rscaling 与 shape 方向。08:27:进入 TinyLlama 实例。10:48:显示同一底座上的三个 adapter。13:43:进入 from-scratch 低秩/训练示例。17:25:再次以 from-scratch 路径验证低秩更新。20:31:演示 LoRA merge。
- 三个 notebook 分别覆盖注入、SVD/低秩基础和 merge;不要把其中的随机小矩阵结果当作真实 LLM 质量结论。
- TinyLlama 与示例数据用于 API 教学,训练轮数、样本量和任务划分不足以支撑生产效果声明。
- merge 前必须确认 adapter 与 base model 完全匹配;merge 后通常不便继续独立切换该 adapter。
- PEFT API 与 state-dict key 命名会随版本变化,复现时应锁定
peft/transformers版本。
与前后讲关系
Section titled “与前后讲关系”- 前接第 2–4 讲及相关数学课:早期已讲 LoRA 基础、PEFT 与 SVD;本讲补齐工程生命周期。
- 后续关联第 23 讲:Reward Model notebook 同样用 LoRA 降低可训练参数量。
- 后接第 25 讲:从参数高效微调转向 Llama 3 模型架构与源码。
- 为什么常把 LoRA B 初始化为零?
lora_alpha/r在前向中起什么作用?- 只保存 adapter state dict 时,恢复模型还需要什么?
- multi-adapter 切换和 merge 部署各有什么取舍?
- LoRA 参数量为什么从 降为约 ?
- 视频:peft LoRA merge pipeline(lora inject,svd)
- 转录:🔒 personal chatgpt 24 视频转录
- 课件 / 代码:🔒 lora_inject.ipynb
- 课件 / 代码:🔒 lora_merge.ipynb
- 课件 / 代码:🔒 lora_svd_basics.ipynb
- 视频描述中的补充资料:https://www.bilibili.com/video/BV1u54y12766/
- 视频描述中的补充资料:https://www.bilibili.com/video/BV1XK421a75H/
- 视频描述中的补充资料:https://www.bilibili.com/video/BV15T411477N/
- 视频描述中的补充资料:https://www.bilibili.com/video/BV1sV4y1z7uS/
- 滴答清单抓取时学习状态:已完成。
- 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
- notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。