详细解释
Long Context(长上下文扩展) 是 2023 下半年到 2025 年最硬的模型工程仗:2023 年 Llama 2 70B 还是 4K Token(约 3000 中文汉字),读不完一篇 8 页的论文;到 2025 年普通 7B 开源模型都默认 128K(约 10 万字,一本中篇小说),旗舰模型 1M-4M Token(1000 页 A4 文档 / 1 小时代码仓库)。用户的”把一整本 PDF 丢进去提问”的期望被真正满足,RAG 行业甚至出现了”Long Context 会不会替代 RAG?“的讨论(后面 FAQ 回答结论:不会,两者是互补)。
长上下文不是”把 config.max_position_embeddings 从 4096 改成 131072 重启就完事”。模型在 4K 训练时学到的位置编码(RoPE)对”第 4096 个 Token 之后”的位置完全没有见过,直接改配置会导致”过了 4K 之后注意力完全乱了,准确率掉到 20%“。长上下文扩展是一个三层组合拳:位置编码外推 → 继续预训练(SFT / Continued Pretrain 长数据)→ 推理端 KV 显存优化。
第一代到第四代:位置编码外推的 5 年发展史
| 方法 | 年份 | 原理 | 最大安全扩展倍数 | 精度下降 | 代表模型 |
|---|---|---|---|---|---|
| AIxOS / 线性插值 RoPE(Naive Position Interpolation, NTK-aware) | 2023 年 Meta Llama 2 同期 | 把原 RoPE 角度 θ 的位置 0…4095 线性”压缩”到更长位置 0…131071,让 4K 的 1 号 Token 对应 128K 的 32 号。 | 8×(4K→32K) | ~10% | Llama 2 32K 社区版 |
| NTK-aware RoPE(按频率分频段压缩) | 2023 年 6 月社区 / metamorphosis | 低频长波外推,高频短波内插:长位置对相位不敏感的大波长外推,短波长仍然插值;解决了 PI 压缩后长距离重复率高的问题。 | 16×~32× | ~5% | GPT-4V 内用候选;社区 Qwen-7B-32K |
| YaRN(Yet another RoPE extensioN method,2309.00071 论文) | 2023 年 9 月 LMSYS / SGLang 团队 | 在 NTK-aware 基础上再加”温度缩放 + 动态旋转因子 + 截断高频分量”三条公式;第一次让 Llama 2 7B 从 4K → 128K 准确率只下降 2%,不需要任何额外微调。 | 16×~64× | ≤ 2%(当前免费午餐最优解) | 几乎所有 2024 后发布的开源模型 128K 默认 |
| 继续预训练 Long-context P-Tuning / SLiding window(SWA)+ 全量数据 | 2023 年底(Giraffe / LongAlpaca / Yarn) | YaRN 初始化后,再用 10% 长文档(书籍/代码/合订本)做 1 epoch 继续预训练;滑动窗口注意力(每步只看最近 4K/8K Token,省算力) 让训练 128K 的成本接近 8K。 | 32×~128× | ≤ 1% | Qwen 2.5 128K、Yi-34B-200K 官方长上下文版 |
| UL2 / 1-Million Token Context(MegaScale) | 2024-2025 | 把模型改成”Infini-Attention / Recurrent Memory Transformer / 混合注意力(Local+Global)“,让注意力复杂度从 O(N²) 降 O(N log N) 或 O(N)。 | 无限(1M-10M 级别) | 5% 至 10%(远端记忆会弱化) | Gemini 1.5 Pro 1M、Claude 3 Opus 200K、唯元智创 Long-Chat 128K |
推理端 KV Cache 与长上下文的矛盾及解决方案
长上下文最大的工程敌人是 KV Cache 显存爆炸:一个请求 128K Token 的历史,70B BF16 模型单机 KV Cache 就是 128K × 2KB ≈ 256MB,一张 A100-80G 同时只能服务 300 个用户,QPS 极低。三条主流解法现在都已经是推理框架标配:
- KV Cache 量化(FP8 / INT4 KV):vLLM 的 FP8 KV、SGLang 的 INT4 KV Cache 两种实现,把每 Token 2KB 压到每 Token 0.3 至 0.5 KB,同一张卡服务用户数 4x 至 6x,精度几乎没有下降(注意力对 KV 的数值误差鲁棒性极强)。
- Page-Attention / Paged KV Cache(vLLM 的 PagedAttention)+ RadixAttention(SGLang):KB 级 KV 分页管理 + 相同前缀共享,多用户共用的 System Prompt / RAG 背景段一份 KV 全用户共用。
- Infini-Attention / StreamingLLM(Attention Sink):StreamingLLM 2023 MIT & Meta 论文发现”注意力对前 4 个 Token 有特殊依赖(叫 Sink Tokens)“,只要保留最近 2048 Token + 前 4 Token,模型输出就不会崩;配合 128K 长上下文时可以”窗口化”推理,历史 KV 超过窗口就丢进 CPU offload 向量库。
唯元智创 平台上的 128K 长对话模型默认组合:YaRN 外推 + 继续预训练 1 epoch 长数据 + FP8 KV Cache + RadixAttention,实测 4 张 A100-80G 集群下 128K 上下文 QPS 能做到 180(同配置 2023 年 10 月版本只能做到 25 QPS,整整 7x 提升)。