长上下文训练
核心要点:
- 训练长度决定能力上限,不靠推理外推
- 渐进扩展是工业标准:短→中长→极长分阶段微调
- 长 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 上下文有两个不可行:
- 训练显存:1M 序列的 activation 单卡装不下,需要重型 CP / SP,从头训成本极高
- 数据效率:模型未先在短数据上学好语言能力,直接长训学习效率低
主流做法:分阶段渐进扩展。
LLaMA 3.1 公开流程(示意)
LLaMA 3.1 Technical Report[1] 报告了从 8K 扩到 128K 的多阶段流程:
| 阶段 | 长度 | token 数 | 关键操作 |
|---|---|---|---|
| 预训练 | 8K | 数 T 级别 | 标准短上下文预训练 |
| 长上下文阶段 1 | 16K-32K | (两阶段共计约 800B 长上下文 token,公开报告未细分到每阶段) | 混合短长数据,长数据比例渐增 |
| 长上下文阶段 2 | 64K-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 全文要点
延伸阅读
- DeepSeek-AI, 2024. DeepSeek-V3 Technical Report.
参考资料
- Meta, The Llama 3 Herd of Models (Technical Report), 2024. https://arxiv.org/abs/2407.21783
- OpenThoughts, OpenThoughts: Building Open Reasoning Models, 2025. arXiv:2506.04178. HuggingFace: open-thoughts/OpenThoughts-114k. https://huggingface.co/open-thoughts
- Bespoke Labs, Bespoke-Stratos-17k, 2025. HuggingFace: bespokelabs/Bespoke-Stratos-17k. https://huggingface.co/datasets/bespokelabs/Bespoke-Stratos-17k
- Numina & HuggingFace, NuminaMath-CoT, 2024. 860k 竞赛数学题 + CoT,Apache 2.0。HuggingFace: AI-MO/NuminaMath-CoT. https://huggingface.co/datasets/AI-MO/NuminaMath-CoT
- Qi et al., STILL-2: Scaling Thinking with LLM via Learning to Improve, 2025. 模仿-探索-自改进三阶段长思维链蒸馏框架。https://arxiv.org/abs/2503.03623
- Bai et al., LongAlign: A Recipe for Long Context Alignment of Large Language Models, 2024. https://arxiv.org/abs/2401.18058
- Chen et al., LongLoRA: Efficient Fine-tuning of Long-Context Large Language Models, 2023. https://arxiv.org/abs/2309.12307
- Gao et al., How to Train Long-Context Language Models (Effectively), 2024. https://arxiv.org/abs/2410.02660