Compact Rollback MTP:让低显存也能跑 Qwen 27B 的 MTP 加速
Reddit 用户为 llama.cpp 推出 MTP 紧凑回滚补丁,在 16GB 显存下运行 Qwen 27B 可获约…
近期有社区开发者在 r/LocalLLaMA 发布了一项名为「Compact Rollback MTP」的 llama.cpp 修改方案,目标是在 16GB 左右显存的硬件上为 Qwen 这类带 MTP(Multi-Token Prediction)能力的模型保留加速收益,同时减少回滚状态带来的显存开销。
方案背景与核心思路
MTP 推测解码在生成草稿 token 时会保留若干回滚快照,n-max 越大潜在加速越高,但占用 VRAM 也越多,整体可用的上下文窗口会被压缩。Compact Rollback 的做法是把即时回滚状态限制到 1 个,让模型在仍可生成多个草稿 token 的同时,把回滚带来的显存代价压到与 n-max=1 相当,从而腾出更多上下文空间。
方案中另一项相关能力是 Adaptive MTP,会根据近期的草稿接受率动态调整本次的草稿数量(上限为 --spec-draft-n-max)。开发者在代码生成场景中观察到接受率通常在 80%–98% 之间,因此该机制几乎可以「始终开启」。
实测对比
在 IQ4 量化的 Qwen 27B、16GB 显存的样例上,给出的数据如下:
- 标准 MTP(最大草稿 n=2):可用上下文约 72,192,生成速度约 39.53 t/s
- Compact Rollback MTP(n 最大 5):可用上下文约 77,312,生成速度约 46.39 t/s
相比标准配置,上下文增加约 5k tokens,token 生成速度提升约 17.35%。
使用方式
补丁基于 llama.cpp 的特定 commit(662a0b01),需要手动克隆仓库、切换 commit、应用 patch 后再按常规流程构建。
- 推荐最小参数:--spec-mtp-cr-depth 1 --spec-draft-adaptive --spec-type draft-mtp
- 27B / A3B 代码生成推荐参数:在最小参数基础上增加 ngram 草案、草案 KV cache 量化(q4_0),并将 p-min 设为 0.80、n-max 设为 5,ngram 匹配长度取 24,最小/最大生成长度分别取 8 和 32
作者还提供了脚本示例与详细文档。需要注意的是,patch 文件托管在第三方域名(store.piffa.net),并非 llama.cpp 官方仓库合并内容,使用前应自行审查代码安全性。
