当前位置: 首页 > news >正文

SFT LoRA 微调时训练 embed_tokens + lm_head 对速度的影响 embedding 对 ChatGLM / Qwen / Baichuan 对生成质量影响巨大

SFT LoRA 微调时训练 embed_tokens + lm_head 对速度的影响

结论:会影响速度,会变慢,但幅度通常可控,不是断崖式下跌

我给你用最直白、最落地的方式讲清楚为什么变慢、慢多少、怎么影响、要不要开


1. 先搞清楚:这两个层是什么

LoRA 原本只训练transformer 块里的 Q/K/V/O 投影层,不碰模型头尾:

  • embed_tokens词嵌入层,把 token ID 转成向量
  • lm_head语言模型头,把向量转回 token 概率(和 embedding 层权重通常共享)

这两个层不在 LoRA 默认训练范围里,属于全量参数训练(不是 LoRA 小矩阵)。


2. 为什么会变慢?(核心原因)

开启additional_target: embed_tokens,lm_head后:

① 参与训练的参数量突然变多

LoRA 通常只训练0.1%~1%参数
加上这两层后,训练参数会变成:
LoRA 参数 + 词表大小 × 隐藏层维度(几十万~几亿参数)

比如 7B 模型:

  • vocab_size = 32000
  • hidden_size = 4096
  • embed_tokens + lm_head ≈2.5 亿参数

比 LoRA 本身大几十~几百倍。

② 计算量 + 显存占用上升

  • 前向传播:多算 embedding + lm_head
  • 反向传播:全量梯度回传(不是 LoRA 低秩)
  • 优化器状态(AdamW)也要存这两层的参数 →显存变高
  • 显存紧张 → batch size 被迫减小 →速度进一步下降

3. 实际速度下降多少?(真实场景)

我给你一个工业界实测区间(7B/13B 模型,单卡/多卡 Lora 训练):

只训练 LoRA(默认)

  • 速度:100%
  • 显存:低

LoRA + embed_tokens + lm_head

  • 速度通常下降:15% ~ 40%
  • 显存上升:20%~60%

影响大小取决于:

  • 词表大小(越大越慢)
  • 显卡显存大小(显存越小越容易爆,越慢)
  • batch size / sequence length

典型表现:
原本每秒 3-5 iter → 变成 2-3.5 iter


4. 为什么大家还是会打开它?(非常重要)

虽然变慢,但必须打开的场景:

✅ 你新增了词表 / 中文词表扩充

embed_tokens 维度变了,不训练就完全不生效

✅ 你做领域微调(医学/法律/代码)

lm_head 是输出层,不训练会导致生成效果差

✅ 你用的是 ChatGLM / Qwen / Baichuan 这类中文模型

这些模型 embedding 和 lm_head 对生成质量影响巨大


5. 能不能只开一个?

可以,而且推荐这样做,能提速很多:

方案 A(最常用、速度最快)

additional_target: lm_head

只训练输出层,不训练 embedding
速度下降<15%,效果几乎一样

方案 B(必须扩充词表才用)

additional_target: embed_tokens,lm_head

6. 如何减少速度影响?(实用优化)

如果你必须训练这两层,可以这样提速:

  1. 不要用太高的学习率(这两层收敛很快)
  2. LoRA rank 不要太大(8/16 足够)
  3. 使用bf16 / fp16
  4. 使用gradient checkpointing
  5. 不要开太高 batch size

最终总结(最关键)

  1. 训练 embed_tokens + lm_head 一定会变慢,幅度 15%~40%
  2. 慢的原因是参数量暴增、显存变高
  3. 大多数场景只需要训练 lm_head 就够了,速度影响很小
  4. 只有扩充词表时才需要同时开两个

需要我帮你根据你的模型(7B/13B/34B)+ 显卡(4090/A10/A100)给出最优配置吗?我可以直接给你能复制的 LoRA 最佳参数。

http://www.jsqmd.com/news/794050/

相关文章:

  • AMD Ryzen终极性能调优秘籍:5个高效调试技巧让你完全掌控处理器性能
  • AI编码助手技能库:结构化提示词提升开发效率与代码质量
  • 一个进程最多可以创建多少个线程?
  • 实验室显卡与本机远程连接复盘:直连SSH到ZeroTier
  • OpenClaw工作空间管理工具:自动化配置维护与AI Agent开发效率提升
  • 车载语音助手早期集成:蓝牙连接与物理按键的安全设计哲学
  • XYBot V2:基于Python的插件化微信机器人框架开发与部署指南
  • 太空采矿的工程挑战:从月球氦-3到小行星资源开采的现实路径
  • Vue 3 + TypeScript + Vite 实战:从零模仿腾讯QClaw前端架构
  • 线程崩溃了,进程也会崩溃吗?
  • 【SITS 2026 MLOps权威白皮书】:首次公开AI原生模型全生命周期管理的7大核心范式与3类不可逆风险规避指南
  • VGG改进(24):基于Deformable Convolution网络改进
  • 芯片功能验证的范式革新:从约束随机到目标驱动的智能场景生成
  • openclaw手机版安装直连方法_Topclaw完全免费使用!
  • 本地部署YakGPT:打造私有化ChatGPT前端,实现语音交互与数据安全
  • EDA技术博客写作指南:从内容创作到平台分发的实战策略
  • 中介设计模式
  • 【领域驱动设计 开篇】零 来源及学习路径
  • 视觉语言模型心智理论评估:意图理解与视角采样的能力分离现象
  • IMMACULATE框架:黑盒LLM服务的可验证审计技术
  • EDA技术演进全景:从物理验证到AI驱动的设计自动化
  • 示波器有效位数(ENOB)实战指南:从原理到选型与应用
  • IoT设备无线通信合规测试全解析
  • Oracle诉Google案:API版权与合理使用对软件互操作性的深远影响
  • 从苹果三星2016年困境看消费电子行业创新与供应链管理
  • 树莓派创意相机实战:从图像处理到嵌入式系统集成
  • DevSquad:一体化开发者工具箱,提升本地开发与调试效率
  • 数据库安全与权限管理详解
  • 《Java面试85题图解版(二)》进阶深化下篇:Redis缓存
  • 观察使用Token Plan套餐后月度AI调用成本的变化趋势