之前发布的技术解读虽然只是浅尝辄止,但也抛出了几个值得深入探讨的概念。今天我们就花些力气,从工程实现的角度把这些技术模块拆开来看。全文阅读大约需要10分钟,如果时间紧张,可以直接跳到最后的结论部分。
在智谱 GLM-5、5.1、5.2 的系列技术报告中,可以看到一个清晰的演进脉络:围绕 1M 超长上下文的工程落地。这里面有两个核心技术方向——DSA(DeepSeek Sparse Attention,深度求索稀疏注意力)和 MTP(Multi-Token Prediction,多令牌预测)。DSA 从计算复杂度入手,降低长上下文场景下的算力开销;MTP 则从推理流程入手,提升生成阶段的响应速度。今天我们把重点放在 MTP 这条线上。
MTP:不只是“多预测几个词”
MTP 的核心机制是在主干网络之上附加一组轻量级的 Transformer 模块和输出头,用来并行预测未来多个 token(智谱的实现中取了 3 个)。这些预测出的 token 会作为“草稿”喂给主干网络(即目标模型)进行逐位验证。验证通过的 token 被采纳,未通过的从第一个被拒绝的位置截断,然后以验证后的正确结果作为下一轮的输入,重复这个过程直到生成结束。
需要特别说明的是:MTP 整个“预测草稿 → 目标模型验证”的流程,本质上不是一个物理上的网络架构,而是一个推理阶段的工作流。它更像是给模型配了一个“快速草稿员”——先快速写几个候选,再由“主笔”审阅把关。
Indexer Share:稀疏注意力的“缓存复用”
Indexer Share(在 GLM-5 的技术报告中称为 Indexer Cache)解决的是 DSA 中索引计算冗余的问题。
要理解这个组件,得先回顾一下 DSA 原本的设计。在标准 DSA 架构中,每一层 Transformer 都配备了一个独立的 Indexer,用于计算当前层应该关注哪些历史 token。之所以这样设计,是因为不同层处于不同的处理阶段:浅层主要负责捕捉局部语法和短程依赖,中层构建语义表示,深层进行高层次的推理和决策。各层的注意力焦点天然不同。
但智谱的研究团队发现了一个有趣的现象:相邻层的 top-k 索引重叠率高达 70%-100%——也就是说,相邻层选出来的“最相关 token 集合”几乎是一样的。这就意味着大多数 Indexer 的计算是冗余的。
Indexer Share 的做法很直接:每 4 层 Transformer 共用一个 Indexer——保留第 1 层的 Indexer 计算结果,后面 3 层直接复用,不再运行自己的 Indexer。在 GLM-5.2 的 78 层 DSA 中,有 57 层(约 73%)的索引计算被共享掉了,在 1M 上下文下每 token 的 FLOPs 降低了 2.9 倍。
Indexer Share 在 MTP 层中的特殊作用
除了在主干网络中降低重复的索引计算,GLM-5.2 在 MTP 层也引入了 Indexer Share(两边独立,不共享数据)。
衡量 MTP 效果的核心指标是接受率(Acceptance Length)——接受率越高,说明草稿模型预测得越准。
这里有一个微妙的工程问题。假设输入是“今天天气”,MTP Step 1 预测下一个 token t5(比如“很好”),Step 2 预测 t6(比如“啊”)的时候会参考前面的内容来生成。这就导致了一个连锁反应:Step 2 的草稿是基于“输入 + Step 1 的草稿”来生成的,越往后误差积累越严重,接受率就会越低。
问题出在注意力计算上。Step 2 做自注意力时,会同时看到来自目标模型的高质量 token(h1-h4)和来自 MTP 层的低质量草稿 token(h5')。h5' 的低质量 KV 会“污染”注意力计算结果,导致 Step 2 的草稿质量下降。
Indexer Share 在这里的作用是限制注意力范围:它复用了 Step 1 的 attention mask,而这个 mask 里压根不包含 h5'(因为 Step 1 时 h5' 还不存在)。所以 Step 2 做注意力时只能看到 h1-h4,h5' 自己的 KV 被 mask=0 挡在了外面。注意力计算只受高质量 KV 影响,Step 2 草稿的接受率因此从 4.56 提升到了 5.10。
代价是 Step 2 看不到 h5' 自己的信息——少了一个信息源。但实验表明这个代价值得。
KV Share:避免 KV Cache 的重复劳动
KV Share 同样作用于 MTP 层,解决的是 KV Cache 重复计算的问题。
MTP 层在做自注意力时,需要用到前面所有 token 的 Key(K)和 Value(V)向量。这些 KV 值在主干网络 forward 时其实已经算过一遍了。如果没有 KV Share,MTP 层每次都要重新算一遍,造成大量的冗余计算和显存开销。
KV Share 的做法是:让 MTP 层直接复用主干网络已经算好的 KV Cache。只有在处理 MTP 新预测出的 token 时,才需要计算新的 KV 值。
这与 Indexer Share 形成了很好的互补关系:Indexer Share 决定“看哪些 token”(通过复用 top-k 索引),KV Share 决定“怎么高效拿到这些 token 的 KV 值”(通过共享 KV Cache)。
Rejection Sampling:从“选冠军”到“看默契”
这是一个算法层面的优化。在介绍它之前,需要先了解它的前任——Target-Only。
Target-Only 的逻辑很简单:草稿模型猜了一个 token,目标模型看看它是不是自己最想要的那个。如果不是,就拒绝。
问题在于:如果目标模型的概率分布比较“平坦”——比如三个候选词分别是 35%、33%、32%,没有明显赢家——那 Target-Only 的接受率就会很低,因为草稿很难恰好命中那个微弱的第一名。
Rejection Sampling 换了一个思路:它不再只看目标模型的“首选”是什么,而是同时看草稿模型和目标模型的分布,问一个不同的问题——“这两个模型的想法有多一致?”
具体来说,Rejection Sampling 对每个候选词取两个模型概率中的较小值,然后求和。这个和就是接受率——草稿被采纳的概率。
关键区别在于:
- Target-Only 只问:“这个词是不是大模型的最爱?”——模型犹豫时就遭殃。
- Rejection Sampling 问的是:“草稿模型和大模型是不是在唱同一首歌?”——即使都不太确定,只要口味一致,接受率依然可以很高。
这也是为什么 GLM-5.2 要用 Rejection Sampling 替换 Target-Only:在 RL 训练过程中,模型的输出分布会不断变化,有时很“确定”(某个词概率 90%),有时很“犹豫”(几个词概率差不多)。Target-Only 在模型“犹豫”的时候接受率会暴跌,而 Rejection Sampling 看的是两个模型的默契程度,对熵的波动天然具有鲁棒性。
End-to-End TV Loss:让训练目标与验证逻辑对齐
Rejection Sampling 说的是推理时主干模型怎么验证草稿模型的生成。End-to-End TV Loss 则是在训练时就把草稿模型的优化目标改了——从传统的“猜对下一个词”(交叉熵损失),改为直接优化分布重叠面积,也就是 Rejection Sampling 计算接受率时用的那个量(Σ min(p, q))。
这样训练出来的草稿模型,其输出分布的形状与目标模型更接近,Rejection Sampling 的接受率自然水涨船高。训练目标和推理验证逻辑对齐了,整个系统的效率也就上去了。
结论
这四个概念可以分成两个层面来看。
架构层面的优化(Indexer Share + KV Share):Indexer Share 在主干网络中通过合并相邻层的 Indexer 节省了约 73% 的索引计算量;在 MTP 层中则通过复用前一步的 mask 来限制注意力范围,阻止低质量 KV 污染后续草稿的计算。KV Share 解决了 KV Cache 的重复计算问题,让 MTP 层直接复用主干网络的计算成果。
算法层面的优化(Rejection Sampling + End-to-End TV Loss):Rejection Sampling 改变了验证机制——从“必须命中第一名”变为“看两个模型的分布有多重叠”,对模型熵的波动具有天然鲁棒性。End-to-End TV Loss 则从训练端发力,让草稿模型的优化目标与 Rejection Sampling 的验证逻辑对齐。
四项优化叠加,将 GLM-5.2 的 MTP 接受长度从 4.56 提升到了 5.47,增幅达 20%。对于需要处理 1M 超长上下文的场景来说,这个提升在工程上的价值不言而喻。
对于希望在实际业务中接入 GLM 等国产大模型的开发者而言,通过 4SAPI 这类api中转站可以大幅降低多模型集成的时间成本。4SAPI中转站提供了标准化的接口协议转换能力,覆盖了包括智谱 GLM、阿里 Qwen、DeepSeek 在内的主流国产模型生态,开发者无需为不同模型分别维护接入逻辑,一套接口即可完成多模型调度。在国产化替代和混合模型架构成为主流趋势的背景下,这类基础设施的价值正在被越来越多的企业级用户所认可。