我跑通了: Qwen3.8-Flash-Next
模型 111GB , 单显卡4090 48GB
125B 级的 MoE, 以前想本地跑,那是机房里好几张 A100 的事。
现在 : 一张 48GB 改装版 4090, 加 123GiB 普通内存,不光跑起来了,250K 长文读完一道没错, 还和 27B 打了场 300 题正面对测。
模型是阿里前天才放的 Qwen3.8-Flash-Next,Unsloth UD-Q4_K_XL 量化 , 四个分片 111.3GB。
它能塞进单卡, 秘密就一条 : MoE 每个 token 只激活约 6B。
我把 33GiB 权重放进显卡, 70.7GiB 扔给内存——其中 26.8GiB 是那张 51B 的 n-gram 表, 它每个 token 只查几行,放内存几乎白嫖。
速度:
短请求 28.5–30.3 tok/s
读了 32K 内容 : 24.1 tok/s
读满 250K : 14.04 tok/s
长任务是这么虐它的 : 一份 250K token 的合成长文 , 里面埋 17 个要检索、要计算的字段,读完全文、找出来、算对。它半小时读完,17/17 一道没错,整轮 34.8 分钟。
质量这关更有意思 : 300 道冻结同题(代码+困难推理) ,
这个 111GB 的大家伙
247/300,
16.5GB 的 27B Q4
245/300
统计上打平(p=0.86)。但单题耗时, 只是Flash 平均慢 48%。
所以我的判断 : 日常任务留 27B, 快; Flash-Next 的更强的是长任务。
网上那个"24G 4090 跑出 21 tok/s"很多人在转。
我看了测法:他把上下文窗口设到了 250K——窗口只是个上限, 意思是"最多允许模型读这么多" ;
但他每轮真正让模型读的内容, 只有 28K 左右。
模型读得越多越慢,他的速度 21 tok/s 是"读了 28K"的速度, 我的 14.04tok/s 是读满 250,002 token 的速度。
窗口设很大不关键、真正往上下文放了多少, 是完全不一样的,短测试可以很快,长文测试才是速度关键!!!
对了, 这轮 MTP 没开——模型目录里没有 draft 文件;
社区 sidecar 试过一版, decode 反而掉八九成。也就是说,这个 14.04 tok/s 还有的涨。
惊喜的发现!我本来想自己动手写的思路,发现 GitHub 上已经有人做出来了(01554 的 llama.cpp fork,expert-tier 分支):
上游 llama.cpp 显存不够时,把 MoE 权重整层搬去内存。
但专家冷热天差地别——512 个专家, 常被路由命中的就那几百个。这个分支改成按专家放:热门专家住显存,按命中热度限速换入换出,冷门的睡内存。路由越偏科,赚得越多。
作者的卡是 96GB 的 RTX PRO 6000,他测小卡的办法挺取巧 : 跑个进程占死一块显存,把可用显存压到 32GB、48GB, 模拟不同预算:
32GB 可用 : 整层切 25 tok/s,热缓存 35-36,快 42%
48GB 可用 : 整层切 29,热缓存约 39,快 34%
48GB 这档, 显存预算和我这张 4090 刚好一样。
但他的卡是 Blackwell,带宽算力都不同
热缓存只加速 decode, prefill 绕开走老路;
分支还是 experimental, 早期有个读错权重的 bug, 8/27 已修,复现要用修完的 commit。
下一轮,就在这张 4090 上测试这个。
显示更多