【存档】MTP技术理论学习路线

📅 2026/6/26 2:25:28
【存档】MTP技术理论学习路线
按“原理论文 → 推理算法 → 工程实现 → 你现在 VERL/vLLM-Ascend 里为什么这样写”的顺序整理会告诉你每篇看什么、和你调的 MTP 接受率/权重同步有什么关系。按“MTP 训练目标 → speculative decoding 验证机制 → vLLM/vLLM-Ascend 实现 → veRL rollout 权重同步”这条线学。这样会明白为什么你之前一直纠结的drafter 权重、target 权重、acceptance rate、enable_train/enable_rollout、num_speculative_tokens会互相影响。我最推荐的学习顺序顺序资料你重点看什么和你现在问题的关系1Better Faster LLMs via Multi-token PredictionMTP 最原始的思想一个主干模型同时预测未来多个 token解释“为什么训练侧要多一个 MTP loss”2DeepSeek-V3 Technical ReportDeepSeek 式 MTP module 结构、共享 embedding/head、MTP 可用于 speculative decoding最贴近 Qwen3.5/Qwen3.6 这类原生 MTP 模型3Speculative Decoding / Speculative Sampling 论文proposer 先猜target 再验证为什么理论上不改变输出分布解释“为什么接受率高才会加速为什么 target 仍然要跑”4EAGLE / EAGLE-2 / Medusa不同 drafter 的设计差异帮你区分 MTP、EAGLE、Medusa、draft model5vLLM MTP 文档methodmtp、num_speculative_tokens、native MTP 模型解释 vLLM 里为什么不一定需要独立 draft model6vLLM-Ascend speculative decoding 文档proposer-verifier、rejection sampler、Ascend 上的限制解释 vLLM-Ascend 里为什么有 proposer、sampler、ACLGraph、token 数限制7veRL MTP 文档mtp.enable_train、enable_rollout、吞吐为什么可能不升反降解释你训练中“接受率上去了但吞吐不一定升”的现象第一篇MTP 原始论文先理解“为什么要预测多个 token”最基础的是Better Faster Large Language Models via Multi-token Prediction。它的核心非常简单传统 LLM 每个位置只预测下一个 tokenMTP 让同一个位置预测未来多个 token例如同时预测t1、t2、t3。论文描述的是在每个位置让模型通过共享主干和多个独立输出头预测接下来的 n 个 token从而提高样本效率。你读这篇时只抓三个点第一MTP 本质上先是训练目标不是推理技巧。也就是说模型训练时多学一个“看远一点”的辅助任务。第二MTP head / MTP module 不是主模型本体必须依赖的东西。主模型照样可以只做 next-token prediction。第三MTP 能用于推理加速是因为它可以充当 drafter/proposer先快速猜未来 token然后主模型验证。这能解释你之前很多困惑为什么enable_trainTrue和enable_rolloutTrue是两个开关。前者是训练 MTP 辅助目标后者是推理 rollout 阶段拿 MTP 做 speculative decoding。第二篇DeepSeek-V3最像你现在要理解的“原生 MTP 模型”DeepSeek-V3 Technical Report是我最建议你精读的因为它讲的是工程上真实落地的 MTP。它明确说 MTP 既能提升模型效果也能用于 speculative decoding 加速推理。DeepSeek-V3 里的 MTP module 很关键每个 MTP module 包含共享 embedding、共享 output head、一个 Transformer block以及 projection matrix。 这正好解释你之前在 vLLM-Ascend/veRL 里看到的现象embed/lm_head 往往不是单独给 drafter 重新造一套而是和 target 共享或复用。DeepSeek-V3 还明确说推理时可以直接丢弃 MTP modules主模型仍可独立正常工作也可以把 MTP modules 拿来做 speculative decoding。 这句话非常重要它解释了不开推理 MTPtarget 正常生成 开推理 MTPMTP module / drafter 先猜 tokentarget 验证 训练 MTP多一个辅助 loss 不训练 MTP主 next-token loss 仍然可以正常训练DeepSeek-V3 报告里还提到它的 MTP depthD1也就是除了精确 next token 外每个 token 额外预测一个 future token。 这能解释为什么很多生产配置更倾向从MTP-1开始而不是一上来num_speculative_tokens3/4。第三篇Speculative Decoding理解“为什么 target 还要验证”读Fast Inference from Transformers via Speculative Decoding和Accelerating Large Language Model Decoding with Speculative Sampling。前者讲“用并行计算多个 token 来减少串行 decoding 次数而且不改变输出”后者讲 draft model 先生成短候选序列再由 target model 并行打分和 rejection sampling从而保持目标模型分布。这里你要建立一个核心心智模型普通解码 target 生成 token1 target 生成 token2 target 生成 token3 target 生成 token4 speculative decoding drafter 一次猜 token1 token2 token3 target 一次并行验证 token1 token2 token3 token4 接受几个就少跑几次 target decode所以acceptance rate 是核心指标。如果 drafter 猜得准target 一次验证能接受多个 token就加速。如果 drafter 猜得不准target 验证后大量拒绝反而多了 drafter 开销、通信开销、graph shape 开销吞吐可能下降。这也解释你之前的现象接受率从 0 修到非零只说明权重链路没完全坏但吞吐是否提升还取决于硬件、batch、并发、verify 开销、graph capture、prefix cache、通信开销。第四篇EAGLE / Medusa用来分清“不同 drafter 到底差在哪”EAGLE的核心不是原生 MTP head而是基于 feature-level autoregression 的 draft model。论文说它在 second-to-top-layer feature 层做预测并引入 advanced-one-token 的序列来降低 feature 预测的不确定性。EAGLE-2又进一步提出 context-aware dynamic draft tree因为 draft token 的接受率不仅和位置有关也和上下文有关它利用 draft model 的置信度近似 acceptance rate并报告 EAGLE-2 比 EAGLE-1 快 20%-40%。Medusa则是另一种思路给 LLM 加多个 decoding heads并用 tree-based attention 同时构造和验证多个候选 continuation。你可以这样区分MTP 模型原生带未来 token 预测能力常共享 embedding/head。 EAGLE 训练一个 feature-level drafter用 hidden state/feature 来猜。 Medusa 在模型上加多个 decoding headstree attention 验证候选。 draft model 外部小模型猜大模型验证。这对你看 vLLM/vLLM-Ascend 很有用因为配置里methodmtp/eagle/eagle3/draft_model/medusa背后不是一个东西。第五篇vLLM MTP 文档理解methodmtp为什么不是普通 draft modelvLLM 官方文档明确说MTP 是一种 speculative decoding 方法要求 target model 原生支持 MTP不同于 draft-model-based 方法它不需要单独提供一个 draft model。这句话对你现在最关键。它解释了为什么你之前看 vLLM 路径时会有这种感觉standalone vLLM: HF checkpoint ↓ vLLM native loader ↓ target MTP proposer/drafter ↓ 接受率正常因为 vLLM native loader 知道这个模型的 MTP 权重该怎么加载、怎么命名、怎么切、怎么和 target 共用部分结构。但 veRL hybrid rollout 里是另一条路HF checkpoint ↓ MindSpeed-Bridge / Megatron-Bridge ↓ 训练侧 local shard ↓ runtime update / direct-copy ↓ vLLM-Ascend drafter这时一旦权重名、QKV layout、TP shard、expert shard、MTP block 映射不一致程序可能还能跑但 acceptance rate 会掉。这就是你之前一直查qkv_proj.weight、MTP hidden、expert 权重同步的根本原因。第六篇vLLM-Ascend speculative decoding 文档最贴近你现在调的 NPU 场景vLLM-Ascend 文档说它的 speculative decoding 是proposer-verifier architecturevllm_ascend/spec_decode/里的 proposer 生成 draft tokensvllm_ascend/sample/里的 rejection sampler 用 target 输出验证 draft tokens。它还列出mtp是 “Multi-Token Prediction with shared embedding head”。 这就能解释你之前为什么看到一些实现要共享 target 的 embedding/lm_head这不是随便省事而是 MTP 结构本身就是这么设计的。vLLM-Ascend 还有两个你必须记住的限制第一Ascend NPU 的 fused attention decode round 有 token 数上限文档说(num_speculative_tokens 1)必须满足限制。第二DeepSeek MTP 由于只暴露单层 MTP 权重num_speculative_tokens 1尤其大于等于 3 时准确性和性能不一定有保证。这正好对应你之前遇到的num_speculative_tokens1/3 表现差异大 2 有时不支持或不稳定 接受率上去但吞吐不升 graph/cudagraph/ACLGraph shape 很敏感第七篇veRL MTP 文档解释为什么 rollout MTP 不一定带来吞吐收益veRL 的 MTP 文档非常值得你看因为它直接讲 RL rollout 场景。文档里写到启用 MTP 可以让 rollout acceptance rate 提升大约 14%但在 H20 GPU 上整体吞吐没有提升甚至略降并且以 H20 SGLang mimo-7B 为例启用 MTP speculative decoding 后 rollout throughput 下降约 50%当前建议暂时不要在推理阶段启用 MTP 加速。这句话非常适合解释你之前的实验结论acceptance rate 高不等于 end-to-end throughput 一定高。原因是 RL rollout 不是单请求低并发聊天它有这些额外成本1. actor 训练完要同步权重到 rollout engine 2. rollout engine 可能要 sleep/wake up 3. vLLM/SGLang 要处理大 batch、多 response、长序列 4. speculative decode 会扩展 verify token 数 5. NPU graph shape / communication / prefix cache 都会影响收益 6. drafter 本身也有计算和调度开销所以你看指标时不能只看acceptance_rate还要一起看perf/throughput timing_s/gen timing_s/update_weights response_length/max training/rollout_probs_diff_mean training/rollout_actor_probs_pearson_corrveRL Ascend 文档也列出了 MTP 配置项mtp.enable、mtp.enable_train、mtp.enable_rollout、mtp.detach_encoder、mtp.mtp_loss_scaling_factor、mtp.method、mtp.num_speculative_tokens等。 你可以按下面方式理解mtp.enable: 总开关表示这个模型/流程考虑 MTP。 mtp.enable_train: 训练时是否计算 MTP auxiliary loss。 mtp.enable_rollout: rollout 推理时是否启用 speculative decoding。 mtp.method: 推测方法常见为 mtp / auto / eagle 等具体实现路径。 mtp.num_speculative_tokens: 每轮想让 drafter 额外猜几个 token。你现在最该形成的“一句话理解”MTP 不是一个单独的加速按钮而是“模型结构/训练目标 推理 speculative proposer target verifier 权重同步链路 硬件调度”共同成立才有收益。更具体地说训练侧 MTP 让模型多学会预测未来 token。 对应 veRLenable_train、mtp_loss、labels、loss_scaling_factor。 推理侧 MTP 让 MTP module 作为 drafter/proposer 先猜 token。 对应 vLLM/vLLM-Ascendspeculative_config methodmtp。 验证侧 target model 对 draft tokens 做并行验证。 对应 vLLM-Ascendrejection sampler、block verify、entropy verify。 收益侧 接受 token 数 drafter/verify/通信/graph 额外成本才会变快。 对应你的实验acceptance rate、throughput、timing_s/gen、update_weights。我建议你实际阅读时这样安排第一天只看三篇Better Faster LLMs via MTP、DeepSeek-V3 的 2.2 MTP 部分、Speculative Decoding 论文。目标是能画出“drafter 猜target 验”的流程图。第二天看工程文档vLLM MTP 文档、vLLM-Ascend speculative decoding 文档、veRL MTP 文档。目标是把论文里的词对应到代码里的词proposer、verifier、rejection_sampler、speculative_config、num_speculative_tokens、enable_rollout。第三天再回到你的代码重点看 veRL 的 rollout 权重更新逻辑、vLLM-Ascend 的spec_decode/mtp、Qwen3.5 的 MTP weight loader。你之前踩的坑基本都在这里standalone vLLM 是 native loaderveRL hybrid 是 runtime direct-copy local shard二者权重路径不同所以接受率可能完全不同。