@no_stp_on_snek: MTP 草稿每步都要读取 1.27 GB 的 BF16 LM head 来预测下一个 token。248K x 2560,单行 GEMV,每次草稿步骤都要读取……
摘要
MTP 投机解码的草稿 LM head 原本每步都要读取 1.27 GB 的 BF16 权重,现改为 Q4_0 量化草稿头(验证与正常解码仍用 BF16),实现约 10.6% 的 token/s 提升,且 greedy 输出 md5 完全一致。相关改动已在 ROCmFPX 的 PR #49 中提交。
查看缓存全文
缓存时间: 2026/10/12 01:17
🚨 MTP 草稿阶段原本要读取 1.27 GB 的 BF16 LM head,只为猜下一个 token。
248K x 2560,每步草稿都是一次单行 GEMV。目标模型仍然用真正的 head 做验证。所以草稿 head 现在换成了 Q4_0。验证和常规解码依然保持 BF16。
⚡ 28.00 / 27.91 → 30.64 / 31.14 tok/s(+10.6%) ✅ 接受率仍是 83/128。贪心输出 md5 完全一致。一次性增加 +360 MiB。
https://github.com/ROCmFPX/ROCmFPX/pull/49… @Italianclownz @AIatAMD
Strix Halo 的冲刺还在继续……
相似文章
@no_stp_on_snek: 草稿词表之前是可选启用的,因为它只支持单序列。它为每个模型保留一个候选集。超过一个 MTP 驱动器会出错。
ROCmFPX 的 llama.cpp 下游项目更新了投机解码的草稿词表实现,改为按序列存储候选集并默认启用(16384 行),将候选行数从 248K 降至 16K,令牌生成速度提升约 11.4%(35.14/35.31 → 39.18/39.32 tok/s)。
提醒:如果你还没试过,不妨试试概率式 MTP。散文文本解码速度提升 14%
提醒用户尝试 llama.cpp 中新合并的概率式 MTP(多 token 预测)功能,在散文生成场景下解码速度提升约 14%,最优 draft-n-max / draft-p-min 参数与贪心采样基本一致。
为什么 MTP 比标准解码更慢?
一位用户询问,为什么对于 Ornith 1.5 9B,llama.cpp 中的多 Token 预测(MTP)推测解码虽然草稿接受率高达 0.95,吞吐量却低于标准解码(约 15 tok/s,而标准解码约为 30 tok/s),并指出内存带宽和 GPU 利用率均减半。
Qwen3.8-Flash-Next MTP 集成至 ik_llama.cpp(集成头或单独 -md 文件)... 在 5090 + 128GB 上 45 → 90 tok/s,甚至可在 12GB 4070 上运行
文章详细描述了将 Multi-Token Prediction (MTP) 支持合并至 ik_llama.cpp 的过程,这显著提升了 Qwen3.8-Flash-Next 模型的令牌生成速度,基准测试显示在高端硬件上速度最高可提升一倍。
@no_stp_on_snek:融合的 HC norm 内核一直在浪费已经付出代价的量化工作。它写出了 10240 宽的流,然后 MMQ 又去读……
ROCmFPX 的融合 HC norm 内核通过在寄存器中直接写出 Q8_1 副本,省去了 MMQ 重复量化 335MB 数据的开销,在 2.3%–3.6% 的 pp8192 性能提升下保持位级一致。