Prhub

#1748 fix: resolve SP/CP gradient inflation in FLA (linear attention) layers

原始 PR 作者 zhuzilin 合并时间 2026-03-22 14:31 文件变更 4 提交数 1 评论 0 代码增减 +83 / -30

执行摘要

修复序列并行和模型并行中线性注意力层梯度错误膨胀的问题。

在 SP 和 CP 并行中,gather_from_sequence_parallel_regiondist.nn.all_gather 的 backward 错误地对非分片线性注意力计算执行了 reduce-scatter,导致每个层的梯度范数膨胀 TP×CP 倍,可能影响训练收敛。PR body 中指出修复后使用真实权重和 DAPO 数学数据验证了梯度范数,例如 Qwen3.5-27B 和 Qwen3Next-80B 模型。

建议精读此 PR,特别是 _AllGatherForDuplicatedComputation 的设计,它展示了在分布式训练中处理重复计算时避免梯度膨胀的技巧。对于涉及并行计算、注意力机制或模型配置的开发人员,此变更值得深入理解以应用于相关场景。

讨论亮点

没有 review 讨论记录,因此无法提炼讨论亮点。

实现拆解

实现主要分为三部分:

1) 在 slime_plugins/models/hf_attention.py 中,添加 _load_hf_config 函数作为配置加载的 fallback,并定义 _AllGatherForDuplicatedComputation 自定义 autograd 函数,其 backward 仅返回本地梯度切片以避免 reduce。同时修改 HuggingfaceAttention.forwardgather_from_sequence_parallel_region 的调用,设置 tensor_parallel_output_grad=False
2) 在 slime_plugins/models/qwen3_5.pyqwen3_next.py 中,集成 _load_hf_config 并添加逻辑以计算 layer_types 当配置类缺少该属性时,确保模型类型识别正确。次要改动包括 slime/utils/reloadable_process_group.py 中内存阈值的调整。

文件 模块 状态 重要度
slime_plugins/models/hf_attention.py models/attention modified 9.0
slime_plugins/models/qwen3_5.py models modified 6.0
slime_plugins/models/qwen3_next.py models modified 6.0

关键符号

_load_hf_config _AllGatherForDuplicatedComputation.forward _AllGatherForDuplicatedComputation.backward HuggingfaceAttention.forward

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

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险包括:

1) _AllGatherForDuplicatedComputation 的实现可能未覆盖所有边缘情况(如梯度形状或数据类型),导致梯度计算错误;
2) 修改了核心并行路径(序列并行和模型并行的 gather 操作),可能引入回归,影响其他模型或配置;
3) _load_hf_config 的 fallback 逻辑可能不兼容所有模型类型,导致配置加载失败。PR 未提供测试覆盖信息,可能存在潜在漏洞。

影响:

1) 对用户:提升在 SP/CP 下训练线性注意力模型的稳定性和准确性,避免梯度爆炸导致的训练问题;
2) 对系统:修复梯度计算逻辑,确保分布式训练的正确性,可能改善训练效率和收敛性;
3) 对团队:需要了解此修复,并在类似场景中应用自定义 autograd 函数的设计模式,以处理分布式计算中的梯度问题。

核心路径变更 缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论