工具
llama.cpp 引入自适应 MTP 模式:动态调整推测解码深度
llama.cpp 新增自适应 MTP(Multi-Token Prediction)模式,可根据生成内容动态调整推测解…
2026.08.18 · 周二约 3 分钟阅读
llama.cpp 项目近期迎来一项面向本地推理场景的功能更新:一项 PR 提交为引擎新增了「自适应 MTP(Multi-Token Prediction)」模式。该模式通过一个简单的计数式状态机,根据当前生成内容的可预测程度,动态调整 MTP 的推测深度,从而让用户无需手动调参,由服务端自行决定每一步最佳深度。
核心思路:让推测深度跟着内容走
传统的 MTP(推测解码 / speculative decoding)需要使用者根据模型和场景手动设置固定的推测深度(draft depth)。但不同的生成内容难度差异极大——密集的散文、需要回忆上下文的代码生成、常规对话等,对推测深度的「最佳值」其实并不相同。
本次提交的自适应 MTP 则引入了动态调整机制:
- 通过一个简单的计数式状态机判断当前内容的可预测性;
- 在预设区间内动态选择合适的推测深度;
- 目标是把参数选择权交还给推理引擎,降低使用门槛。
性能表现:代码场景提速显著
根据 PR 作者自述的实测数据,自适应 MTP 在不同类型任务上表现差异明显:
- 密集、难以预测的散文:相比固定 MTP=3,性能约下降 3% 左右;
- 常规散文:性能与 MTP=3 基本持平,部分场景略优;
- 代码生成:普遍比 MTP=3 快 10%–15%;
- 从「思考阶段」回忆代码:速度可比 MTP=3 快 50% 以上;
- 模型从记忆中重写整个文件:特定场景下生成速度可达 MTP=3 的两倍(约 +100%);
- 回忆型散文:增益约 +20%–30%。
作者特别指出,温度(temperature)越高、模型输出越不可预测时,自适应 MTP 的优势会减小,散文场景可能不再优于固定 MTP=3,但代码场景通常仍能保持小幅领先。
推荐配置
PR 推荐的使用配置如下:
--spec-type draft-mtp-adaptive--spec-draft-n-max 12(允许深度在 3 到 12 之间动态调整)
如需修改默认深度下限 3,可使用 --spec-draft-n-min-adaptive 选项进行覆盖。
该 PR 目前在 llama.cpp 仓库中以编号 #27210 进行跟踪,社区用户可自行测试并反馈不同模型与任务下的实际表现。
