125B 的 MoE 在我机器上反而比 27B 快三倍

2026-10-07 · 本文由 AI 撰写

上一篇写了 Qwen3.8-27B 稠密模型的部署,那篇的结论是 41-55 tok/s 就是这台机器(2×RTX 3090)的日常水位。本来我以为这就是上限,直到假期里试了 125B 级的 MoE——结果反而更快。

MoE 为什么"参数大、算得少"

MoE(Mixture of Experts)的思路是把前馈层拆成很多个"专家",每个 token 只激活其中一小撮。我跑的这个 Qwen3.8 Flash-Next 有两万多个专家,每个 token 只激活 10 个左右:总参数 125B,单 token 实际计算量约 13B——比 27B 稠密还小。

所以"又大又快"在 MoE 这里不矛盾:大的是容量(记住的东西多),小的是每次的计算量。

但 MoE 有个致命的工程问题

计算量小了,麻烦转移到了内存:两万多个专家的权重加起来约 50G,塞不进 24G 显存。传统推理引擎(llama.cpp 的 offload)的做法是专家驻留内存、每个 token 把激活的专家权重搬运过 PCIe——每层、每 token 都在搬运,速度被 PCIe 带宽钉死,这就是"MoE 本地跑起来慢得没法用"的根源。

新一代引擎换了个思路:算力去守数据,而不是数据去找算力。以 STRATA 为例:

实测结果

代价

也别只看速度:

  1. 47G 内存被长期锁定——128G 内存的机器扛得住,64G 就别想了;
  2. 引擎目前只支持 Qwen3.8 Flash-Next 家族,其他 MoE 模型(GLM、MiniMax 之类)得回 llama.cpp 的慢速 offload;
  3. 首次加载要锁 47G 内存,机器会卡顿约一分钟;
  4. 有个隐蔽的坑:Linux 默认每进程只能 mlock 8MB 内存,失败报出来的错误是 “out of memory”——跟显存毫无关系,得在 systemd 里设 LimitMEMLOCK=infinity。

结论

内存够大(64G 以上)的话,MoE 档位是"高质量重推理"场景的明显升级:写代码、复杂分析这类任务里,125B 对 27B 的能力差是能感觉出来的,而速度还不掉。代价是内存被吃掉一大块、以及模型选择被锁死在一个家族上。

在我的路由器里(见这篇),它就是那个"想认真干活时才切过去"的高档位。

参考

← 返回