能接收一百万 Token,只是长上下文问题的开始
长窗口不是把 max_length 改大。先分清 checkpoint 支持、服务准入、训练适配与任务有效长度;再检查位置坐标、信息路径、逻辑 KV、物理分配、证据选择与跨段状态。最后用任务、位置、长度和系统指标证明它真的可用。
“标称、准入、训练、有效”不能共用一个窗口数字
Tokenizer 通常只负责把输入变成 token,并不替 checkpoint 决定可用窗口。长上下文要分别核对模型/配置声明、运行时实际准入、训练与适配长度分布,以及目标任务达到质量和成本门槛的有效长度。
T_input 常包含系统指令、工具 schema、历史消息、用户内容与多模态输入折算;T_output reserve 是为输出预留的 token。不同 API 的计数、截断与输出占窗规则不同,必须以当前模型文档和返回的 usage 为准。
| 口径 | 由谁决定 | 真正说明什么 | 不能推出什么 |
|---|---|---|---|
| 模型 / 配置声明 | 权重、位置方案、模型卡与配置 | 发布方声称该 checkpoint 可接受或评测到的范围 | 当前部署一定开放同样长度 |
| 运行时准入 | API、runtime、显存与调度策略 | 本次输入加输出预算是否被服务接收 | 模型会稳定利用每个位置 |
| 训练 / 适配分布 | 预训练、继续训练和长文采样配方 | 模型真正见过哪些长度、任务与位置分布 | 所有目标任务都能外推到最长点 |
| 任务有效长度 | 你的评测集、SLO 与风险门槛 | 在给定任务和长度分布上仍可接受的最大区间 | 能迁移成另一任务的通用“真实窗口” |
找一个随机密码,与汇总 300 份合同的例外条款,不是同一难度
前者可能只需在干扰文本里定位一条显眼字符串;后者要召回多条分散证据、识别否定与版本、按规则聚合,再给出可追溯出处。单针准确率很高,也不能证明第二种任务同样可靠。
模型声明像仓库设计图,服务准入像今天实际开放的库位,训练分布像工人练过的货架与订单,有效长度才是他在时限和错误率门槛内真能找齐、核对并打包的范围。
六类责任都要交代,但不是六个模块都要安装
许多争论把问题压成“长窗口还是 RAG”。更准确的做法是逐层问:坐标还能解释吗?信息怎样可达?逻辑状态有多大、物理上怎样放?证据是否需要筛选?有限窗口外保留什么?最后怎样证明有效?一次性且资料已装得下的任务可以不做检索,有限会话也可以不做跨段状态,但省略必须是明确选择。
位置、连接、跨卡切分是三份不同契约
RoPE/YaRN 处理位置相位与训练外坐标,Full/SWA/Sparse/Linear 等机制决定信息路径,Context Parallelism(上下文并行,CP)只把序列张量切到多张卡。坐标可表示,不代表远处有直达边;有直达边,不代表权重学会利用;跨卡算得动,也不代表模型能力变长。
RoPE · Rotary Position Embedding:位置相关部分依赖相对位移
RoPE 让每对 Q/K 维度按不同频率旋转,使点积中的位置项依赖 m−n。超出训练长度后,频率与内容表示的组合可能进入模型不熟悉的分布;只放大 position id 或配置上限,不是能力证明。
YaRN · Yet another RoPE extensioN:不只是“把坐标压短”
YaRN 组合 NTK-by-parts 的分频处理与 attention logit scaling。原论文主要结果包含少量长上下文微调,也报告 Dynamic-YaRN 在不微调下继续外推;“10× 少 token、2.5× 少训练步”是相对论文所选先前方法和实验,不是任意模型的固定节省。
Full Attention:因果 Prefill 每头每层有 T(T+1)/2 个可见 pair
位置 t 可直接给 0…t 的历史分配权重。FlashAttention 用 tiling 与 online softmax 减少 HBM 往返和中间量,仍计算算法意义上的精确注意力;它不删除 token pair,也不扩 checkpoint 的有效长度。
SWA / Sparse:减少直达边,不等于免费保留全局访问
Mistral 7B 的 Sliding Window Attention(滑动窗口注意力,SWA)让每层读取固定近邻窗口,并可用 rolling buffer 限制 KV。其他稀疏模式可加入全局 token、块或跨段边;成本下降时必须列出哪些远处位置仍能直达、哪些只能跨层间接传播。
Linear / Recurrent:固定的是 Decode carry,不是无损记忆
历史被更新进固定形状或有界状态,再与当前 token 交互。流式 Decode 的 carry 可不随已解码长度增长,但训练/Prefill 仍处理 T 个位置;有限状态要共享容量,不能据此承诺随机找回任意久远原文。
Context Parallelism:分摊每卡激活,不减少全局语义工作
Megatron Core 的 CP 沿序列维切分输入与激活;attention 仍要让本地 Q 与全序列 KV 交互,因此各 rank 必须交换 KV。它可降低单卡激活压力并并行 prefill,却不改变 mask、总 token pair、训练分布或模型输出定义。
逻辑 KV、物理分页、外部检索与压缩状态不能互相冒名
它们都被口语称为 memory,却处在不同层。PagedAttention 管“同一批逻辑 KV 怎样放”,Prefix Cache 管“哪些已算前缀可以复用”,RAG 管“哪些外部证据进入输入”,递归状态管“窗口外历史怎样有损延续”。
逐 token 逻辑状态与物理块
KV Cache 避免 Decode 每步重算历史表示。PagedAttention 把逻辑块映射到非连续物理块,降低预留与碎片,并能按实现共享引用;它不减少 checkpoint 规定的逻辑 KV 元素,也不提高答案准确率。
可更新、可授权的外部证据
按 query、权限与时间筛选文档或结构化记录,再把证据和出处送入窗口。它可缩短输入并更新知识,风险是漏召回、切块断义、hard negative、排序偏差与权限过滤错误。
有限窗口外的有界摘要
可以是文字摘要、结构化槽位、递归神经状态或压缩记忆。Infini-attention 把局部因果注意力与长期线性压缩状态放在同一 block;有界资源来自压缩,不等于旧原文可逐字无损恢复。
索引负责找文件,长窗口负责跨文件读,prefix cache 负责别重复算
先用符号、路径、关键词与向量索引缩小候选文件;把相关实现、测试和调用链送入长窗口;若多轮请求产生相同 token prefix,再复用对应 KV blocks。vLLM 的实现按 parent hash、当前 block token IDs 与 LoRA/多模态/cache salt 等额外 namespace 查找,并只缓存完整块;“语义相似”但 token 不同不会自动命中。
截至 2026-07-14,Google 长上下文指南仍把 1M+ 输入用于长文、代码与多模态场景,同时建议删除不需要的 token,并明确多针准确率不等同于单针;当前缓存文档则说明 Gemini API 对共同前缀可使用 implicit caching。具体模型窗口、最低缓存 token、计费与命中字段会变化,页面只保留核查日期,不把它们写成跨模型常量。
32K → 128K:因果 pair 约 16×,逐 token KV 正好 4×
先算模型级逻辑工作,再讨论 kernel、分页、并行与调度怎样改变物理执行。把这两层混在一起,最容易把“单卡放得下”误报成“总工作变少”。
536,887,296 → 8,590,000,128
取 32K=32,768、128K=131,072,每头每层的下三角可见 pair 比例约 15.9996×。FlashAttention 不删除这些 pair。
32K → 128K:约 4×
逐 token KV 按序列长度线性增长。层数、KV 头、head dim 和 dtype 不变时,长度四倍就是容量四倍。
20 次相同前缀 ≠ 必算 20 遍
Prefix Cache 命中可跳过已缓存完整块的 prefill;仍要处理新后缀、做 cache lookup 并保留/读取 KV。收益取决于 token 级匹配、namespace、驻留与驱逐。
B 为并发序列数,L 为层数,T 为每序列缓存长度,H_KV 为 KV heads,d_h 为每头维度,s_bytes 为每元素字节。它算整个模型的逻辑张量,不是 Tensor/Context Parallel 后的单 rank 驻留量。
32 层、8 KV 头、head dim 128
32K 时为 32×32768×8×128×2(K/V)×2 bytes = 4 GiB;128K 时为 16 GiB。若有 16 条同长并发序列,模型级逻辑 KV 是 256 GiB,尚未计权重、激活、临时 workspace、页表与对齐。PagedAttention 不能把这 256 GiB 的逻辑元素凭空变少,但可减少物理预留/碎片,并在前缀确实相同时共享块。
| 手段 | 真正改变 | 没有改变 |
|---|---|---|
| GQA / MLA checkpoint | 每 token 的逻辑 KV 表示宽度 | 不能靠 Serving 开关迁移既有权重 |
| KV 量化 | 每元素字节和量化 metadata | token 数与模型质量风险 |
| PagedAttention | 物理分配、碎片、共享与回收 | checkpoint 的逻辑元素数 |
| Prefix Cache | 重复前缀的 prefill 计算 | 首次 prefill、后缀与 Decode |
| Context Parallelism | 每 rank 的序列切片与并行时间 | 全局 mask、pair 集合与模型能力 |
| Chunked Prefill | 调度粒度和长短请求干扰 | 整段 prompt 最终需处理的语义工作 |
FlashAttention 能显著减少 Full Attention 的 IO 和峰值中间量,却不会把所有硬件上的端到端耗时固定成某个公式;线性、稀疏或跨卡方法也可能受小矩阵、门控、通信和 kernel 成熟度限制。最终要按 Prefill/Decode、长度、batch、缓存命中与并发分别测。
先问证据全集是否值得入窗,再问是否需要全局联合推理
查询是否“稳定”不是 RAG 与长窗口的分界:同一索引完全可以服务不断变化的问题。更可靠的入口是证据全集能否装入当前准入预算、是否频繁更新或受权限约束,以及答案是否需要跨大部分原文做精确交互。2024 年一项三模型、九个 query-based 数据集研究中,资源充足的长窗口平均优于其固定 RAG 配方,而 RAG 更省输入成本;这只是特定模型、retriever 和 top-k 的快照,说明应按任务路由,而不是宣布永远赢家。
不要只报最大长度,要画出“任务 × 长度 × 位置”的退化曲线
RULER v3 在 17 个当时标称至少 32K 的 aligned 模型上跑 13 个合成任务:尽管 vanilla Needle-in-a-Haystack 接近满分,只有约一半在 32K 超过作者定义的 85.6%“有效长度”阈值。这个阈值取自 Llama2-7B 在 4K 的分数,是 2024 论文的诊断尺,不是今天所有模型或业务的通用及格线。
| 评测 | 覆盖 | 最适合回答 | 不能单独证明 |
|---|---|---|---|
| RULER | 13 个可控合成任务;检索、多跳追踪、聚合、QA | 长度和任务复杂度升高时怎样退化 | 真实领域质量与当前产品排名 |
| LongBench | 4,750 个实例、21 个数据集、六类中英任务 | QA、摘要、few-shot、代码等多任务表现 | 精确控制证据位置与任意超长长度 |
| Lost in the Middle | 多文档 QA 与合成 KV retrieval 的位置扫描 | 同一证据换到开头、中间、末尾会怎样 | 所有新模型都必然保持同一 U 形偏差 |
| 业务回放 | 真实文档、权限、提示模板、工具与长度分布 | 你的有效窗口、SLO、成本和失败归因 | 离开当前版本与流量后的普遍结论 |
能力轴:从检索到综合
单针检索只测定位;多针测同时召回;变量追踪与多跳测跨段关系;聚合测计数、排序、归纳和冲突消解。真实长文任务至少覆盖后两类。
位置轴:固定内容,只移动证据
Lost in the Middle 在其 2023 模型快照中观察到开头/末尾较高、中间较低的 U 形曲线。它提供的是控制变量协议,不是永恒定律;当前 checkpoint 仍应扫描开头、中间、末尾,并加入相似 hard negatives。
长度轴:不要只测 4K 与最大值
建议覆盖 4K、8K、16K、32K、64K、128K 等业务关键点,画准确率与拒答率曲线。可用窗口是达到质量门槛的区间,不是配置文件中的一个数。
系统轴:TTFT、TPOT、显存、费用和 Goodput
长 prompt 首先推高 Prefill 与 Time to First Token(首 token 延迟,TTFT);在增长型 KV 架构里,更长历史也会增加 Decode 每步读取,使 Time per Output Token(每输出 token 时间,TPOT)可能随长度变差。按并发、缓存命中和长度分布测 P50/P95 与达标吞吐。
归因轴:证据没进来、被截断、没用对,还是缓存错了
RAG 要分别记录候选召回、权限过滤、重排、装配与生成正确率;长窗口要记录实际 token 数、截断与证据位置;Prefix Cache 要记录命中 token 和 namespace;有损状态要测压缩前后信息保留。最终错误才能回到负责的那层。
不要给产品一个脱离任务的“真实窗口”单值。交付应是一组版本化曲线:checkpoint/runtime 版本、任务切片、证据位置、输入/输出长度、并发与缓存状态 → 质量、拒答、TTFT、TPOT、显存、费用和 Goodput。
一手来源与证据边界
优先使用论文、官方文档、官方模型卡和代码仓库。页面中的数字只代表来源所述设置,不自动外推到其他模型与数据。
RoPE 的旋转位置表示,以及 Q/K 点积中的相对位置差。
NTK-by-parts 频率处理、attention scaling、少量长上下文适配与动态外推的实验边界。
滑动窗口注意力与 rolling buffer KV Cache 的真实模型实例。
精确全注意力的 IO-aware 实现不会减少 token pair 或改变 mask。
KV 逻辑块到物理块的映射、碎片控制、引用计数与写时复制共享。
相同 token prefix 的 KV block 复用、hash namespace、完整块与 cache salt 边界。
把参数记忆与可检索的外部非参数记忆组合。
三种 2024 模型、九个 query-based 数据集上的 RAG/长窗口对照与 Self-Route;仅作特定实验快照。
局部因果注意力与长期线性压缩状态结合;有界资源不等于无损回看。
17 个模型、13 个合成任务上的多针、变量追踪、聚合与有效长度阈值。
4,750 个中英测试实例、21 个数据集和六类真实/合成长文本任务。
固定内容、扫描证据位置的评测协议,以及 2023 模型上的 U 形历史结果。
沿序列维切分输入与激活、交换 KV;分摊每卡资源但不改变模型语义。
1M+ 上下文用法、多针限制、无关 token、TTFT 与重复内容建议。
当前 Gemini API 的 implicit caching、共同前缀与缓存命中计量。