上下文窗口 · 注意力 · 底层原理

从 256K 到 1M:大模型上下文的四堵墙

参数一个没变,窗口翻四倍,代价却是十六倍的算力、四倍的显存、没见过的位置和悄悄缩水的有效长度

2026-09-19底层原理 · 深度科普约 14 分钟

00引言:发布会为什么都在抢"百万上下文"?

规格表上最亮的数字,也是最难做实的一个。

2026 年 9 月的模型牌桌上,上下文长度是规格表最靠前的数字。Gemini 3.8 Flash、GPT-5.6、Claude Opus 4.6、Kimi K3,清一色 1M 起步,Grok 4.1 Fast 标到 2M。

另一边,一整批主力型号停在 256K 上下:Kimi K2.5、Qwen3.5 系列、Mistral Small 4。GPT-5.4 停在 128K,而且超过 272K 的输入直接翻倍计价。

参数规模都在涨,窗口却分成两派。256K 阵营是懒得加吗?不是。从 256K 到 1M 的路上立着四堵墙:算力、显存、位置编码、数据。窗口翻四倍,每堵墙的代价都不止四倍。

这篇文章把四堵墙挨个讲清楚:各自卡在哪,工程师怎么拆,拆完还剩什么。

01上下文窗口里装的到底是什么?

一本叫 KV Cache 的账。

先回答一个更基础的问题:所谓上下文窗口,装的是什么。

模型生成文字的方式叫自回归:一次只吐一个 token,吐完这个,再决定下一个。你看到的流式输出,背后是几百次这样的循环。

每个新 token 出生前,都要做一次注意力计算:回头看清前面全部历史,再决定说什么。要看清历史,靠的是每个历史 token 身上的两个向量——键(K)和值(V)。

这些 K 和 V 用完不能扔。后面每一个新 token 都要来查。所以推理引擎把它们写进一本账:KV Cache。生成第 1000 个 token 时,前面 999 个的 K、V 直接翻账本,不用重算。

上下文窗口的长度,本质就是这本账能记多少页。256K 是 26 万页,1M 是 100 万页。

但把账本从 26 万页加到 100 万页,代价远不止纸多买四倍。为什么?先算三笔账。

02从 256K 到 1M,参数一个没变,差在哪?

三笔账:十六倍的算力,四倍的显存,看得见的延迟。

第一笔,计算账。注意力的原理是两两配对:n 个 token,每个都要和其他所有 token 算一次相关性,配对数是 n 的平方。长度乘 4,配对数乘 16。256K 的窗口里大约 690 亿次配对,1M 是一万亿次。每一层都要来一遍,几十层叠上去。

第二笔,显存账。KV Cache 随长度线性涨,乘 4。听着温和,基数吓人。一个做过 GQA 压缩的 7B 模型,每 token 的账本约 128KB,1M 上下文单个请求的账本就是 128GB——两张 80GB 的 H100 刚够装一个请求的记忆,权重和别人的请求还没地方放。

第三笔,延迟账。预填充阶段要把这一百万 token 全部算完,模型才能吐第一个字。长文基准的常规测试里,1M 俱乐部的首字延迟普遍在 5 到 17 秒。有个真实场景:把 800 页招股书塞给 1M 模型,进度条转了半分钟才蹦出第一个字,用户以为它挂了。

账目256K1M变化
注意力配对数≈6.9×1010≈1.1×1012×16
KV Cache(GQA 后的 7B)≈32GB≈128GB×4

每 token 的 KV 以 128KB 计(GQA 压缩后)。FFN 部分随长度线性增长,但长序列下注意力才是主角。

三笔账背后是同一套结构性约束。拆开看,就是四堵墙。

03第一堵墙:注意力为什么天生是平方的?

平方可以摊、可以省,不能拆。

数学上没有取巧的余地。注意力矩阵是 n 乘 n:第一行是第一个 token 对所有人的关注度,第二行是第二个 token 对所有人的,一行都不能省。因为任何一个配对都可能重要——合同第 3 页的定义,约束着第 147 页的条款。长程依赖恰恰藏在这些配对里。

FlashAttention 名气很大,但它省的是显存读写:不把 n×n 的大矩阵实体化,边算边丢。计算复杂度没动,平方还是平方。

想打破平方,思路只有两个。一是稀疏化:每个 token 只看局部邻居,配对数降到 n 乘 w。代价是全局视野——第 3 页和第 147 页的关联,窗口外看不见。二是分治:把序列切片分给一个集群,Ring Attention 让每张卡只算自己那段,卡间传递中间结果,Gemini 的长文训练被公开分析与这条路相关。但分治只是把平方摊到更多硬件上,复杂度本身没变。

所以第一堵墙的真相是:平方可以摊、可以省,不能拆。1M 的算力成本,物理上就比 256K 贵一个数量级。

04第二堵墙:KV Cache 为什么逼着厂商改架构?

从 GQA 到 MLA,账本越记越薄。

显存这堵墙,逼出了近年注意力架构最大的变动。

MHA 时代,每个 token 每层存一套 K 和 V,7B 模型每 token 约 512KB。窗口上 1M,单请求账本 512GB,没有一台机器伺候得起一个请求。

于是有了 GQA:多个注意力头共享同一套 K、V。32 个头共享 8 套,账本压到四分之一。更激进的 MQA 让所有头共享一套,再省,但精度开始掉。

真正的重武器是 MLA(Multi-head Latent Attention)。不存 K、V 本体,存一个低维压缩的潜在向量,用时再投影还原——等于把账本从原件换成缩微胶片。Kimi K2.5 靠 MLA 把长文处理的显存带宽省下四到五成,这是它敢把 256K 做便宜、做出口碑的底气。

推理侧还有一手挤水分:KV 量化,把账本从 FP16 压成 INT8 甚至 INT4,再瘦一半。

但方向要看清:这些技术都是把账本压薄,不是让账不用记。显存是推理服务器上最贵的硬通货,账本占得越多,并发越少,每个 token 摊到的成本越高。多数开源模型停在 256K 量级,不是模型不行,是这个量级的显存性价比最好。

05第三堵墙:位置编码的"里程表"没刻到 1M

训练没见过的角度,推理时全是未知地带。

前两堵墙在推理侧。第三堵墙在训练侧,更隐蔽。

注意力本身不知道词序。把一句话的词打乱,注意力的计算方式不变。所以模型必须额外获得每个 token 的位置信息,这就是位置编码。

主流方案 RoPE 的思路很优雅:给每个位置一个旋转角,第 i 个位置转 i 乘 θ 度,注意力计算时角度差自动携带相对距离信息。

问题在这里。训练时模型只见过一定范围内的角度:多数模型预训练序列在 8K 到 64K,旗舰专门加练一阶段,也多停在 128K 到 256K。推理时直接外推到 1M,等于开着里程表只刻到 32 万公里的车跑 100 万公里——指针会停在哪,模型完全没见过,输出质量断崖式下跌。

工程补救形成一个谱系。位置插值 PI:把 1M 的位置线性压缩进已见范围,等于把刻度磨细,代价是相邻位置难分辨。NTK-aware 缩放:改 RoPE 的频率基底,高频刻度保持细、低频刻度拉长,像给里程表换一套更好的齿轮。YaRN:按频率分段区别对待,再加一个温度系数,是目前最常用的组合拳。

但缩放技巧只保证外推不崩。要把长文能力做实,还得补一阶段长上下文继续预训练——几亿到几千亿 token 的真金白银。这是 1M 阵营和 256K 阵营的分界线:不是不想扩,是这一阶段的钱和数据,不是人人都拿得出。

06第四堵墙:塞进去 1M 个 token,模型真的读了吗?

装得下,和用得上,隔着一整个 RULER。

前三堵墙说的是"装不装得下"。第四堵墙最伤人:装下了,也不一定用得上。

大海捞针测试(NIAH)曾让很多模型拿满分:把一句话藏进几十万字里,模型能找出来。于是长上下文一度被宣传成"已解决"。NVIDIA 的 RULER 基准专门拆这个台,四类任务:多路检索、变量追踪、聚合统计、多文档问答。结论:所有模型的成绩都随长度阶梯式下滑,宣称长度和有效长度之间普遍差好几倍——RULER 给"有效"定的门槛是 85 分,多数模型的有效长度远低于规格表数字。

更直观的是 lost in the middle:信息在开头结尾记得牢,埋在中间就漏。有个真实体感的例子:工程师把整个前端仓库塞进 1M 窗口,问"购物车按钮为什么点不动"。模型答得头头是道,引用的却是三个月前就删掉的旧组件。材料都在窗口里,用没用上另说。

同一家也分高下。GPT-5.6 系列都标 1.1M,旗舰款的多针检索成绩 90% 以上,便宜款 Luna 只有 41%。窗口一样大,读的能力差一倍。

这堵墙的根子在训练数据。预训练语料里,天然连贯的百万 token 文档几乎没有——书、论文、代码库,摊开也很少有这么长的连续文本。模型的长文能力来自见过长样本,见都没见过,谈何学会。合成拼接能补一部分,治标。

所以厂商自己也谨慎:Claude 的 1M 长期待在 beta 通道,GPT-5.4 超 272K 翻倍计价。规格表敢写,账单上见真章。

07拆墙的人:1M 牌桌上的四种解法

没有人全拆了,各自拆了自己拆得起的那几堵。

墙这么硬,2026 年为什么还是出现了一整个 1M 阵营?因为拆墙的手艺也在升级。四种主流解法。

一,序列并行的工业化

Ring Attention 及其变体把百万 token 切片分给一个集群,每张卡算一段、卡间传递中间结果。训练侧做得动了 1M,推理侧的显存压力也被分摊掉一部分。Gemini 系的长文能力,被公开分析与这条路相关。

二,架构换血

注意力层和线性注意力、SSM 层混搭(Mamba 一系),把平方压成线性,MiniMax M 系列是代表。代价是精确检索弱一些——适合读长篇,不适合抠细节。这是唯一动了"平方"本身的路线。

三,MLA 加长文继续预训练

Kimi 从 K2.5 的 256K 走到 K3 的 1M,靠 MLA 省下的显存,加上一阶段专门的长文训练。K3 开源,2.8T 参数、104B 激活。窗口翻四倍的路线被走通了:先让账本变薄,再让模型见够长文。

四,推理侧挤水分

KV 量化、上下文缓存、SnapKV 一类"只留相关页"的压缩,都在把 1M 的使用成本往下压。缓存命中价能到未命中价的五十分之一,上一篇算过这笔账。

模型上下文长文技术路线长文成绩(2026-09)
Kimi K31MMLA + 长文继续训练AA-LCR 82.7%
Gemini 3.8 Flash1M序列并行 + 长文训练AA-LCR 81.0%
MiniMax M31M混合架构(线性注意力)AA-LCR 80.3%
GPT-5.6 Sol1.1M未公开多针检索 91.5%
GPT-5.6 Luna1.1M未公开多针检索 41.3%

AA-LCR 为长文推理基准,多针检索为 MRCR 八针测试。数据来自公开榜单。

看最后两行会发现:同一个系列、同样大小的窗口,读的能力能差一倍。再看整张表:长文基准排前面的,和规格表上写 1M 的,不总是同一批模型。没有一家把四堵墙全拆了——各自拆了自己拆得起的那几堵,拆不掉的部分,写进了价格。

08收尾:你需要为 1M 付费吗?

需要同时看全,才轮到 1M。

算个体感。1M token 约等于 1500 页 A4,一部三卷本长篇小说,或一个中型代码库。256K 大约是一本书,或六七十个源文件。

真需要"同时看全"的场景,1M 无可替代:整库代码重构、上百页合同的交叉核对、多份研究报告的证据汇总、Agent 连续几百步的任务记忆。这些任务的关键词是交叉——答案要同时用到散落各处的材料,切开检索就断了线索。

但如果任务只是从一大堆材料里找几段,256K 分块加检索加上下文缓存,成本能低一个数量级。缓存命中的输入价格只有未命中的五十分之一。

一个朴素的判断标准:你的问题,需要模型同时看到所有材料吗?不需要,检索就够了。需要,才轮到 1M。

下次看到"1M 上下文"四个字,多问三句:预填充多慢,显存谁付,有效长度多少。

至于下一代——如果线性注意力真正成熟,上下文窗口这个规格,会不会像当年的手机内存一样,从发布会头牌慢慢变成没人细看的参数。这个问题,留给下一场发布会。