【Day】MTP(Multi Token Prediction)技术学习

诞生背景

在MTP出现之前,LLM的推理流程的复杂程度是:

InputToken×TFBlockLength×NIter InputToken \times TFBlock Length \times NIter InputToken×TFBlockLength×NIter

因此你会发现:真正会影响LLM图例速度的点在于Transformer Block在LLM模型中的深度,即使当我们仅仅输入了一个Token,如果Transformer Block足够深,那么它也会计算很长时间。更何况现实是我们与LLM聊天时,并不会仅仅输入一个Token。而这也是MTP所要亟待解决的问题。

技术介绍

多Token预测(MTP)将在每个位置上的Token从原来的1个扩展到N个,N由推理引擎配置文件提供。MTP通过增加额外的预测目标来提升推理引擎的吞吐量,即Token/s,同时也可能促使表示学习提前预测未来的Token。

计算复杂程度变成了:

InputToken×TFBlockLength×MTPSizeNIter+InputToken×NIter InputToken \times TFBlockLength \times MTPSizeNIter + InputToken×NIter InputToken×TFBlockLength×MTPSizeNIter+InputToken×NIter

下图展示了Deepseek-v3中MTP的应用示例:

通过上图可以清楚的看到,Deepseek-v3由一下三个模块组成:

  • 主模型,负责优先处理基本的输入Token
  • MTP模块1,负责接收来自主模型输出头的Embedding向量
  • MTP模块2,负责接收来自MTP模块输出头的Embedding向量

在这个架构中,主模型的深度往往决定了后面MTP模块输出的质量,因此我们可以很清晰的看到主模型的深度是:

Depth=Transformer Block×Layer \text{Depth} = \text{Transformer Block} \times \text{Layer} Depth=Transformer Block×Layer

在主模型推理完成后,MTP将截胡 来自主模型输出头的向量,来用于自己的二次推理。但为了保证上下文的逻辑与时间一致性,MTP模块不得不要重新计算输入的Token。

在接收到原始输入Embedding和主模型的Embedding后,MTP模块通过RMSNorm对其进行归一化和FC映射,以确保MTP模块中的Transformer块进行预测,不过由于主模型已经为MTP模块打了非常坚实的基础,因此MTP模块的Transformer块只有一层。经过MTP模块,我们会至少得到:

OutputToken=Tmain+(Tmain+draft-n-max)×mtpsize \text{OutputToken} = T_{main} + (T_{main} + \text{draft-n-max}) \times \text{mtpsize} OutputToken=Tmain+(Tmain+draft-n-max)×mtpsize

测试

为了方便对比,将使用Llama.cpp针对Qwen3.6-27B-MTP在开启MTP和未开启MTP状态下进行吞吐量测试

测试平台采用AutoDL GPU实例:英特尔至强 铂金8470Q , 90G RAM, RTX 5090 32G

我将以如下方式启动llama.cpp:

bash 复制代码
llama-server -hf unsloth/Qwen3.6-27B-MTP-GGUF:IQ4_XS \
    --alias qwen3.6-27b-mtp \
    --port 8000 \
    --spec-type draft-mtp \
    --spec-draft-n-max 3 \
    --spec-draft-n-min 0.3 \
    --temp 0.6 \
    --repeat-penalty 1.05 \
    -fa on

其中,控制MTP行为的参数为:

  • spec-type:当使用draft-mtp时,表明llama.cpp将激活GGUF模型中的MTP模块(前提是模型本身支持MTP)
  • spec-draft-n-max:指定最大将生成多少个草稿Token
  • spec-draft-n-min:最低的容忍置信度

接下来,我们得到了如下图片:

你可以发现,在开启MTP多Token预测模式下,推理性能提升了约1.3倍。

同样的:同一个chat请求,在开启MTP推理后,反而其触发解码的次数要比非MTP解码的次数少了整整4次!这样也能保证在资源受限的情况下,推理速度变得更快

结论

所以,我们可以显而易见的发现:MTP其实也是一种基于空间换时间的优化方法。它在主模型的基础上引入了MTP模块的概念,虽然单个MTP模块的网络深度并不算深,基本是:

  • 一个Embedding头
  • 两个RMSNorm模块
  • 一个Transformer块
  • 和最后接手的FC输出头

但是因为主模型开了个"好头",所以MTP的输出质量是并不需要额外担心。

相关推荐
2601_962078192 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
sunshine22 girl2 小时前
Java学习二 基本语法2, 算术运算符
java·学习
2601_962218612 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949652 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_962885722 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
李高钢2 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
羞儿3 小时前
人体姿态估计系统知识框架
深度学习·计算机视觉·姿态估计·行为识别
ocean21033 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
Easy_API3 小时前
从“有多少卡“到“卖多少 Token“:算力的标尺正在换
大数据·人工智能·深度学习
Warson_L3 小时前
Python的OrderedDict
python