引用局部性助力 94GB 的 Qwen3.8-Flash-Next 在单张 RTX 5090 上以每秒 68 个 token 的速度运行

Reddit r/artificial 新闻

摘要

llama.cpp 的 PR #29887 新增了一个利用访问局部性的 LRU MoE 专家缓存,将 Qwen3.8-Flash-Next(94GB)在 RTX 5090 上的运行速度提升至 67.8 token/秒(原来的 2.2 倍),几天后,SGLang 也合并了类似的“分页专家”功能。

llama.cpp 两周前合并了 PR #29887,我认为这是今年本地推理领域最有意思的进展,所以我仔细看了这个 PR、基准测试和代码审查讨论,并写了一篇文章,解释它到底是如何工作的。下面是简短版,长文链接放在最后。问题 Qwen3.8-Flash-Next 在 Q4_0 量化下占用 93.7 GiB,其中 65.4 GiB 是专家权重。它的总参数量为 125B,但激活参数量只有 6B:每层有 512 个专家,路由器为每个 token 选择 10 个专家(外加 1 个共享专家)。单个专家有 3 x 2560 x 640 = 490 万个参数,采用 4 位量化时约占 2.6 MiB。10 个专家 x 48 层 = 每个 token 涉及 480 个专家 = 每个 token 需要访问约 1.3 GB 的权重。观察 专家路由具有访问局部性。第 N+1 个 token 选择的专家,大多与第 N 个 token 相同。少数专家访问频繁,大多数专家几乎从不被访问。你的 CPU 缓存、操作系统页缓存、浏览器缓存、所有 CDN,以及 Redis 的 allkeys-lru 策略,依赖的都是同一种特性。解决办法 PR #29887(由 am17an 提交,移植自 Tether 的 qvac-fabric 工作,ggerganov 于 10 月 7 日合并)划出一部分显存,用作专家的 LRU(最近最少使用)缓存。命中:直接使用显存中的权重计算,无需搬运任何字节。未命中:通过 PCIe 复制所需的那个 2.6 MiB 专家,并淘汰最近最少使用的专家。程序退出时会在日志中打印命中率。以下数据来自 PR 描述,使用相同的模型文件、相同的机器:GPU 启用前 启用缓存后 缓存命中率 RTX 4090 24 GB 25.0 token/秒 40.7 token/秒(1.62 倍)77% RTX 5090 32 GB 30.8 token/秒 67.8 token/秒(2.20 倍)89% AMD R9700 32 GB(一位审查者的显卡)11.0 token/秒 27.6 token/秒 94.6% 5090 的提升更大,原因有两个:PCIe 5.0 将每次缓存未命中的开销减半,而 32 GB 显存意味着缓存更大、未命中次数更少。使用方法 llama-server -m Qwen3.8-Flash-Next-Q4_0.gguf -fa on -c 32768 -b 2048 -ub 2048 -cmoe --moe-cache-mib 11000 PR 作者的经验法则是,缓存大小设为专家权重总字节数的约 10%(65.4 GiB -> 6544 MiB)。对应的环境变量为 LLAMA_ARG_MOE_CACHE_MIB。12 天后,SGLang 在 PR #42557 中以“分页专家”的形式合并了同样的思路。我觉得最有意思的部分是 LRU,访问局部性可以追溯到 20 世纪 60 年代。而且我认为访问局部性原理被严重低估了。完整文章包含内存计算脚本、可运行的专家缓存模拟器和基准测试表格:https://cloudmash.blog/posts/moe-expert-offload-lru-cache-consumer-gpu/ llama.cpp PR #29887,MoE 专家缓存:https://github.com/ggml-org/llama.cpp/pull/29887 SGLang PR #42557,分页专家:https://github.com/sgl-project/sglang/pull/42557
查看原文

相似文章

**Qwen 3.8 Flash Next-GSQ-RCO-IQ2_XS:仅凭一张 RTX 3060 12GB + 16GB DDR4 内存即可达到约 21 tok/s(未做 gate pruning,100% 位精确)**

Reddit r/LocalLLaMA

一位开发者展示了一个为 llama.cpp 定制的 `--moe-direct-io` 功能,在仅配备 12GB 显存的 RTX 3060 和 16GB 内存的环境下运行 125B MoE 模型 Qwen3.5-Flash Next(IQ2_XS 量化,68GB),实现了 10–15 倍的加速(20–24 tok/s),且输出结果与官方版本逐位一致(bit-exact)。

我花了 3 周在新的低延迟 SGLang/vLLM 配方上测试本地 Qwen3.8:DFlash2 快 2.8 倍。构建:RadixArk + Inferact 27B NVFP4、27B BF16、orcarouter 27B Uncensored、Flash-Next NVFP4

Reddit r/LocalLLaMA

作者在单张 RTX PRO 6000 上对三款 Qwen3.8 27B 检查点进行 10 项统一测试,Flash-Next 赢下多数任务,而 DFlash2 投机解码将 27B 的推理速度从 75 提升到 210 tok/s(2.8 倍),并对比了 SGLang 与 vLLM 在不同量化导出下的性能差异。