Qwen3.8-Flash-Next 在双 RTX 3090 + DDR4 上:解码速度从 17 提升至 25-29 令牌/秒,使用专家缓存 PR

Reddit r/LocalLLaMA 工具

摘要

用户基准测试并详述了 llama.cpp 中的 GPU 常驻专家缓存 PR,该 PR 将 Qwen3.8-Flash-Next 在双 RTX 3090 系统上的解码速度从 17 提升至 25-29 令牌/秒。

分享一些数据,因为据我所见,关于此模型的大多数帖子要么使用单个 3090,要么使用统一系统。我的当前设置:2x RTX 3090(PCIe 3.0)、双 Xeon E5-2696 v4、188 GB 可用(192GB)DDR4-2133 LRDIMM、llama.cpp、unsloth UD-Q6_K_XL。所有 48 个专家层固定在主机内存中,其他内容都在 GPU 上。完整 261k 上下文,f16 KV。之前:~17 令牌/秒 解码,~350 令牌/秒 预填充在 26k 提示下,12 令牌/秒 解码在 131k 深度。现在:25-29 令牌/秒 解码在短和中等上下文,~17 在 131k,预填充基本相同。使用 Python 编码提示测量。现在,我所做的:PR #27861,GPU 常驻 LRU 专家缓存。它不再将整个专家层存储在显存中,而是缓存每层最近使用的专家。此模型为一个令牌选择的专家与前几十个令牌选择的大多相同,因此在代码上的命中率为 80-85%,在散文上更高。使其有效的技巧是给缓存显存,并将 ubatch 从 2048 降至 512,每 GPU 释放约 5 GB(计算缓冲区随 ubatch 缩放),从 80 个槽位增加到每层 135 个槽位在完整上下文下。代价是在长提示上预填充变慢,短提示基本不受影响。另外,在我的系统上无效或有害的:线程数、轮询、CPU 掩码、q8 KV、惰性 PLE、散文上的 n-gram 草稿、温度 0.7 的 MTP(验证批处理重新从主机内存读取专家,只在贪婪或深度上下文下有效),以及每步超过 2 次缓存上传(饱和 PCIe 3.0,命中率崩溃)。要复现,你不需要我的分支,它只是主分支加上 PR:git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp git fetch origin pull/27861/head:pr-27861 && git merge pr-27861 cmake -B build -DGGML_CUDA=ON && cmake --build build -j LLAMA_ATTN_ROT_DISABLE=1 numactl --interleave=all build/bin/llama-server -m Qwen3.8-Flash-Next-UD-Q6_K_XL-00001-of-00006.gguf \ -ngl 99 -c 261888 --parallel 1 -fa on \ -ot "ffn_(gate|up|down)_exps\.weight=CUDA_Host,per_layer_token_embd\.weight=CPU" \ --numa distribute -t 16 -tb 44 -b 4096 -ub 512 -ctk f16 -ctv f16 \ --moe-expert-cache 135 根据 KV 和计算缓冲区后剩余的显存大小调整缓存,Q6 上每槽位每 GPU 约 100 MB。测试 UD-Q4_K_XL 是我的下一项,并且如果合理,我将重新审视 MTP,仍密切关注 Daniel 的 PR。怀疑有类似设置的人不多,但如果这有帮助或你有关于尝试方法的疑问,请告诉我。
查看原文

相似文章