TL;DR
当前LLM预训练数据流的核心争议集中在packing mask选型、长度课程设计、预训练目标三个维度,现有工业界落地结果收敛出一套高性价比默认配置:采用FlashAttention2/3 varlen接口的per-doc causal mask packing,packing ratio目标>98%,超长文档用split-then-pack处理;长度训练采用short-to-long课程,85-95%算力在8K,末段5-15%做128K mid-train,RoPE base调整为5e5-1e6;FIM仅在code预训练时默认启用,纯NL场景需验证无退化后再开启;跨文档拼接作为显式可控的数据增强构造,不默认启用cross-doc可见。该配置可在同算力下将wallclock降低20-40%,无长上下文与NL任务性能退化。
核心断言
§1 打包与masking的工程选型
packing的核心权衡在吞吐量效率与训练目标正确性之间。早期朴素concat无mask方案packing ratio接近100%,但Krell et al. [5]量化证明,该方案会造成0.5-2%的训练loss低估:同pack内不同文档的token可相互attend,模型利用无关前文的统计规律降低loss,使训练分布与评估分布不一致。固定padding batch方案无loss偏差,但packing ratio仅80-95%,产生5-20%的无效token浪费,尤其在8K主训阶段显著拉长训练时间。显式张量per-doc mask方案无loss偏差,packing ratio接近100%,但O(L²)的mask张量带来10-25%的吞吐量损失,性价比不足。FlashAttention2 [3]提出的cu_seqlens varlen接口将per-doc mask实现转换为接口参数,避免构造显式大张量,将吞吐量损失压缩到<3%,同时packing ratio可稳定在>98%,是当前最优的打包方案。此外,NeMoPacking2024 [6]的工程实践表明,每条文档前加BOS、后加EOS,并剔除每个packed文档的首token loss,可避免无上下文token引入的梯度噪声,进一步提升训练稳定性。
| 方案 | Packing Ratio | 吞吐量相对损失 | 训练Loss偏差 | 实现复杂度 |
|---|---|---|---|---|
| 朴素拼接无mask | ~100% | <1% | +0.5~2% | 低 |
| 固定padding batch | 80~95% | 5~20% | 0 | 极低 |
| 显式张量per-doc mask | ~100% | 10~25% | 0 | 中 |
| FA varlen接口per-doc mask | >98% | <3% | 0 | 低 |
§2 长度训练课程的算力分配
长上下文能力训练的核心权衡是长窗口性能与训练效率。早期方案多用全程固定长度或全程混合长度:前者无法满足长上下文需求;后者受attention的O(L²)复杂度约束,在同算力下wallclock比short-to-long高20-40%。Llama3 [1]公开的short-to-long课程将长上下文训练从全程成本问题压缩为末段预算问题:95%算力用于8K主训,末段5%算力用于128K mid-train,并配合RoPE base调整,在几乎不增加总训练成本的前提下获得128K长上下文能力。Qwen2.5 [2]进一步验证了该方案的可复现性,并给出RoPE base从10K调整到1M的具体配置,长上下文评测性能与全程长序列训练相当。在超长文档处理上,Ding et al. [7]证明,相比truncate-and-drop或concat-then-chunk,split-then-pack可改善困惑度0.02-0.05 nats、长文档任务提升3-6pp;原因是减少截断能保持文档边界一致性,避免破坏长距离依赖关系。当前争议在于short-to-long是否会引入长度过拟合;但Llama3与Qwen2.5的公开评测结果未显示任何短长度任务的性能下降。
§3 预训练目标与填充策略
预训练目标的核心权衡在任务覆盖范围与基础性能之间。FIM(Fill-in-the-Middle)最初面向code预训练设计;StarCoder [9]验证,50% FIM rate可在不损害code任务的前提下提升补全能力,因此已成为code模型的默认配置。CodeLlama [11]的实验表明,在纯NL语料上启用50% FIM会使MMLU、GSM8K等NL任务稳定退化1-3pp,说明FIM收益具有场景特异性;纯NL场景若启用FIM,需通过专属rate sweep验证无副作用。跨文档上下文方面,Shi et al. [12]认为跨文档拼接可对齐推理时的prompt拼接和检索增强场景;但Krell et al. [5]证明,无差别cross-doc可见会系统性低估训练loss并改写预训练目标。更务实的做法是把跨文档拼接定义为显式可控的数据增强构造,只拼接相关文档,而不是默认允许同一pack内所有文档cross-doc可见。UL2 [10]提出的混合去噪目标方案主张默认采用infilling、span corruption等目标;但现有公开结果尚未证明其在通用NL任务上相对纯causal LM有稳定收益,且会增加训练复杂度,因此暂不建议作为默认配置。
时间线
研究立场对比
阵营A:per-doc masking + short-to-long(默认工程蓝图)
立场 — 主张打包采用per-doc causal mask配合FA varlen接口,长度训练采用short-to-long课程,仅code模型默认启用FIM,跨文档拼接作为显式构造,在保证训练正确性的前提下最大化效率。
反方 — 反方认为硬隔离文档边界会降低跨片段建模能力,short-to-long可能引入长度过拟合,全程混合长度分布更鲁棒,混合目标可提升跨任务泛化能力。
判词 — 一个更务实的定位:现有工业界落地结果已验证该方案在7B-70B参数区间的稳定性与效率优势,无对等算力的消融证据证明其他方案更优时,该方案为首选默认配置。
阵营B:全程混合长度(反课程)
立场 — 主张预训练全程按分布混合长短序列,避免末段mid-train的分布漂移,让模型更早接触长上下文,提升长度鲁棒性与长上下文性能。
反方 — 同算力下全程混合长度的wallclock比short-to-long高20-40%,Llama3和Qwen2.5的长上下文评测未显示混合长度的性能优势,同时混合长度会提升packing调度的复杂度。
判词 — 一个更务实的定位:仅当长上下文任务权重占比>30%时可考虑该方案,通用场景下short-to-long的效率优势更显著。
实践要点
可操作清单:
1) Do:默认采用per-doc causal mask的packing,优先调用FA2/3的cu_seqlens/varlen接口;Don't:为简化实现使用naive concat的cross-doc可见方案,因为会导致0.5-2%的训练loss低估[5][3]。
2) Do:将packing ratio目标设为>98%,将padding视为系统bug排查;Don't:接受固定padding batch的5-20%无效token,避免扰乱长度训练的算力核算[3]。
3) Do:超长文档采用split-then-pack处理,保留所有token;Don't:默认使用truncate-and-drop或concat-then-chunk,减少截断可直接提升LM性能[7]。
4) Do:采用short-to-long长度课程,85-95%算力在8K,末段5-15%做128K mid-train,同时将RoPE base调整为5e5-1e6;Don't:全程混合长短序列,避免wallclock增加20-40%[1][2][8]。
5) Do:code预训练默认启用50% FIM;Don't:纯NL预训练默认启用FIM,除非NL专属的rate sweep证明无退化[9][11]。
6) Do:跨文档上下文作为显式可控的数据构造(如检索拼接);Don't:默认启用cross-doc可见,避免改写预训练目标[5][12]。
7) Do:剔除每个packed文档的首token loss,每条文档前加BOS后加EOS;Don't:保留首token loss,避免无上下文token引入梯度噪声[6]。
悬而未决的问题
- Q1.对等算力下的打包预训练消融:per-doc masking vs 跨文档可见/边界拼接
- Q2.可控对等算力研究:short-to-long长度课程 vs 全程混合序列长度
- Q3.打包训练消融:剔除每个文档边界的首token loss vs 保留该loss
- Q4.固定token预算下的超长文档处理:split-then-pack vs truncate-and-drop
- Q5.FA2/FA3 varlen cu_seqlens打包训练的吞吐量增益与无LM质量损失的验证
- [1]
- [2]
- [3]Tri Dao. FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning. arXiv:2307.08691, 2023论文
- [4]Tri Dao et al.. FlashAttention 3: Fast and Accurate Attention for Large Language Models. arXiv:2407.08608, 2024论文
- [5]Mario Michael Krell, Matej Kosec, Sergio P. Perez, Andrew Fitzgibbon. Efficient Sequence Packing without Cross-contamination. arXiv:2107.02027, 2021论文
- [6]
- [7]Hantian Ding, Zijian Wang, Giovanni Paolini, Varun Kumar, Anoop Deoras. Fewer Truncations Improve Language Modeling. arXiv:2404.10830, 2024论文
- [8]Jianlin Su, Yu Lu, Shengfeng Pan, Ahmed Murtadha, Bo Wen. RoFormer: Enhanced Transformer with Rotary Position Embedding. arXiv:2104.09864, 2021论文
- [9]Raymond Li, Loubna Ben Allal, Yangtian Zi et al.. StarCoder: May the Source Be with You!. arXiv:2305.06161, 2023论文
- [10]Yi Tay, Mostafa Dehghani, Vinh Q. Tran, Xavier Garcia, Jason Wei. UL2: Unifying Language Learning Paradigms. arXiv:2205.05131, 2022论文
- [11]
- [12]Weijia Shi, Sewon Min, Luke Zettlemoyer, Scott Wen-tau Yih. In-Context Pretraining: Language Modeling Beyond Document Boundaries. arXiv:2310.10638, 2023论文
- [13]Aakanksha Chowdhery, Sharan Narang, Jacob Devlin et al.. PaLM: Scaling Language Modeling with Pathways. arXiv:2204.02311, 2022论文
- [14]Jack W. Rae, Sebastian Borgeaud, Trevor Cai et al.. Scaling Language Models: Methods, Analysis & Insights from Training Gopher. arXiv:2112.11446, 2021论文
- [15]Aohan Zeng, Xiao Liu, Zhengxiao Du et al.. GLM-130B: An Open Bilingual Pre-trained Model. arXiv:2210.02414, 2022论文
- [16]Bowen Peng, Jeffrey Quesnelle, Honglu Fan et al.. YaRN: Efficient Context Window Extension of Large Language Models. arXiv:2309.00071, 2023论文
- [17]Mohammad Bavarian et al.. Efficient Training of Language Models to Fill in the Middle. arXiv, 2022论文