Long Context Training 是让模型在比原始预训练更长的上下文窗口内保持建模、检索、推理和生成能力的训练阶段。它通常发生在预训练后期或 Continued Pretraining 中,通过位置编码扩展、长序列数据构造和额外训练预算实现。

长上下文能力不是简单把 max_position_embeddings 改大。模型需要同时解决位置表示、attention 成本、长文档数据、训练稳定性和评测可信度问题。

目标

长上下文训练的目标可以分成几类:

  • Long-range retrieval:在很长上下文中找到相关片段。
  • Long-document understanding:理解长文章、论文、合同、书籍、代码仓库。
  • Multi-document synthesis:跨多个文档整合信息。
  • Long-horizon generation:生成长篇结构化文本或代码。
  • Agent memory / tool traces:处理长交互历史和工具调用轨迹。

这些能力不完全相同。通过 needle-in-a-haystack 检索成功,不代表模型能做长文档推理;能处理长文档摘要,也不代表能稳定生成长代码仓库修改。

位置编码扩展

Transformer 需要位置表示。长上下文扩展通常要处理模型在训练时没有见过的位置范围。常见路线包括:

  • Position Interpolation:将更长位置范围映射回原训练范围,降低外推难度。
  • RoPE scaling / NTK-aware scaling:调整 RoPE 频率或缩放方式,以支持更长位置。
  • YaRN / LongRoPE 类方法:对 RoPE 扩展做更细粒度的插值、重缩放或分段设计。
  • ALiBi / relative position bias:使用更适合长度外推的位置偏置,但通常需要架构或训练阶段支持。

这些方法解决的是位置表示外推问题,不等于自动获得长上下文任务能力。模型仍需要长序列训练数据和足够优化步骤来适应新位置分布。

数据构造

长上下文训练数据不能只由短文档拼接而成。拼接能填满长度,但未必提供长程依赖信号。

高价值长上下文数据包括:

  • 长文档:书籍、论文、法律合同、技术手册;
  • 代码仓库:多文件依赖、README、issues、tests;
  • 多文档 QA:问题答案需要跨文档检索;
  • 长对话:多轮任务状态和偏好保持;
  • 合成检索任务:needle、key-value retrieval、multi-hop retrieval;
  • 长推理轨迹:数学证明、复杂代码修改、工具调用 trace。

数据构造要记录:

  • sequence length 分布;
  • 真实长文档比例;
  • 拼接短文档比例;
  • 文档边界 token;
  • 是否允许跨文档 attention;
  • long-range dependency 的距离分布;
  • 目标任务是否需要中间位置、开头位置和末尾位置的信息。

训练成本

标准 attention 的时间和显存都包含与 sequence length 相关的二次项。更具体地说,attention score / probability 这类中间矩阵规模大致为:

而 attention 的矩阵乘法计算还会与每个 head 的维度相关,粗略可写为:

其中 是 batch size, 是 sequence length, 是 attention heads 数, 是 hidden size。即使使用 FlashAttention 等 kernel 避免显式 materialize 完整 attention matrix,长序列训练仍然会显著增加计算、activation memory 和通信压力。

实际训练常需要:

  • 降低 micro-batch size;
  • 使用 gradient checkpointing;
  • 使用 sequence parallel 或 context parallel;
  • 调整 learning rate 和 warmup;
  • 使用更高效 attention kernel;
  • 更稀疏或分段的长上下文数据 schedule。

长上下文训练应纳入 Training BudgetTraining Memory Estimation,不能只看 token 数。

Length Extrapolation 与 Position Generalization

如果模型原始训练长度为 ,目标长度为 ,直接外推通常有风险。位置编码可能在未见过的位置上产生不稳定表示,注意力模式也可能偏向局部或开头。

常见训练策略:

  • 从较短扩展到中等长度,再扩展到目标长度;
  • 混合短序列和长序列,避免短上下文能力下降;
  • 在长序列中构造不同距离的监督信号;
  • 使用 curriculum,让模型逐步适应更长位置;
  • 在最后阶段用目标长度数据 annealing。

如果只训练最长长度,短上下文效率和能力可能下降;如果只用短文档拼接,模型可能学会位置存在,但没有学会长程依赖。

评测

长上下文评测要覆盖多种能力:

  • needle-in-a-haystack retrieval;
  • key-value retrieval;
  • long document QA;
  • multi-document QA;
  • long summarization;
  • code repository understanding;
  • long conversation state tracking;
  • lost-in-the-middle 测试;
  • 不同位置、不同长度、不同干扰强度下的鲁棒性。

Needle 测试有用,但不能代表全部长上下文能力。模型可能学会检索显眼字符串,却无法进行跨段推理或综合多个证据。评测应报告随位置和长度变化的性能曲线,而不是只给单点最大上下文长度。

常见失败模式

  • 只改位置编码不训练:上下文窗口变大,但长程能力不可靠。
  • 只拼接短文档:长度利用率高,但缺少真实长程依赖。
  • 只看 needle 结果:忽略 long reasoning、summarization 和 multi-document synthesis。
  • 短上下文能力退化:长序列阶段改变数据分布或位置分布。
  • 成本低估 attention、activation 和通信成本被忽略。
  • 中间位置退化:模型能用开头和末尾信息,但 lost-in-the-middle 明显。

相关概念