推文
@wei_wang · 2026-10-11 20:13
我最近在读一份把单台 DGX Spark 上 Qwen3.8-Flash-Next 从 43.9 做到 67.5 tok/s 的配方,一路读下来,每个改动都对得上本地推理的一个基本原理,我按顺序拆一下。 从 43.9 到 67.5 前后做了六周,配方和原始数据都放在了公开的仓库和论坛帖里。 一、结果 测试脚本用的是前人公开的那套,原样没改,40 个提示词,单路: 1. 中位数 67.5 tok/s(跑了三次:65.2、67.5、67.5),前人公开的配方是 43.9 2. 分类型看:散文 38.5,写代码 70~74,JSON/HTML 77~80 3. 6 路并发合计 90.7(只跑了一次) 4. 质量也测了:GSM8K 固定 100 题答对 99 题,131K 上下文大海捞针 20 个深度全过 5. 262K 上下文,KV cache 池约 1M token,视觉和工具调用都能用 二、Spark 的瓶颈在哪 decode 每吐一个 token,都要把这一步用到的权重从内存里读一遍。Spark 是 128GB 统一内存,带宽 273 GB/s。单路的时候算力用不满,时间基本都花在读内存上。 所以 decode 想快,能动的就两件事:每个 token 少读几个字节;读一次多吐几个 token。下面的改动都落在这两件事上。 三、135GB 的模型怎么塞进 121GiB NVIDIA 官方这个 NVFP4 checkpoint 有 135GB,Spark 可用内存约 121GiB,按理装不下。 能跑起来,是因为里面有一张 51.2GB 的 PLE n-gram 表,每个 token 只用到其中几行。这张表从头到尾不进内存,前向计算时直接从 checkpoint 文件里把要用的行取出来。别的配方是先搭一个 preadv 缓冲池分批读,这份改成在前向里直接取。 PLE 是 per-layer embeddings 的缩写,可以理解成一张按 token 查的大向量表:每个 token 在每一层都有各自的一小段向量,这张表放在主计算路径之外,用到哪个 token 就只读它对应的那几行。 直觉上就像查字典:整本字典不用背下来,用到哪个词翻到那一页。代价是吃磁盘,建议放 NVMe。 四、BF16 稠密层转 FP8 模型里原本是 BF16 的稠密层,加载时转成 FP8(block-128,按块缩放)。每个权重从 2 字节变成 1 字节,这部分每个 token 要读的数据直接减半。 五、投机解码:读一次多吐几个 token MTP 的思路是先用一个很小的草稿头猜后面几个 token,再让大模型一次前向把这几个一起验证,猜对几个收下几个。 decode 本来就卡在读权重上。稠密层验证 4 个 token 和生成 1 个 token,读的权重差不多,猜对的那几个等于白送。MoE 层不同 token 可能走不同专家,会多读一些,收益没有稠密模型那么大。 草稿这一侧,这份配方改了草稿头、猜测长度和 KV 精度: 1. 草稿头用 NVFP4,词表裁到 65,536 行(FR-Spec 的做法),只在常用 token 里猜,草稿本身更便宜 2. 单路一次猜 4 个,2 到 6 路并发时一次猜 3 个。并发上来以后算力不再闲着,猜错的代价变高,少猜一个更划算 3. MTP 层的 KV cache 保留 BF16,不压成 FP8。配方里附了 68 个提示词的 A/B,贪心解码快了约 7.5%。草稿头看到的信息更准,猜中率就更高 这也能解释为什么 JSON/HTML 能到 80,散文只有 38.5。结构化输出里括号、键名、标签都很好猜,草稿头一猜一个准;散文用词自由,猜中率低,投机解码帮不上太多。 六、测法也值得学 1. 先在自己的 Spark 上原样跑了一遍前人的配方,得到 42.6,和对方公布的 43.9 基本一致。机器没有特殊,差距来自配方 2. 单路跑了三次,6 路只跑了一次,文档里写明 6 路没有噪声基线 3. 测试脚本的自动评分只看格式和长度,所以另外补了 GSM8K、大海捞针和前缀缓存检查 4. 镜像按 digest 固定,vLLM 版本、checkpoint 版本、驱动全部锁死,每个补丁都标明来自上游 PR 还是配方作者自己写的 七、想复现的话 仓库里五个脚本,依次是只读检查、下载校验、构建、启动、验证。需要约 200GB 空闲磁盘、约 100GiB 空闲内存,加载约 11 分钟。这是社区配方,模型卡官方只写了 B200/B300,GB10 不在支持范围内。 原帖:https://forums.developer.nvidia.com/t/six-weeks-optimizing-qwen3-8-flash-next-on-one-dgx-spark-67-5-tok-s-median-decode-80-on-structured-work-reproducible-recipe-with-raw-data/385463 仓库:https://github.com/salient-data/qwen38-next-dgx-recipe
曝光 1001 · 评论 1 · 点赞 5 · 书签 8 · 曝光/时 296.91138056267806