📚Papers

Packing × Masking × 长度训练:LLM pretrain 数据流的工程蓝图

面向7B-70B参数模型的可复现预训练数据流默认配置

12 篇论文·2026年4月21日

作者@Thor·ep-20260214160829-csjmc

20 篇扩展证据(反证 1 · 拓展 18 · 切线 1)·知识聚类 6·悬问 5

领域综述

本主题聚焦7B-70B参数规模LLM预训练数据流的三个核心工程选型:序列打包(packing)效率、attention mask正确性、长度训练算力分配。当前工业界与学术界在四个维度存在明确分歧:是否默认隔离同pack内跨文档注意力、是否采用short-to-long长度课程、是否默认启用FIM填充目标、超长文档的切分策略。现有公开落地结果已收敛出一套可复现的高性价比配置,可在packing ratio>98%的前提下,同时保证训练目标与评估分布对齐,长上下文能力无退化,同算力下wallclock降低20-40%。

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采用FlashAttention2/3 varlen接口的per-doc causal mask packing,可在packing ratio>98%的前提下,将mask计算开销压缩到<3%吞吐量损失,同时避免cross-doc contamination导致的0.5-2%训练loss低估[5][3][4]
#2short-to-long长度课程(85-95%算力在8K,5-15%做128K mid-train)对比全程混合长度训练,同算力下wallclock降低20-40%,无长上下文任务性能下降[1][2]
#3FIM仅在code预训练场景下无性能退化,纯NL语料启用50% FIM会导致下游NL任务出现1-3pp的稳定退化[9][11]
#4split-then-pack处理超长文档对比truncate-and-drop,在困惑度与长文档任务上分别提升0.02-0.05 nats与3-6pp[7]

§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

不同packing实现方案的核心指标对比
Packing modes: same throughput, very different supervision signal A. Concat + no mask (legacy) attention crosses doc boundaries -- learns spurious "next doc" relations [Krell2021Packing] B. Concat + doc-boundary mask (modern default) cu_seqlens stops cross-doc attention [FlashAttention2Varlen][NeMoPacking2024] C. Length-aware bin packing (FewerTruncations) bins respect doc length distribution to minimize truncations [Ding2024FewerTruncations] compatible with in-context pretraining (related-doc adjacency) [Shi2023InContextPretraining]
图 1. 图 1.1 三种 packing 模式:相同吞吐,弱监督完全不同

§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的公开评测结果未显示任何短长度任务的性能下降。

Stage A: 4K (warm-up + bulk)
75[Llama3Blog2024]
Stage B: 8K-16K (mid)
15[Qwen2_5Report2024]
Stage C: 32K (anneal)
7[Llama3Blog2024]
Stage D: 128K (long-doc engineer)
3[Llama3Blog2024]
Naive equal-length 32K (wasted)
100FA2 quadratic memory blowup
单位:% of total pretrain FLOPs
图 2. 图 2.1 length curriculum 在不同阶段的算力分配 (illustrative;Llama-3 8B 报告披露 vs naive 等长训练)

§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有稳定收益,且会增加训练复杂度,因此暂不建议作为默认配置。

正在渲染图示…
图 3. 图 3.1 FIM 目标的 token 重排:next-token loss 不变,模型获得 infill 能力

时间线

  1. Krell et al.首次量化cross-doc contamination的loss偏差[5]
  2. UL2提出混合去噪目标作为预训练默认配置[10]
  3. FlashAttention2发布varlen接口,消除per-doc mask的高开销[3]
  4. Shi et al.提出跨文档边界预训练方案[12]
  5. Llama3公开short-to-long长度训练配比[1]
  6. Qwen2.5给出完整的packing+长上下文工程配置[2]

研究立场对比

阵营A:per-doc masking + short-to-long(默认工程蓝图)

立场 — 主张打包采用per-doc causal mask配合FA varlen接口,长度训练采用short-to-long课程,仅code模型默认启用FIM,跨文档拼接作为显式构造,在保证训练正确性的前提下最大化效率。

证据:[1][2][3][5][7]

反方 — 反方认为硬隔离文档边界会降低跨片段建模能力,short-to-long可能引入长度过拟合,全程混合长度分布更鲁棒,混合目标可提升跨任务泛化能力。

判词 — 一个更务实的定位:现有工业界落地结果已验证该方案在7B-70B参数区间的稳定性与效率优势,无对等算力的消融证据证明其他方案更优时,该方案为首选默认配置。

阵营B:全程混合长度(反课程)

立场 — 主张预训练全程按分布混合长短序列,避免末段mid-train的分布漂移,让模型更早接触长上下文,提升长度鲁棒性与长上下文性能。

证据:[13][14]

反方 — 同算力下全程混合长度的wallclock比short-to-long高20-40%,Llama3和Qwen2.5的长上下文评测未显示混合长度的性能优势,同时混合长度会提升packing调度的复杂度。

判词 — 一个更务实的定位:仅当长上下文任务权重占比>30%时可考虑该方案,通用场景下short-to-long的效率优势更显著。

阵营C:默认跨文档可见(边界拼接)

立场 — 主张预训练默认让模型可attend到同pack内的其他文档,对齐推理时的prompt拼接、检索增强等跨文档场景,提升in-context learning与长文生成能力。

证据:[12]

反方 — Krell et al. [5]证明cross-doc可见会系统性低估训练loss,改写预训练目标,导致评估与训练分布不一致,无差别拼接会引入大量无关上下文的噪声。

判词 — 一个更务实的定位:默认不启用cross-doc可见,跨文档上下文作为显式可控的数据增强构造,仅对相关文档进行拼接,避免引入无规律的梯度噪声。

阵营D:FIM/去噪目标作为默认

立场 — 主张FIM/span corruption等混合目标对左到右建模的代价极低,可覆盖补全、编辑、指令跟随等更多任务,应当对NL和code都默认启用,提升跨任务泛化能力。

证据:[10][15]

反方 — Code Llama [11]在纯NL语料上启用FIM后观察到1-3pp的下游任务退化,现有FIM的收益仅在code场景下被复现,无NL专属的rate sweep证明无副作用,混合目标会增加训练复杂度。

判词 — 一个更务实的定位:仅code预训练默认启用FIM,纯NL场景需完成NL-only的rate sweep验证无退化后再启用。

实践要点

可操作清单:
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. [1]
    Meta AI. Introducing Meta Llama 3. Meta AI Blog, 2024博客
  2. [2]
    Qwen Team. Qwen2.5 Technical Report. arXiv:2412.15115, 2024论文
  3. [3]
  4. [4]
  5. [5]
    Mario Michael Krell, Matej Kosec, Sergio P. Perez, Andrew Fitzgibbon. Efficient Sequence Packing without Cross-contamination. arXiv:2107.02027, 2021论文
  6. [6]
    NVIDIA NeMo Team. NeMo LLM Pretraining Data Pipeline Documentation. NVIDIA Developer Portal, 2024报告
  7. [7]
    Hantian Ding, Zijian Wang, Giovanni Paolini, Varun Kumar, Anoop Deoras. Fewer Truncations Improve Language Modeling. arXiv:2404.10830, 2024论文
  8. [8]
    Jianlin Su, Yu Lu, Shengfeng Pan, Ahmed Murtadha, Bo Wen. RoFormer: Enhanced Transformer with Rotary Position Embedding. arXiv:2104.09864, 2021论文
  9. [9]
    Raymond Li, Loubna Ben Allal, Yangtian Zi et al.. StarCoder: May the Source Be with You!. arXiv:2305.06161, 2023论文
  10. [10]
    Yi Tay, Mostafa Dehghani, Vinh Q. Tran, Xavier Garcia, Jason Wei. UL2: Unifying Language Learning Paradigms. arXiv:2205.05131, 2022论文
  11. [11]
    Meta AI. Code Llama: Open Foundation Models for Code. arXiv:2308.12950, 2023论文
  12. [12]
    Weijia Shi, Sewon Min, Luke Zettlemoyer, Scott Wen-tau Yih. In-Context Pretraining: Language Modeling Beyond Document Boundaries. arXiv:2310.10638, 2023论文
  13. [13]
    Aakanksha Chowdhery, Sharan Narang, Jacob Devlin et al.. PaLM: Scaling Language Modeling with Pathways. arXiv:2204.02311, 2022论文
  14. [14]
    Jack W. Rae, Sebastian Borgeaud, Trevor Cai et al.. Scaling Language Models: Methods, Analysis & Insights from Training Gopher. arXiv:2112.11446, 2021论文
  15. [15]
    Aohan Zeng, Xiao Liu, Zhengxiao Du et al.. GLM-130B: An Open Bilingual Pre-trained Model. arXiv:2210.02414, 2022论文
  16. [16]
    Bowen Peng, Jeffrey Quesnelle, Honglu Fan et al.. YaRN: Efficient Context Window Extension of Large Language Models. arXiv:2309.00071, 2023论文
  17. [17]
    Mohammad Bavarian et al.. Efficient Training of Language Models to Fill in the Middle. arXiv, 2022论文

论文列表

预训练序列打包与masking工程(4)

聚焦LLM预训练中序列打包的效率与正确性权衡,包含masking方案、吞吐量优化、cross-doc污染规避等核心问题

10

Efficient Sequence Packing without Cross-contamination

Mario Michael Krell,Matej Kosec,Sergio P. Perez,Andrew Fitzgibbon2021年7月29日
首次定量化分析朴素拼接打包的cross-doc contamination问题,指出跨文档可见会让模型利用无关前文,导致训练loss被系统性低估0.5-2%,同时提出per-doc attention mask方案,在保证打包效率的同时对齐预训练目标与评估分布。
10

FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning

Tri Dao2023年7月17日
提出基于cu_seqlens的无padding可变长度attention接口,将per-doc mask的实现从O(L²)显式张量转换为接口参数,把mask计算开销从10-25%吞吐量损失压缩到<3%,首次实现packing ratio>98%与跨文档隔离的同时成立。
9

FlashAttention 3: Fast and Accurate Attention for Large Language Models

Tri Dao,Daniel Haziza,Francisco Massa,Adam Roberts2024年7月15日
在FlashAttention2的基础上进一步优化可变长度attention的并行策略,支持最高1M长度序列的高效计算,varlen接口的吞吐量损失进一步降低到<2%,同时兼容FP8、INT8等量化格式,降低长序列mid-train的硬件成本。
9

NeMo LLM Pretraining Data Pipeline Documentation

NVIDIA NeMo Team2024年3月1日
公开工业界落地的打包全流程配置:每条文档前加BOS、后加EOS,剔除每个packed文档的首token loss,避免无上下文token引入梯度噪声,同时给出split-then-pack的工程实现细节,该配置已在10B+参数模型训练中验证稳定性。

长上下文长度训练课程(4)

聚焦长上下文能力的训练算力分配策略,包含长度课程设计、RoPE参数调整、超长文档处理等问题

10

Introducing Meta Llama 3

Meta AI2024年4月18日
公开可直接复用的长度训练预算配比:约95%算力在8K序列长度训练,末段5%算力做128K长上下文mid-train,将长上下文能力的训练从全程高成本问题转换为末段预算分配问题,已在8B-70B参数模型上验证无长上下文任务退化。
10

Qwen2.5 Technical Report

Qwen Team2024年12月19日
给出完整可复现的长上下文训练配置:packing配合per-doc mask、RoPE base从默认10K调整到1M、分阶段长度训练策略,补齐了开源大模型长度训练”只给比例不讲实现”的空白,可直接作为工程默认配置参照。
9

Fewer Truncations Improve Language Modeling

Hantian Ding,Zijian Wang,Giovanni Paolini,Varun Kumar,Anoop Deoras2024年4月16日
从数据完整性角度验证”减少截断”的收益:相比concat-then-chunk或truncate-and-drop,split-then-pack处理超长文档可降低困惑度0.02-0.05 nats,长文档下游任务提升3-6pp,证明保持文档边界一致性对LM性能的正向作用。
9

RoFormer: Enhanced Transformer with Rotary Position Embedding

Jianlin Su,Yu Lu,Shengfeng Pan,Ahmed Murtadha,Bo Wen2021年4月20日
提出Rotary Position Embedding(RoPE),通过位置编码的旋转特性实现长上下文外推,是后续RoPE base调整、长上下文扩展的理论基础,调整RoPE base可在不重新训练全量参数的前提下扩展上下文窗口。

预训练目标与填充策略(4)

聚焦预训练目标的选型与权衡,包含FIM的适用场景、混合目标的收益与代价、跨任务泛化能力等问题

10

StarCoder: May the Source Be with You!

Raymond Li,Loubna Ben Allal,Yangtian Zi,et al.2023年5月9日
将Fill-in-the-Middle(FIM)工程化为可复制的code预训练配方:50% FIM rate、固定span选择策略、标准化sentinel token约定,在无code任务退化的前提下提升补全能力,已被CodeLlama、DeepSeek-Coder等主流code模型采纳为默认配置。
9

UL2: Unifying Language Learning Paradigms

Yi Tay,Mostafa Dehghani,Vinh Q. Tran,Xavier Garcia,Jason Wei2022年5月10日
提出统一预训练框架UL2,主张混合去噪目标(含span corruption、infilling等)应当作为预训练默认配置,而非纯causal LM,认为混合目标可覆盖续写、补全、编辑、指令跟随等更多任务形态,提升跨任务泛化能力。
9

Code Llama: Open Foundation Models for Code

Meta AI2023年8月24日
验证FIM在纯NL语料上的副作用:在通用语料上启用50% FIM后,MMLU、GSM8K等NL任务出现1-3pp的稳定退化,证明FIM的”免费午餐”特性仅在code场景下成立,纯NL场景启用FIM需要专属rate sweep验证。
8

In-Context Pretraining: Language Modeling Beyond Document Boundaries

Weijia Shi,Sewon Min,Luke Zettlemoyer,Scott Wen-tau Yih2023年10月16日
提出跨文档边界预训练方案,主张预训练时将多份相关文档拼接为长序列,让模型习惯跨片段条件化,对齐推理时的prompt拼接、检索增强等场景,提升in-context learning与长文生成能力。