AI Pulse

训练多占6GB内存,换来能拆下来单独跑的影子模型

训练多占6GB内存,换来能拆下来单独跑的影子模型

PEFT 里来了个影子

ShadowPEFT 进了 Hugging Face 的 PEFT 库,和 LoRA 一样是一等方法。两者共用 get_peft_model 入口,适配器的保存和加载路径也相同。做法上是两条路。LoRA 把适配参数写进权重内部,训练完合并了事。ShadowPEFT 是独立网络,训练完用 unload_shadow() 拆下来。

影子怎么工作

具体做法是每个 Transformer 层旁边挂一个独立小网络。影子带有持久隐藏状态,从第一层跑到最后一层。每层执行注入、编码、更新三个动作。它有自己的预测头,训练时直接接收任务监督,不是一个只能依附主模型的附件。

影子模型本身就是个完整的小模型,初始化可以直接借现成的。用 Qwen-0.5B 给 Qwen-8B 当影子就行。配置 shadow_model="mirror“ 会自动构建基础模型的缩小版。也可以直接传检查点路径,比如 Qwen3-8B 配 ”shadow-llm/Qwen3-0.6B-H8B"。从现成小模型起步,通常收敛更快、效果更好。

简单请求留在本地

能拆开,就能部署成两层。紧凑的影子模型在本地处理简单请求,难一点的转发给云端大模型。简单请求不出本地,响应快,也省得传数据。

两份成绩单

论文拿它跟 LoRA、DoRA 做了两组对照。

数学推理用 MetaMathQA 训练、GSM8K 测试。ShadowPEFT 准确率 48.1%,LoRA 46.9%,DoRA 46.2%。可训练参数也更少:8.66M,对比 LoRA 的 9.18M 和 DoRA 的 9.29M。

图像生成跑的是 DreamBooth。ShadowPEFT 各项指标领先:DINO 相似度 0.717(LoRA 0.671,DoRA 0.682)。漂移 0.244(LoRA 0.274,DoRA 0.250)。训练只要 8 分钟,LoRA 10 分钟,DoRA 17 分钟。检查点 74.5 MB,LoRA 153 MB,DoRA 157 MB。

生成的图也更自然。LoRA 和 DoRA 常在主物体周围留一圈白边,ShadowPEFT 不会。它更懂提示词的语义:橙色猫的毛色、纹理都自然,背景融合也平滑。

训练时更费内存

代价在训练阶段:峰值内存 28.2 GB,比 LoRA 的 22.3 GB 高。原因是阴影骨干要对每个 token 跑一次前向传播,还要维护双份 KV 缓存。好在检查点只有 26 MB,LoRA 是 36.7 MB。可训练参数大多落在阴影骨干上,注入秩 r 决定不了总体参数预算。

现在就能用

ShadowPEFT 已经合入 PEFT 库,随 v0.21.0 发布。更新命令就是 pip install --upgrade peft。默认设置跟 LoRA 有几处不同。目标模块上,LoRA 对准注意力投影,ShadowPEFT 覆盖每个连续的 decoder 块。shadow_alpha 默认 0.1,建议在 0.1 到 1.0 之间,调太大早期训练容易崩。shadow_dropout 默认 0.2,可以往 0.5 调,高一点能防遗忘。论文编号 arXiv 2604.19254,2026 年。

还剩什么

论文目前报告的是数学推理和图像生成两类实验。训练时多占的内存,换来更小的检查点和能拆走的影子模型。影子模型能单独跑,单独跑的表现如何,论文没有给数字。

阅读原文
📚 相关主题 大语言模型微调

订阅 AI Pulse

每天 08:00 · 12:30 · 18:30 · 23:50 更新