Prhub

#5826 [megatron] feat: support cp for bshd format

原始 PR 作者 wuxibin89 合并时间 2026-04-01 10:42 文件变更 3 提交数 4 评论 4 代码增减 +147 / -27

执行摘要

为 bshd 格式添加上下文并行支持,优化 Megatron 引擎序列处理性能。

根据PR body表述,需要支持CP for bshd格式,因为mcore引擎目前不支持thd格式用于GDN(参考外部链接NVIDIA/Megatron-LM/pull/2644)。目的是为使用bshd格式的模型提供上下文并行能力,以优化大模型训练和推理性能,例如在Qwen3.5-0.8B模型上的实验中展示了CP=2相对于CP=1的性能改进。

建议技术管理者和相关工程师精读此PR,重点关注util.py中的序列对齐和梯度流修复设计,这些决策对实现高性能并行处理有借鉴意义。对于使用bshd格式的项目,需测试CP配置以确保兼容性。

讨论亮点

Review讨论集中在两个关键点:

1) autograd正确性:reviewer gemini-code-assist[bot]指出后处理逻辑中使用torch.empty的in-place赋值会破坏autograd图,建议改用torch.cat以保持梯度流。作者wuxibin89通过示例代码验证并修复了此问题。
2) 性能优化:reviewer建议避免在循环中调用.item()导致的多次GPU-CPU同步,改用.tolist()一次性处理序列长度数据,作者已采纳此优化。讨论结果已解决,并由ISEEKYAN批准PR。

实现拆解

实现方案分为三个关键部分:

1) 在verl/models/mcore/model_forward.pygptmodel_forward_model_engine函数中,添加对bshd格式的处理逻辑,包括序列长度对齐以适应CP;
2) 在verl/models/mcore/util.py中,全面重写preprocess_bshd_enginepostprocess_bshd_engine函数,支持CP的序列分块、FP8填充对齐和重建,确保梯度流正确;
3) 在verl/trainer/distillation/megatron/losses.py中,更新蒸馏损失函数,从使用preprocess_bshd_no_padding改为preprocess_bshd_engine,统一预处理逻辑。

文件 模块 状态 重要度
verl/models/mcore/util.py mcore modified 9.0
verl/models/mcore/model_forward.py mcore modified 7.0
verl/trainer/distillation/megatron/losses.py distillation modified 5.0

关键符号

preprocess_bshd_engine postprocess_bshd_engine gptmodel_forward_model_engine

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

后处理中 autograd 梯度流问题 正确性

reviewer 指出后处理逻辑使用 torch.empty 的 in-place 赋值破坏 autograd 图,可能导致梯度无法回传。

结论:作者修复为使用 torch.cat 重建序列,确保梯度流正确。 · 已解决

序列长度处理性能优化 性能

reviewer 建议避免循环中调用 .item() 导致的 GPU-CPU 同步开销,提高训练效率。

结论:作者改用 .tolist() 一次性处理序列长度数据,减少同步次数。 · 已解决

风险与影响

技术风险包括:

1) 正确性风险:序列对齐逻辑复杂,若计算错误(如对齐大小公式math.lcm(tp_size, 2 * cp_size))可能导致填充不当或模型输出偏差;
2) 性能风险:CP分块和重建增加计算开销,可能影响推理延迟,尤其是在大规模批量处理时;
3) 兼容性风险:依赖外部库如transformers和flash-linear-attention的特定版本,升级可能引入不兼容问题。但review中已修复autograd和性能问题,降低了回归风险。

影响范围:直接作用于使用bshd格式的Megatron模型训练和推理流程,特别是多卡配置下的视觉语言模型。影响程度:中等,作为新功能添加,可能显著提升并行效率和模型支持,对团队开发涉及CP的场景有实用价值,但未触及核心架构。

梯度流修复风险 序列对齐复杂度 外部依赖兼容性

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论