跳到主要内容

长上下文训练

核心要点

  • 训练长度决定能力上限,不靠推理外推
  • 渐进扩展是工业标准:短→中长→极长分阶段微调
  • 长 SFT 数据稀缺,需合成补足
  • 训练显存比推理更严,靠 CP / 梯度检查点 / ZeRO 缓解
  • 系统问题落在并行通信,详见 interconnect/

本文回答"模型如何学会长依赖"的训练侧问题。训练侧的并行通信(CP / SP / EP / overlap)不在本文展开,详见 interconnect / 05-LLM 并行通信

训练长度 vs 推理长度

核心问题:模型能处理的长度由训练决定,还是可以推理时外推出来?

概念含义
训练长度 $n_{\text{train}}$训练数据 batch 中实际见到的最长序列
推理长度 $n_{\text{infer}}$模型部署后接收的输入长度

@tbl-longctx-train-length-defs 训练长度与推理长度的定义

03-位置编码与外推 介绍了如何让 $n_{\text{infer}} > n_{\text{train}}$(外推),但外推有上限且代价是质量退化

路线上限
纯外推(不长训)一般 $1.5\text{-}4 \times$ 训练长度
外推 + 极少量长数据微调(YaRN)$32 \times$+
多阶段长训不限(LongRoPE 报告 500$\times$

@tbl-longctx-train-length-ratio 外推 vs 长训能扩展的倍数

业界共识:要做强长上下文模型,必须用长数据训练或微调,纯外推天花板低。

渐进扩展:工业标准流程

核心问题:为什么不直接把短 base 模型一步训到 1M 上下文?

直接一步训到 1M 上下文有两个不可行:

  1. 训练显存:1M 序列的 activation 单卡装不下,需要重型 CP / SP,从头训成本极高
  2. 数据效率:模型未先在短数据上学好语言能力,直接长训学习效率低

主流做法:分阶段渐进扩展。

LLaMA 3.1 公开流程(示意)

LLaMA 3.1 Technical Report[1] 报告了从 8K 扩到 128K 的多阶段流程:

阶段长度token 数关键操作
预训练8K数 T 级别标准短上下文预训练
长上下文阶段 116K-32K(两阶段共计约 800B 长上下文 token,公开报告未细分到每阶段)混合短长数据,长数据比例渐增
长上下文阶段 264K-128K(同上)长数据主导,但仍保留短数据避免遗忘

@tbl-longctx-train-llama31-stages LLaMA 3.1 长上下文渐进扩展示意

表中数值为公开报告中量级,具体数字以 LLaMA 3.1 技术报告为准。

关键设计原则

原则含义
指数扩展每阶段长度大致 $2 \text{-} 4 \times$ 前阶段,避免单步跨度过大
位置编码同步调整RoPE base 频率 / YaRN 参数随阶段调整(→ 03-位置编码与外推
混入短数据每阶段保留 $\sim 30\%$ 短数据,防止短文本能力遗忘
最终阶段加 SFT长 SFT 数据保证 instruction following 能力延伸到长上下文

@tbl-longctx-train-progressive-design 渐进扩展的四条设计原则

长数据的稀缺与合成

核心问题:训练 1M 模型所需的长数据从哪里来?

为什么自然长文档不够

数据类型自然长度分布长上下文训练适用性
网页 (CommonCrawl)中位数几百 token极少超过 8K
书籍 (Books3 等)单本 $10^4 \text{-} 10^5$ token数量级 OK,但版权 + 质量
论文 (ArXiv)单篇 $10^4$ 左右数量级 OK,但领域窄
代码仓库单仓 $10^5 \text{-} 10^6$ token高质量长数据,但语义稀疏
对话 / 客服记录一般短不适用

@tbl-longctx-train-natural-long 自然长文档的来源与限制

问题:单独靠任一来源都凑不出训练 1M 模型所需的长数据。需要合成

三类合成思路

1. 多文档拼接

把多个独立短文档(同主题或随机)拼成长样本:

拼法训练目标信号
同主题拼接模型学到"跨文档共指、引用"等长依赖
随机拼接 + 分隔符模型至少学"长上下文中分段处理"
主文档 + 干扰文档学"在大量上下文中定位重点"

@tbl-longctx-train-concat 多文档拼接的三种方式

优势:从短数据快速凑长样本,工程简单。缺点:合成长依赖较弱,模型可能学不到"真正的长距离引用"。

2. 长 needle 任务合成

灵感来自 needle-in-a-haystack 评测(→ 09-评测与现状)。在长上下文里插入"关键事实",要求模型回忆:

[100K token 干扰文本]
... 注意:苹果今天的密码是 47829。...
[100K token 干扰文本]
问:苹果今天的密码是多少?
答:47829
优势局限
强制学"远距离精确检索"任务太简单,模型可能学短路(特殊模式)
可大规模合成真实长任务覆盖不足

@tbl-longctx-train-needle 长 needle 任务合成

3. 长 reasoning 链合成(2025 新趋势)

让强模型对"需多步推理 + 大量上下文"的问题生成长链式思维(CoT),作为训练样本:

来源例子
多文档 QA多个 ArXiv 论文摘要 + 问题 + 推理回答
代码理解大型代码库 + bug 修复 + 推理过程
数学竞赛题面 + 多步推理 + 答案

@tbl-longctx-train-reasoning 长 reasoning 链合成

随着 o1 / R1 等 reasoning 模型兴起,长 reasoning 数据成为长上下文 SFT 的主要来源。公开数据集中已有若干代表性集合:

  • OpenThoughts[2]:蒸馏自 DeepSeek-R1 和 QwQ-32B,覆盖数学/代码/科学,初始版本 114k 条,后续版本累计约 1.2M,开源完整合成 pipeline
  • Bespoke-Stratos-17k[3]:仅 17k 高质量蒸馏样本,32B 模型微调后接近 DeepSeek-R1-Distill-32B 效果,说明数据质量比规模影响更大
  • NuminaMath-CoT[4]:860k 竞赛数学题配 CoT 推理过程,Apache 2.0 许可
  • STILL-2[5]:模仿-探索-自改进三阶段框架,结合长思维链蒸馏与 self-improve 迭代

代表工作

工作贡献
LongAlign (Bai et al., 2024)[6]长 SFT 数据集 + 长 instruction following 评测,给社区一套训练数据基线
LongLoRA (Chen et al., 2023)[7]局部 attention LoRA,低成本把 7B 模型扩到 100K;附带公开 LongAlpaca 12K + 32K 长 SFT 数据集
ProLong (Gao et al., 2024)[8]Princeton + Meta 系统研究长 SFT 数据配比

@tbl-longctx-train-data-works 长 SFT 数据公开工作

训练侧显存压力

核心问题:训练比推理多出哪些显存,长上下文下哪一块成为瓶颈?

三块显存

训练比推理多两块显存压力:

显存项推理是否有长上下文下规模
模型权重不随 $n$
KVCache推理有$O(n)$,与序列长度线性
Activation(前向中间结果,反向传播用)✗ 训练独有$O(n)$ 与序列长度线性,但常数大
Optimizer state(Adam 的 m, v)✗ 训练独有不随 $n$ 变,但是权重 4-12×
梯度✗ 训练独有与权重同量级

@tbl-longctx-train-memory-items 训练显存的五类来源

activation 是长上下文训练的核心矛盾:单层 transformer activation 约 $O(n \cdot d)$,全模型 $L$ 层堆叠后单 batch $O(L \cdot n \cdot d)$。LLaMA 3 70B($L=80, d=8192$)在 1M 序列下单 batch activation 约 1 TiB 量级,远超单卡。

缓解手段(系统层细节见 interconnect)

手段怎么做详见
梯度检查点只存关键中间结果,反向时重算其他节省 activation 显存约 $\sqrt{L}$ 倍,代价是计算量 $\sim 1.3 \times$
CP / SP沿序列维把单 batch 切到多卡上下文并行 (CP)序列并行 (SP)
ZeRO把 optimizer state / gradient / weight 分片到 DP 组详见 DP 框架文档;本章节外
FlashAttention不物化 $n \times n$ attention 矩阵02-第一性挑战
Activation offloading把不活跃的 activation 临时下沉 CPU / NVMe工程优化,与 KV offload 思路类似

@tbl-longctx-train-memory-mitigation 训练显存的五类缓解手段

关键观察:长上下文训练的系统问题主要落在 CP / SP / 通信 overlap,互联视角已在 interconnect/ 沉淀,本文不重复。

训练侧的两个"陷阱"

核心问题:长训完成后,为什么模型仍可能短任务变差、宣称长度名不副实?

陷阱 1:长训之后短能力退化

长 SFT 之后,模型在短任务上的 instruction following 可能退化。原因:长数据风格与短指令风格分布不同,模型偏到长分布。

应对

  • 长 SFT 阶段始终混入短指令数据
  • 用"双倾向 SFT":长 + 短均匀采样

陷阱 2:宣称长度 ≠ 有效长度

模型经过长 SFT 后宣称支持 1M 上下文,但在 RULER / NIAH 评测下可能只在 256K 内有效。原因:长 SFT 数据质量决定有效边界。

应对:以评测(→ 09-评测与现状)反推训练数据该往哪个长度区间补强。

Takeaway

知识点核心结论
训练长度决定上限强长上下文模型必须用长数据训练,纯外推天花板低($1.5\text{-}4\times$
渐进扩展流程短→中长→极长分阶段微调,每阶段指数扩展、混入短数据、同步调位置编码
长数据合成路线自然长文档不够,靠多文档拼接 / 长 needle / 长 reasoning 三类合成补足
训练显存缓解activation 是核心矛盾,靠梯度检查点 / CP / SP / ZeRO / offload 缓解
短能力退化长 SFT 始终混入短指令数据,避免偏到长分布
宣称长度 ≠ 有效长度以评测反推训练数据该往哪个长度区间补强

@tbl-longctx-train-takeaway 全文要点

延伸阅读

参考资料

  1. Meta, The Llama 3 Herd of Models (Technical Report), 2024. https://arxiv.org/abs/2407.21783
  2. OpenThoughts, OpenThoughts: Building Open Reasoning Models, 2025. arXiv:2506.04178. HuggingFace: open-thoughts/OpenThoughts-114k. https://huggingface.co/open-thoughts
  3. Bespoke Labs, Bespoke-Stratos-17k, 2025. HuggingFace: bespokelabs/Bespoke-Stratos-17k. https://huggingface.co/datasets/bespokelabs/Bespoke-Stratos-17k
  4. Numina & HuggingFace, NuminaMath-CoT, 2024. 860k 竞赛数学题 + CoT,Apache 2.0。HuggingFace: AI-MO/NuminaMath-CoT. https://huggingface.co/datasets/AI-MO/NuminaMath-CoT
  5. Qi et al., STILL-2: Scaling Thinking with LLM via Learning to Improve, 2025. 模仿-探索-自改进三阶段长思维链蒸馏框架。https://arxiv.org/abs/2503.03623
  6. Bai et al., LongAlign: A Recipe for Long Context Alignment of Large Language Models, 2024. https://arxiv.org/abs/2401.18058
  7. Chen et al., LongLoRA: Efficient Fine-tuning of Long-Context Large Language Models, 2023. https://arxiv.org/abs/2309.12307
  8. Gao et al., How to Train Long-Context Language Models (Effectively), 2024. https://arxiv.org/abs/2410.02660