并非所有 MTP 辅助模型都生而平等

Reddit r/LocalLLaMA 工具

摘要

关于 llama.cpp 中结合 Gemma 4 模型的 MTP 投机解码的详细技术探索,表明辅助模型的选择和量化对加速效果有显著影响,且并非所有“同名”的辅助模型表现相同。

自发布以来,MTP 因“无效”而被广泛质疑。实际上它确实有效,只是很难正确使用。我在 llama.cpp 中尝试了 MTP 投机解码,很快发现一个显而易见的事实:并非所有 MTP 辅助模型都生而平等。我本地运行 Gemma 4 Heretic 模型,错误与正确的辅助模型之间差异巨大。你运行 gemma 4 26b q4 并不意味着可以随便接入任何一个 gemma 4 26b q4 辅助草稿模型。截至目前的结果如下: - Gemma 4 26B Heretic Q8:约 30 t/s → 约 55-62 t/s - Gemma 4 12B Heretic Q4:约 12 t/s → 约 35-54 t/s - Gemma 4 26B QAT/Q4 Heretic Vision:约 65 t/s → 约 70-75 t/s - Gemma 4 31B Q4 Heretic Vision:约 14 t/s → 约 25-30 t/s 最大的教训是:仅仅加载一个辅助模型并不代表它能良好运行。而且,同名不代表性能相同。Hugging Face 上两个名为 `gemma 4 31b 4q assistant.gguf` 的模型并不并行,也不一定是彼此的副本。仅针对 26B Q4 模型,我就测试了至少 6 个辅助模型。有些已经以 GGUF 格式提供;另一些我从 Hugging Face 下载后自行量化。部分模型技术上讲能用,但接受率很低;还有一些几乎没有任何可测的加速效果。最终我为全部 4 个模型找到了可用的配对。 另一个有趣的发现来自 Google 官方的 Gemma 4 辅助模型。我从 Hugging Face 下载了官方辅助/MTP 模型,转换为 GGUF 格式,并生成了多个变体,包括 Q4、Q8 和未量化版本。结果令我惊讶。对于 12B 和 31B 模型,未量化的辅助模型始终优于量化版本。Q4 辅助模型仍能比无 MTP 时提升性能,但未量化的辅助模型通常快约 10 t/s。换句话说,辅助模型的量化也很重要。 其他一些观察: - 某些辅助模型加载成功,但性能提升甚微。 - 某些辅助模型草稿接受率低,甚至降低了收益。 - 某些不匹配的辅助模型因张量形状/断言错误而崩溃。 - 更高的草稿数量并不更好(可能是 Heretic 的特性)。我所有最佳结果都来自 `spec-draft-n-max = 1`。 - 基础模型越慢,收益往往越大。 我很快学到的一点是:需要验证 MTP 是否实际生效。我开始观察日志中的内容:`common_speculative_impl_draft_mtp: adding speculative implementation 'draft-mtp'`,然后检查草稿接受率和实际生成速度。如果没有这一确认,很容易误以为自己正在基准测试 MTP,实际上却是在基准测试基础模型——因为它会静默降级。 更有趣的结果之一是在 26B QAT/Q4 模型上让 MTP 与视觉能力协同工作。我原本以为需要分离视觉和文本配置,但模型成功加载,且包含: - 视觉(mmproj) - Draft-MTP - 96k 上下文 - Flash Attention 并在文本工作负载中仍能保持约 70+ t/s 的生成速度,同时保留图像支持。 我的总体结论:如果你尝试过一次 MTP 却效果不佳,不要轻易认为 MTP 毫无用处。试试不同的辅助模型,不同的量化等级,关注你的接受率,确认 MTP 确实已初始化。对我来说,“一个辅助模型”与“正确的辅助模型”之间的差异,往往就是小幅提升与 2 倍加速之间的差异。到目前为止,“它能加载”和“它是正确的辅助模型”并非一回事。
查看原文

相似文章

MTP 关键在于接受率

Reddit r/LocalLLaMA

一位用户在 M4 Max Studio 上使用 mlx-vlm 对 Gemma 4 进行了 MTP(多令牌预测)基准测试,发现它在代码生成方面表现出色(速度快 1.53 倍,接受率 66%),但对 JSON 输出不利(速度慢 50%,接受率仅 8%),对长篇散文则影响中性,表明当令牌接受率低于 50% 时,MTP 的优势便荡然无存。

MTP 和 QTA 有什么关系?

Reddit r/LocalLLaMA

一位用户寻求澄清 llama.cpp 中 MTP(多 token 预测)与 QAT(量化感知训练)之间的关系,特别是关于 Gemma4 模型的 GGUF 兼容性以及文件名中新增的 QAT 字符串。

[WIP] Gemma 4 MTP

Reddit r/LocalLLaMA

llama.cpp 是一个开源 C/C++ 库,用于在各种硬件上高效进行 LLM 推理,支持多种量化格式和 GPU 后端。本篇 README 详细介绍了其功能、安装方法以及近期更新,包括 Hugging Face 缓存迁移和多模态支持。