MTP在大模型中的两种含义:Multi-Tensor Packing/Multi Token Prediction
首先最近在看GLM-5模型的时候发现模型本身有Quantized version without MTP quant 这种选项MTP这个缩写很熟悉但是实际看下来原来是两个含义1、 Multi-Tensor PackingMTPMulti-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」推理场景如大模型对话、长文本生成、硬件为高带宽 GPUA100/H100/A10、追求极致显存利用率和推理速度对微小精度损失不敏感。选「without MTP quant」高精度要求场景如代码生成、数学推理、硬件为低带宽 GPUT4/RTX3090、追求部署兼容性如通用框架 / 老版本推理引擎、需要精准评估量化精度损失。2、 Multi Token Prediction传统自回归生成Token1 → Token2 → Token3 → …每步仅生成 1 个 TokenTPOT 单步耗时MTP 多 Token 预测Token1 → [Token2, Token3, Token4]一次生成 N 个 TokenTPOT 单步耗时 / N主要实现方式为Speculative Decoding投机解码主流方案逻辑引入「小草稿模型」和「大目标模型」协作小模型如 2B快速生成 K 个候选 Token草稿大模型如 70B一次性验证这 K 个 Token 的正确性正确的直接输出错误的仅回滚到错误位置整体等效于 “一次生成 K 个有效 Token”。优势精度几乎无损失速度提升 3-5 倍K4-8 时是当前 MTP 的主流落地方式。对比逐Token生成 vs 投机解码验证核心差异假设K8一次验证8个Token先看两种方式的耗时结构方式逐Token生成无MTP投机解码验证MTP流程大模型串行生成Token1→Token2→…→Token88次Decode小模型生成8个草稿Token快 大模型1次并行验证8个Token省时间核心耗时8 × 大模型单Token Decode耗时如8×20ms160ms小模型生成8个Token如8×1ms8ms 大模型1次验证8个Token如30ms总耗时160ms38ms提速≈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因此“小模型生成草稿”的额外开销完全能被“大模型批量验证”的时间节省覆盖。整体计算流程以 K3 草稿 Token 为例假设 Prompt 有 10 个 Token已缓存 K/V草稿 Token 是 [T11, T12, T13]计算过程如下T11/T12/T13 批量输入批量嵌入位置编码 → x11/x12/x13批量生成Q11/Q12/Q13、K11/K12/K13、V11/V12/V13T11 AttentionQ11×K0-K10^T → Attn_out11T12 AttentionQ12×K0-K11^T → Attn_out12T13 AttentionQ13×K0-K12^T → Attn_out13批量FFN计算 → FFN_out11/FFN_out12/FFN_out13批量残差归一化 → H11/H12/H13单层出多层叠加 → 最终H11/H12/H13核心环节Transformer 层批量计算 3 个草稿 Token 的 Attention针对 T11/T12/T13 这 3 个草稿 TokenTransformer 解码层的计算过程批量优化版步骤1生成当前 Token 的 QueryQ每个草稿 Token 先经过「嵌入层位置编码」生成初始向量再经过 Transformer 的第一个线性层生成 QueryQT11 → Q11T12 → Q12T13 → Q13GPU 并行生成这 3 个 Q公式简化QiEmbedding(Ti)×WqQ_i Embedding(T_i) × W_qQiEmbedding(Ti)×WqWqW_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_cacheAttention 计算目标生成的新 K/VT11K0-K10, V0-V10Q11 对 T0-T10 的关注度K11, V11T12K0-K11新增K11, V0-V11Q12 对 T0-T11 的关注度K12, V12T13K0-K12新增K12, V0-V12Q13 对 T0-T12 的关注度K13, V13 关键优化GPU 会把 Q11/Q12/Q13 拼成一个「批量 Q 矩阵」一次性与 K_cache 做矩阵乘法而非单独计算 3 次每计算完一个 Token 的 K/V就立即更新到 Cache 中供下一个 Token 使用逻辑顺序并行执行。步骤3前馈网络FFN 残差连接每个 Token 的 Attention 输出经过「前馈网络FFN 残差连接 层归一化」生成最终的隐藏层向量T11 → H11T12 → H12T13 → H133 个向量并行生成这一步是纯并行计算GPU 处理 3 个向量的耗时 ≈ 处理 1 个向量的耗时。步骤4输出层生成 Token 概率分布Transformer 层输出的 H11/H12/H13隐藏层向量经过输出层转为每个位置的 Token 概率分布把隐藏层向量从模型维度如 4096 维映射到 Token 词表维度如 10000 维公式LogitsiHi×WoLogits_i H_i × W_oLogitsiHi×WoWoW_oWo是输出层权重矩阵批量计算H11-H13 拼成矩阵一次性做乘法输出 Logits11/Logits12/Logits13每个 Logits 是 10000 维向量对应每个 Token 的原始得分。步骤5Softmax 归一化转为概率对每个位置的 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”快一个数量级的根本原因。