跳转到内容

输入关键词开始搜索

    资料摘要:personal chatgpt 24 — peft LoRA merge pipeline(lora inject,svd)

    视频摘要更新 2026-08-02置信度 high待阅读原始来源 ↗#深度#大模型#课程#personal-chatgpt

    本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列

    本讲不再只解释 LoRA 的低秩公式,而是沿 PEFT 源码和 TinyLlama 实例走完完整生命周期:把 LoRA 分支注入原模型、仅训练 adapter 参数、保存 adapter state dict、在多个 adapter 间切换、执行推理,以及把低秩增量 merge 回基础权重。课程另用 SVD/from-scratch notebook 连接 LoRA 的低秩近似直觉。

    第一个 notebook 构造包含 embedding、linear 和 LM head 的小模型,再调用 PEFT API 注入 adapter。注入后,目标 Linear 不再只是原始 WxWx,而是多一条 LoRA A→B 分支:

    y=Wx+αrBAxy=Wx+\frac{\alpha}{r}BAx

    • 基础权重 WW 冻结;
    • ARr×dinA\in\mathbb R^{r\times d_{in}}BRdout×rB\in\mathbb R^{d_{out}\times r} 可训练;
    • target_modules 决定哪些层被替换/包裹。

    课程源码跟踪强调:LoRA A 通常随机初始化,LoRA B 初始为零,因此训练开始时 BA=0BA=0,模型行为与底座一致。缩放系数通常为:

    scaling=αr\text{scaling}=\frac{\alpha}{r}

    fan_in_fan_out 用来适配不同线性层的权重存储方向,不能只看变量名推断 shape。

    课程查看 get_peft_model_state_dict,说明保存结果只包含 LoRA 等 adapter 参数,而不是整份基础模型。这样 checkpoint 很小,但恢复时必须同时拥有与训练时匹配的 base model、结构和 target modules。

    第二部分在 TinyLlama 上构造多个 adapter,用不同指令数据训练,并演示:

    • add_adapter:增加新的 adapter;
    • set_adapter:选择当前生效/训练的 adapter;
    • disable_adapter:暂时只用基础模型;
    • 同一底座上保留多个任务 adapter,并在推理时切换。

    课程示例涉及广告/指令到 SQL 等小任务,重点是 API 与参数管理,不是证明这些小数据已得到稳定泛化。

    merge 的权重计算:

    Wmerged=W+αrBAW_{merged}=W+\frac{\alpha}{r}BA

    合并后前向不再需要独立 LoRA 分支,部署更直接;但会失去轻量切换 adapter 的便利。lora_svd_basics.ipynb 还从 SVD 角度展示用截断低秩矩阵近似权重变化,作为 LoRA “低内在秩”假设的数学背景,而非 PEFT 训练必做步骤。

    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)约为:

    r(din+dout)r(d_{in}+d_{out})

    相对完整矩阵 doutdind_{out}d_{in},当 rmin(din,dout)r\ll\min(d_{in},d_{out}) 时显著减少。

    • 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/r scaling 与 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 版本。
    • 前接第 2–4 讲及相关数学课:早期已讲 LoRA 基础、PEFT 与 SVD;本讲补齐工程生命周期。
    • 后续关联第 23 讲:Reward Model notebook 同样用 LoRA 降低可训练参数量。
    • 后接第 25 讲:从参数高效微调转向 Llama 3 模型架构与源码。
    1. 为什么常把 LoRA B 初始化为零?
    2. lora_alpha/r 在前向中起什么作用?
    3. 只保存 adapter state dict 时,恢复模型还需要什么?
    4. multi-adapter 切换和 merge 部署各有什么取舍?
    5. LoRA 参数量为什么从 doutdind_{out}d_{in} 降为约 r(din+dout)r(d_{in}+d_{out})
    • 滴答清单抓取时学习状态:已完成
    • 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
    • notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。