Long Context Training

核心问题

模型是真能使用远距离信息,还是只把配置窗口变长?

组成

  • RoPE scaling / position extrapolation
  • 长文档与跨段依赖训练数据
  • repo-level code 和多文档任务
  • context length curriculum 与数据配比
  • 推理侧 KV Cache 容量和 attention 成本

评测

Needle-in-a-haystack 只测特定检索能力,还应组合多跳推理、信息聚合、位置鲁棒性和真实长文任务。

从窗口变长到真正可用

1
2
3
4
5
位置编码/上下文窗口扩展
→ 长序列数据与 curriculum
→ attention、激活和 KV 成本上升
→ 模型是否学会跨段依赖
→ 多跳、聚合、位置扰动和真实文档回归

RoPE scaling 只改变可表示的位置范围,不会自动教会模型读取远处证据。训练时要记录长度分布、截断策略和有效 token;推理时还要把 KV Cache 容量、吞吐与检索质量一起评估。短上下文任务不应被长上下文平均分数掩盖,长文 benchmark 也不能替代真实工作流。

相关节点:Positional Encoding and RoPETraining Memory Accounting

长文训练首先是数据配比问题

把最大长度从 4K 改成 32K 不会自动产生远距离监督。如果长样本只是把短句拼在一起,模型学到的可能是局部 next-token 模式,而不是跨段引用、证据聚合和顺序保持。长上下文数据应明确标出依赖跨越的距离:需要首尾关联的文档、跨文件代码、跨页表格、多个证据共同决定答案的任务,且要避免所有答案都位于末尾的单一位置偏置。

长度 curriculum 可以先让模型在较短序列稳定学习,再逐步提高长样本比例,减少训练初期的显存和优化噪声;但 curriculum 不是越慢越好,后期若长样本占比太低,模型仍可能只在短窗口内可靠。记录每个长度桶的有效 token、截断率、loss 和任务成功率,才能知道模型到底看到了多少长距离监督。

评测要区分记住、找到和使用

needle test 只把一条信息藏进长文本,容易被模型的局部模式或提示格式“投机”。更严格的矩阵应包含:证据位置置换、多个干扰项、需要合并多个片段的答案、无关长文本、顺序交换和真实工作流文档。比较完整输入与只保留证据的结果,可区分模型是否真正使用了上下文;比较短/长版本的答案一致性,可发现上下文稀释。

长上下文还会放大系统成本:attention prefill、activation 和 KV Cache 同时增加。若只报告“最大窗口可接受”,却不报告 TTFT、峰值显存、吞吐和长文正确率,得到的是配置宣传而不是能力结论。训练与 serving 应用同一组长度分桶,防止离线模型能读、线上却因 cache 或超时被截断。