AI Pulse

作者用RTX 4060改密集模型为MoE:算力省六成,质量掉一两成

过去几周,我一直在尝试将现有的密集模型转换为稀疏混合专家(Mixture-of-Experts)模型,且无需从头预训练。

核心思路

如果你能把一个密集模型变成每 token 只运行其 MLP 一部分的 MoE,你就能得到一个每 token 更便宜、知识量大致相同的模型。大型实验室会用巨额算力预算做这种“升级再造”(upcycling)。我想看看用我的 RTX 4060(8GB)能做到什么程度。

转换工作

到目前为止,我已转换了两个模型:Qwen/Qwen2.5-0.5B 和 HuggingFaceTB/SmolLM2-360M(它们特意选得比较小,因为我的电脑跑不了更大的)。转换后的模型可以在这里找到:bayliner1980/Qwen2.5-0.5B-MoE-A0.3B 和 bayliner1980/SmolLM2-360M-MoE-A0.2B。

两个模型都有 32 个专家,取 top-8,外加一个共享专家。最难转换的层(最后一层,以及 SmolLM2 的第 3 层)被替换回了它们原来的密集层。这确实会让 MLP 计算量略有增加,但我认为这是值得的。bayliner1980/Qwen2.5-0.5B-MoE-A0.3B 在第 23 层有一个密集层,bayliner1980/SmolLM2-360M-MoE-A0.2B 在第 3 层和第 31 层各有一个。两个模型都导出为 Qwen2-MoE 格式。

评测结果

bayliner1980/Qwen2.5-0.5B-MoE-A0.3B

每 token MLP 计算量:约为原来的 40%

-WikiText-2 pplC4 ppl
Qwen2.5-0.5B(密集)14.6621.29
Qwen2.5-0.5B-A0.3B(MoE)19.2028.97
-HellaSwag (norm)ARC-Easy (acc)ARC-Challenge (norm)WinoGrandeOpenBookQA (norm)Mean acc_norm
密集0.4970.6460.3210.5690.3540.467
转换后 MoE0.4400.5550.2650.5190.3080.408

bayliner1980/SmolLM2-360M-MoE-A0.2B

每 token MLP 计算量:约为原来的 44%

-WikiText-2 pplC4 ppl
密集12.9418.09
转换后 MoE19.1126.50
-HellaSwag (norm)ARC-Easy (acc)ARC-Challenge (norm)WinoGrandeOpenBookQA (norm)Mean acc_norm
密集0.5250.7020.3860.5900.3740.514
转换后 MoE0.4460.5790.2900.5060.3160.417

局限性

质量上很可能始终会存在差距。由于模型最多只使用原来 MLP 计算量的 50%,它无法与原始模型竞争。

在这个规模下,性能提升几乎可以忽略不计,因为这些模型本身已经很小了。选择这些模型是因为它们足够小,我才能在自家硬件上实际跑得动。

下一步计划

转换更大的模型、更长时间的训练,以及测试更精细的专家布局。更大的模型需要的算力超过我这块显卡能提供的,所以如果你觉得这个有意思,模型页面上有 Ko-fi 链接,任何新成果都会公开发布。

这主要只是一个我觉得挺有意思的实验,但我依然很乐意听到反馈。你希望接下来看到哪个模型被转换?

—— 高票评论(帖子共 33 条讨论)——

[+30] u/Chromix_:你的 MoE 化改造结果似乎与最近这里分享的 ToMoE 论文一致。你是用了那种方法,还是自己想了些别的办法?

[+20] u/ByteSize_Chaos:如果有人能对 Qwen 3.8 27B 做这个,那将是天大的福音!Qwen 4 也一样,因为我们对 35B A3B 已经不抱希望了。这项努力或许能填补这个空白 🙏🏻

[+11] u/Juan_Valadez:https://huggingface.co/Nichonauta/models

[+11] u/TomLucidor:如果你真的想做升级再造,去看看 longcat-flash-lite,然后也许可以在保持当前激活参数量不变的情况下把总参数量增加 50%……或者增加总参数并减少激活参数,还可以试试 N-gram 嵌入。

[+5] u/Silver-Champion-4846:Qwen3.8 27B 在 32GB DDR4 内存上跑?

[+4] u/Open-Adhesiveness-86:在相信困惑度数字之前,值得检查一下每一层的专家负载分布。被升级再造的路由器往往会早早坍缩到少数几个专家上,再加上共享专家吸收了常见情况,你可能会得到还不错的困惑度,但 32 个专家中有 20 个几乎从不被触发,这意味着你在为不干活的参数买单。对几千个 token 记录每个专家的 token 计数通常就能让问题变得显而易见;一点辅助损失,或者仅仅是把路由器的初始化噪声调大一些,都会有帮助。

[+2] u/ab0zar:表格让质量权衡一目了然。在扩大规模之前,我会在同一个基础模型上改变每 token 运行的专家数量,并比较质量与计算量。这可以表明不同的路由设置是否能在不需要更大 GPU 的情况下保留更多质量。

[+2] u/Optimal-Share-9563:明白了。这个过程会消耗大量算力吗,像微调那样,还是更像量化?

[+2] u/devangm:Gemma 4 E4B

这是一个很棒的小模型,能在 16GB 内存的笔记本上跑,但在 8GB 上有些勉强。如果你能做到这一点,那将为本地大语言模型(Local LMs)打开很多可能性。

[+1] u/Sweet-Jump1024:RemindMe! 1 day

阅读原文
📚 相关主题 大模型研究

订阅 AI Pulse

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