MTP在大模型中的两种含义:Multi-Tensor Packing/Multi Token Prediction
首先最近在看GLM-5模型的时候发现模型本身有Quantized version without MTP quant 这种选项,MTP这个缩写很熟悉,但是实际看下来原来是两个含义?
1、 Multi-Tensor Packing
MTP(Multi-Tensor Packing)量化是一种针对大模型推理的优化型量化策略,核心逻辑是:
将多个张量(Tensor)打包到同一个低精度数据块中(如 INT4/INT8),在保证精度损失可控的前提下,最大化显存利用率、减少内存读写开销,从而提升推理速度(尤其是 TPOT, Time Per Output Token 指标)。
简单说:MTP 是「量化之上的二次优化」,不是基础量化(如 INT8/INT4),而是让量化后的模型跑得更快、更省显存。
- 「without MTP quant」是基础量化版本:
比如常见的 INT8/INT4 对称 / 非对称量化,仅把模型权重从 FP16/FP32 转成低精度,是量化的「基础操作」,兼容性最好,精度损失易评估。 - 「with MTP quant」是进阶优化版本:
不是替换基础量化,而是「叠加」在基础量化之上 —— 只有先做了 INT8/INT4 量化,才能用 MTP 打包优化;如果基础量化都没做,谈 MTP 无意义。
精度损失的边界:
MTP 带来的精度损失通常远小于「基础量化 vs 非量化」的差异,在对话 / 推理场景中几乎感知不到;仅在高精度要求的任务(如数值计算、代码生成)中,「without MTP」会略占优。因此也带来不同的适用场景选择:
选「with MTP quant」:
- 推理场景(如大模型对话、长文本生成)、硬件为高带宽 GPU(A100/H100/A10)、追求极致显存利用率和推理速度,对微小精度损失不敏感。
- 选「without MTP quant」:
高精度要求场景(如代码生成、数学推理)、硬件为低带宽 GPU(T4/RTX3090)、追求部署兼容性(如通用框架 / 老版本推理引擎)、需要精准评估量化精度损失。
2、 Multi Token Prediction
传统自回归生成:Token1 → Token2 → Token3 → …(每步仅生成 1 个 Token,TPOT = 单步耗时)
MTP 多 Token 预测:Token1 → [Token2, Token3, Token4](一次生成 N 个 Token,TPOT = 单步耗时 / N),主要实现方式为:Speculative Decoding(投机解码,主流方案)
逻辑:引入「小草稿模型」和「大目标模型」协作:
小模型(如 2B)快速生成 K 个候选 Token(草稿);
大模型(如 70B)一次性验证这 K 个 Token 的正确性,正确的直接输出,错误的仅回滚到错误位置;
整体等效于 “一次生成 K 个有效 Token”。
优势:精度几乎无损失,速度提升 3-5 倍(K=4-8 时),是当前 MTP 的主流落地方式。
对比:逐Token生成 vs 投机解码验证(核心差异)
假设K=8(一次验证8个Token),先看两种方式的耗时结构:
| 方式 | 逐Token生成(无MTP) | 投机解码验证(MTP) |
|---|---|---|
| 流程 | 大模型串行生成:Token1→Token2→…→Token8(8次Decode) | 小模型生成8个草稿Token(快) + 大模型1次并行验证8个Token(省时间) |
| 核心耗时 | 8 × 大模型单Token Decode耗时(如8×20ms=160ms) | 小模型生成8个Token(如8×1ms=8ms) + 大模型1次验证8个Token(如30ms) |
| 总耗时 | 160ms | 38ms(提速≈4.2倍) |
| 加速核心 | - | 大模型「1次并行验证」替代「8次串行生成」 |
验证阶段加速的核心原理(3个关键)
投机解码的验证过程不是“逐Token检查”,而是通过3个技术手段实现“批量并行验证”,从而大幅压缩时间:
1. KV Cache 复用 + 批量前向计算(核心)
大模型验证K个草稿Token时,不是从头计算,而是:
- 第一步:复用Prefill阶段缓存的输入Prompt的KV Cache;
- 第二步:把小模型生成的K个草稿Token作为「批量输入」,一次性喂给大模型做并行前向计算(而非逐Token输入);
- 第三步:大模型一次性输出这K个Token的概率分布,对比小模型的草稿Token,判断每个Token是否正确。
👉 关键:大模型的1次“批量前向计算”耗时 ≈ 1.2×单Token Decode耗时,却能完成K个Token的验证,等效于每个Token的验证耗时仅为「1.2/K × 原生成耗时」。
2. 回滚机制仅修正错误,不重复计算
如果验证发现第5个Token错误,大模型不需要重新生成前4个Token:
- 直接保留前4个正确Token(已验证通过);
- 仅从第5个位置开始,重新生成后续Token;
- 等效于“前4个Token的生成耗时被省掉”,进一步降低总耗时。
3. 小模型的“快”弥补大模型验证的“轻量开销”
小模型(如2B)的生成速度是大模型(如70B)的10-20倍:
- 小模型生成K个Token的耗时 ≈ K × 小模型单Token耗时(如1ms/Token);
- 这个耗时远小于大模型生成1个Token的耗时(如20ms/Token);
- 因此“小模型生成草稿”的额外开销,完全能被“大模型批量验证”的时间节省覆盖。
整体计算流程(以 K=3 草稿 Token 为例)
假设 Prompt 有 10 个 Token(已缓存 K/V),草稿 Token 是 [T11, T12, T13],计算过程如下:
核心环节:Transformer 层批量计算 3 个草稿 Token 的 Attention
针对 T11/T12/T13 这 3 个草稿 Token,Transformer 解码层的计算过程(批量优化版):
步骤1:生成当前 Token 的 Query(Q)
每个草稿 Token 先经过「嵌入层+位置编码」生成初始向量,再经过 Transformer 的第一个线性层生成 Query(Q):
- T11 → Q11,T12 → Q12,T13 → Q13(GPU 并行生成这 3 个 Q);
- 公式(简化):Qi=Embedding(Ti)×WqQ_i = Embedding(T_i) × W_qQi=Embedding(Ti)×Wq(WqW_qWq 是模型预训练的权重矩阵)。
步骤2:计算 Attention(核心:复用历史 K/V + 批量计算)
Attention 的本质是“当前 Token 对所有历史 Token 的关注度”,公式简化为:
Attention(Qi)=Softmax(Qi×KcacheTdk)×VcacheAttention(Q_i) = Softmax\left(\frac{Q_i × K_{cache}^T}{\sqrt{d_k}}\right) × V_{cache}Attention(Qi)=Softmax(dkQi×KcacheT)×Vcache
针对 3 个草稿 Token,批量计算逻辑如下:
| Token | 用到的 K_cache/V_cache | Attention 计算目标 | 生成的新 K/V |
|---|---|---|---|
| T11 | K0-K10, V0-V10 | Q11 对 T0-T10 的关注度 | K11, V11 |
| T12 | K0-K11(新增K11), V0-V11 | Q12 对 T0-T11 的关注度 | K12, V12 |
| T13 | K0-K12(新增K12), V0-V12 | Q13 对 T0-T12 的关注度 | K13, V13 |
👉 关键优化:
- GPU 会把 Q11/Q12/Q13 拼成一个「批量 Q 矩阵」,一次性与 K_cache 做矩阵乘法,而非单独计算 3 次;
- 每计算完一个 Token 的 K/V,就立即更新到 Cache 中,供下一个 Token 使用(逻辑顺序,并行执行)。
步骤3:前馈网络(FFN)+ 残差连接
每个 Token 的 Attention 输出经过「前馈网络(FFN)+ 残差连接 + 层归一化」,生成最终的隐藏层向量:
- T11 → H11,T12 → H12,T13 → H13(3 个向量并行生成);
- 这一步是纯并行计算,GPU 处理 3 个向量的耗时 ≈ 处理 1 个向量的耗时。
步骤4:输出层生成 Token 概率分布
Transformer 层输出的 H11/H12/H13(隐藏层向量),经过输出层转为每个位置的 Token 概率分布,把隐藏层向量从模型维度(如 4096 维)映射到 Token 词表维度(如 10000 维):
- 公式:Logitsi=Hi×WoLogits_i = H_i × W_oLogitsi=Hi×Wo(WoW_oWo 是输出层权重矩阵);
- 批量计算:H11-H13 拼成矩阵一次性做乘法,输出 Logits11/Logits12/Logits13(每个 Logits 是 10000 维向量,对应每个 Token 的原始得分)。
步骤5:Softmax 归一化(转为概率)
对每个位置的 Logits 做 Softmax,把原始得分转为 0-1 的概率(所有 Token 概率和为 1):
- 公式:P(tokenj∣Ti)=Softmax(Logitsi[j])P(token_j | T_i) = Softmax(Logits_i[j])P(tokenj∣Ti)=Softmax(Logitsi[j]);
- 示例:
- Logits11 = [1.2, 5.8, 0.3, …] → Softmax 后 → P(多Token)=95%,P(批量)=3%,P(并行)=2%;
- Logits12 = [0.5, 0.2, 6.1, …] → Softmax 后 → P(预测)=92%,P(生成)=5%,P(优化)=3%。
步骤6:提取草稿 Token 的概率(验证核心)
对比小模型生成的草稿 Token(如 T11=“多Token”)与大模型输出的最高概率 Token:
- 若一致 → 该 Token 有效;
- 若不一致 → 停止验证,回滚到该位置。
总结
- 验证加速核心:大模型通过「1次并行批量验证K个Token」替代「K次串行生成Token」,单批次验证耗时远小于逐Token生成总耗时;
- 额外保障:小模型生成草稿的耗时极低,回滚机制仅修正错误不重复计算,进一步放大加速效果;
- 关键结论:验证阶段的“批量并行”是投机解码(MTP)提速的核心,也是为什么“验证K个Token”比“生成K个Token”快一个数量级的根本原因。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)