Megatron-Bridge序列打包技能Skill nemo-mbridge-perf-sequence-packing

本技能详解 Megatron-Bridge 中序列打包与长上下文训练的实现与验证,涵盖 LLM 离线打包、GPT-SFT/VLM 批内打包、Energon 在线打包及上下文并行(CP)约束,并提供配置示例、代码锚点、常见陷阱与测试验证清单。适用于大规模语言模型和多模态模型训练中的吞吐优化与序列级批处理场景。关键词:序列打包、长上下文、Megatron-Bridge、离线打包、批内打包、Energon、上下文并行、LLM SFT、VLM、CP约束、长序列训练。

Megatron-Core训练 0 次安装 1 次浏览 更新于 9/7/2026
名称 nemo-mbridge-perf-sequence-packing
描述 验证并使用 Megatron-Bridge 中的打包序列和长上下文训练,包括离线 LLM 打包、collate 时 VLM 打包、Energon 在线打包以及 CP 约束。
开源协议 Apache-2.0

序列打包技能

稳定背景和建议等级,请参见:

  • @docs/training/packed-sequences.md
  • @skills/nemo-mbridge-perf-sequence-packing/card.yaml

启用方法

离线打包 SFT 用于 LLM 微调

配置离线打包的示例代码(代码略)。要求:模型序列长度、数据集序列长度和打包长度一致;需要微批次大小为 1;全局批次大小需可被数据并行大小整除且不小于数据并行大小。

选择离线打包长度

在不同 packed_sequence_size 下进行基准测试,比较每个优化器步的 token slot 数等于 packed_sequence_size * global_batch_size。例如 2K/GBS32、4K/GBS16、8K/GBS8 都提供 65,536 token slots/step。更长的打包可能降低步数开销,但也增加激活内存并受 kernel 宽度约束;应选择实测可容纳的最大配置。

离线打包需要 MBS=1。更改打包长度后必须使用新的输出根,并检查解析后的配置。

启用 CP 的微调需设置:

  • context_parallel_size = 2
  • calculate_per_token_loss = True
  • ddp.average_in_collective = False

使用 SFT 和 PEFT 相同的 pad_seq_to_mult 对齐公式,需根据 CP/TP/SP 推导。若调度器或 kernel 要求固定宽度,设置 pad_to_max_length=True;若启用 CUDA 图,还需设置 pad_cu_seqlens=True,并需要元数据 JSON 文件。

批内打包(GPT SFT 和支持的 VLM)

设置 enable_in_batch_packing=True,dataloader_type=‘single’ 或 ‘cyclic’,micro_batch_size>1。它保留 mmap 数据集,延迟 tokenization,保持损失掩码语义。不支持 ‘batch’ dataloader。

Energon 在线打包(Qwen-VL)

设置 dataset.packing_buffer_size=16、micro_batch_size=1、model.calculate_per_token_loss=True、ddp.average_in_collective=False。使用 vlm_step。缓冲区按 worker 计算候选样本数,高分辨率/视频数据从 8-16 开始测量。此路径不写离线打包。支持 eager Qwen-VL MBS1,拒绝 MTP、CUDA graphs、Qwen3-VL DistTrain、PP。MoE EP overlap 默认禁用;Qwen3.6-35B-A3B 有功能覆盖。

长上下文基线

设置 seq_length=16384,context_parallel_size=2。

代码锚点

LLM 打包 SFT 配置表面:代码位置 src/megatron/bridge/recipes/utils/dataset_utils.py 128-143(代码略)。

Bridge 验证:src/megatron/bridge/training/config.py 1220-1248(代码略)。

Collate 时间批内运行时:src/megatron/bridge/data/sequence_batching.py 397-449(代码略)。

GPT-SFT 直接行打包:src/megatron/bridge/data/datasets/gpt_sft.py 627-671(代码略)。

打包 THD 运行时约束:src/megatron/bridge/training/gpt_step.py 94-108(代码略)。

陷阱

  1. 离线打包 SFT、运行时批内打包、Energon 在线打包是不同的功能;对应 MBS 不同。
  2. GPT-SFT 批内打包不支持 ‘batch’ dataloader。
  3. CP 启用时,序列长度必须是 2*CP size 的倍数。
  4. CP 微调必须设置 calculate_per_token_loss=True 和 ddp.average_in_collective=False。
  5. pad_cu_seqlens=True 需要 pad_to_max_length=True。
  6. 打包支持因模型系列而异;Qwen3-Next、GLM-4.5、Qwen3.5-VL 有显式 opt-out。
  7. MTP 微调与打包序列不兼容。
  8. 合成填充行必须保持全零损失掩码。
  9. GBS 必须可被 DP size 整除且不小于 DP size(MBS1 时)。
  10. 对 SFT 和 PEFT 从 CP/TP/SP 推导 pad_seq_to_mult,不要硬编码。
  11. pad_to_max_length 仅在需要固定形状执行时设置。
  12. Energon packing_buffer_size 是 per-worker 的,也影响验证;计数指物理 pack。
  13. 精确恢复需保持分片/拓扑/shuffle等配置不变。

验证

使用已检入的单元测试覆盖(命令列表略)。

成功标准:

  • 所有选中测试通过
  • 离线与批内配置互斥验证
  • 打包元数据以 MCore THD 形式到达训练步骤
  • GPT-SFT 批内打包拒绝 ‘batch’ dataloader
  • Energon 原生打包精确恢复 pending groups 并刷新部分缓冲不丢样本
  • 映射的填充行不贡献损失