你可以把 MoE 模型想成一家有许多专科窗口的办事大厅。每处理一个词,它只会叫来少数合适的“专家”。问题是,消费级显卡的显存通常装不下所有专家;把其余权重留给 CPU,又会因为设备间搬运和较慢的 CPU 计算拖低生成速度。
llama.cpp 的一项开放 PR #26563 换了个思路:不再静态决定哪些专家进入显存,而是观察模型运行时真正经常调用谁,把“热门专家”优先缓存到 GPU 显存,较少调用的专家继续由 CPU 执行。据 Reddit 帖子 BTA_Labs 对该 PR 测试结果的转述,在一个具体配置下,生成速度从 33.25 提高到 56.0 tok/s,增幅约 68%。这也是标题中“提速七成”的出处。需要先说清:目前所有效果数字都来自这一篇帖子对 PR 的转述,尚无第二个独立信源或跨设备测试支持。
显存座位,留给常客
MoE 是 Mixture of Experts,也就是“混合专家模型”。它虽然拥有许多组专家权重,但处理每个词元时,只挑其中少数几组参与计算。词元是模型读写文本的基本单位,不一定对应一个汉字或一个英文单词。
不同提示可能反复叫到不同专家。所谓 expert heatmap,可以理解为一张实时更新的点名统计表:哪位专家被选得多,热度就高。PR 根据这份统计,把高频专家缓存进容量有限但速度更快的 GPU 显存;冷门专家仍留在系统内存,由 CPU 处理。
这与常见的 CPU/GPU 混合卸载不同。混合卸载通常预先把一部分权重放进显存,其余交给 CPU。新方案关注的不是“先塞进去哪些”,而是“模型实际最常用哪些”。自动适配可通过参数 --expert-hot-s -1 启用。
关键收益来自少跑冤枉路。常用专家若留在显存,就不必频繁依赖较慢的 CPU 路径。不过,热度追踪和缓存管理本身也有成本。只有调用足够集中,节省下来的时间才可能覆盖这笔开销。
两种量化,两组明显提升
帖子给出的测试对象是 Qwen3.6-35B-A3B,显存为 8GB。量化是用更低精度保存模型权重,以较小的体积换取运行空间。不同量化格式会改变占用和速度,因此数字必须分开看。
在 Q2_M 格式下,解码速度从 33.25 升至 56.0 tok/s,即 1.68 倍,约提升 68%。在 Q5_K_P 格式下,则从 17.34 升至 35.93 tok/s,达到 2.07 倍,约提升 107%。tok/s 表示模型每秒生成多少个词元,适合比较同类测试,但不能直接理解为每秒读写多少个字。
第二组结果也提醒我们,“七成”不是这项技术的固定增幅。它只是 Q2_M 在这一模型、这一显存条件下的一次报告结果;换成另一量化格式,结果超过翻倍,换成另一些模型,甚至可能倒退。
真正有意思的是动态分配
这项尝试值得关注,不只是因为某个速度数字。它展示了一种更贴近实际负载的显存分配方式:当显存无法容纳全部专家时,不必平均对待它们,而可以根据运行中的调用热度,把有限的高速空间留给常客。
这为消费级显存下的 MoE 混合卸载提供了一个新方向。但现有材料还不足以证明它普遍适合消费级 GPU。Qwen3.5-122B-A10B 和 Laguna-S-2.1 开启 expert caching 后反而更慢,说明不同模型的专家调用分布和管理开销可能改变结果。它不是一个通用的“MoE 加速开关”。
局限与未知
- 当前实现仅支持 CUDA,而且只在 single-token decoding——逐个词元生成的阶段——生效。
- 缓存不同专家可能让输出略有变化;材料没有披露变化幅度及具体评测。
- PR #26563 在供稿材料记录时仍处于开放、尚未合并状态。现有材料也没有覆盖更多显卡、任务类型或长上下文场景,刊发前仍需复核其最新状态。