混合架构本来是给长上下文降成本的答案——把大部分全注意力层换成线性注意力,每步开销就不再随上下文线性膨胀。但有一笔账很多人没算过:剩下的那几个全注意力层,在 256k token 的语境里照样每步读完整 KV,反而成了长文本解码的新瓶颈。11 月 4 日挂上 arXiv 的一篇论文给了一个不动权重的解法:不重训、不改任何参数,只靠逐层搜索稀疏注意力配置,就让 Qwen3.5-122B-A10B 在 256k 上下文解码提速 2.23 倍,而且 21 个长上下文数据集精度不掉。
剩下的全注意力层,才是长上下文的账单
标准自注意力每生成一个 token,成本都比上一个更高:时间复杂度随序列长度平方增长,KV cache 随 token 数和并发请求数线性膨胀。混合模型的思路是把多数层换成廉价注意力,但留多少个全注意力层是预训练时焊死在权重里的:Qwen3.5-27B 是 64 层里留 16 层,gpt-oss-120b 是 36 层里留 18 层,Ornith-397B 是 60 层里留 15 层。这些层每步都要读全部上下文的 key,在长上下文任务里吃掉解码时间的大头,也决定了部署端能开多少并发。
方法:滑窗 + 前缀 + query 感知选页,逐层搜配置
论文的方案是一套组合式稀疏注意力,每个全注意力层只看三部分:近期 token 的滑动窗口、一段钉住的前缀、以及按 query 动态挑出的固定预算"最相关 token"(基于分页 KV 的 Quest 式选择)。
真正的关键在"逐层"二字:窗口多大、预算多少,不是拍脑袋定的,而是用 NSGA-II 多目标搜索(精度 vs 估计成本)为每一层单独搜出来的,搜索精度目标用 BABILong-qa1(64k)和 LongBench Qasper 的前 100 个样本估计。这套搜索不便宜但可控:4B 到 120B 的模型在 A100 上花 8.6 到 34.2 GPU 时,122B 和 397B 换 4 张 GB200 的节点,也就 31.3 到 58.4 GPU 时。实现直接装进 vLLM,推理引擎不用换。
两个诚实的限定:prefill 完全不动;KV cache 内存一 byte 都不省——省的是每个解码步要读的 key 数量,是时间,不是显存。
结果与边界:白拿的 2 倍,和拿不到的地方
评测覆盖六个模型:Qwen3.5-4B/27B/122B-A10B、Ornith-1.0-397B、Gemma-4-31B、gpt-oss-120b,跑 21 个长上下文数据集(BABILong qa1–qa5 的 64k 档加 LongBench 的 16 个英文子集),并且剔除了搜索阶段用过的样本,评测全部落在 held-out 数据上。
结果是:每个模型都存在至少一套配置,在全部数据集上保住基线精度,平均差距不超过 0.5 个百分点。提速在 64k/256k 上下文(batch 4)分别为:Qwen3.5-4B 1.26/2.22 倍,Qwen3.5-122B-A10B 1.20/2.23 倍,Ornith-1.0-397B 1.16/2.06 倍——三个收益最好的模型,256k 档全部翻倍。
边界同样写得很清楚:短上下文下,所有配置都比原模型更慢;稠密模型收益有限——Qwen3.5-27B 在 64k 只有 1.11 倍,Gemma-4-31B 在 128k 是 1.22 倍,因为 27B 模型 64k 解码一步 47.1ms 里 19.4ms 花在读权重上,这部分注意力优化救不了;gpt-oss-120b 也只有 1.16 倍(128k),因为搜出来的配置保留了它大部分全注意力层。
为什么值得注意
对比一下重训路线的成本:LoLCATs 给 Llama 3.1 405B 做注意力迁移花了 454 个 H100 GPU 时;Jet-Nemotron-2B 拿到 64k 12 倍提速,代价是 600B token 的训练量和 18,328 个 H100 GPU 时。本方法按 GPU 时计价的配置搜索,意味着每出一个新模型都可以重搜一遍配置,摊销逻辑完全不同。
另一个有意思的细节:搜出来的配置不是一刀切。Ornith-397B 的最佳精度配置里,15 个全注意力层有两个干脆保留完整注意力,各层窗口从 256 到 4096 不等——"每一层需要看多少上下文"本身,就是被搜索出来的结论,而不是架构师的直觉。
作者也自报了一个口径:"据我们所知,这是首个在 100B+ 规模上评测的免训练稀疏注意力方法。"听个参考即可,单源声明当结论用要打折。
论文原文见 arXiv:2611.06133。下次做长上下文容量规划,不妨先问每一层:你真的需要看完整 256k 吗?