Prhub

#21170 [BUGFIX] Fix CP residual size mismatch crash when tp_size == attn_cp_size

sgl-project/sglang · 作者 yudian0504 · 合并时间 2026-03-23 15:12

分析状态 已生成
文件变更 1提交数 1 · 评论 3
代码增减 +9 / -5
bugfix performance

执行摘要

修复上下文并行中当 tp_size 等于 attn_cp_size 时残余张量大小不匹配导致的推理崩溃。

PR body 描述:'After merging commit bb737d7a829bac8fb6386fb6f494e1b2403c598f https://github.com/sgl-project/sglang/pull/18233, GLM-5/DS-V3.2 with context parallelism (CP) crashes during inference with: RuntimeError: Check failed: residual.size(0) == batch_size (885 vs. 7080)'。这表明合并历史 PR 后引入了崩溃 bug,需要紧急修复以恢复系统稳定性。

对于维护 sglang 并行通信模块的工程师,建议精读此 PR 以理解 CP 中模式匹配和数据布局一致性的细节。变更虽小,但揭示了在并行计算中条件逻辑顺序的重要性,值得关注以防止类似错误;对于管理者,可快速合并以确保系统稳定。

讨论亮点

Review 过程中没有实质性技术讨论。Reviewer Fridge003 直接批准了变更,表明修复被认可为正确且必要,没有争议或未解决疑虑。Issue 评论中只有非技术内容(如配额限制和人员通知),未涉及技术细节。

实现拆解

修复集中在文件 python/sglang/srt/layers/communicator_nsa_cp.py 的 get_fn 函数中。关键改动是将检查特定模式组合(hidden_states_input_mode == ScatterMode.FULL 且 residual_input_mode == ScatterMode.SCATTERED 且 output_mode == ScatterMode.SCATTERED)的逻辑移到检查 group sizes 是否相同之前。这样,即使 tp_size == attn_cp_size 导致 group sizes 相等,FULL 和 SCATTERED 模式的不同数据布局也会触发正确的 scatter 操作,而不是错误地使用 trivial 函数,从而避免残余大小不匹配的崩溃。

文件 模块 状态 重要度
python/sglang/srt/layers/communicator_nsa_cp.py srt/layers modified 7.0

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

关键符号

get_fn

评论区精华

批准合并 other

Reviewer Fridge003 批准了变更,无评论 body,表明修复被直接认可。

结论:变更被批准并合并,无技术讨论。 · 已解决

风险与影响

风险较低,因为变更只涉及一个函数的条件逻辑顺序调整,且修复了已知崩溃。但需注意:1. 修改了核心通信路径,如果新逻辑在其他边界情况下(如其他模式组合)有误,可能引入新 bug;2. 修复针对特定配置(tp_size == attn_cp_size),在其他配置下的行为需确保不变。建议在相关配置下进行回归测试,并检查是否覆盖所有可能的 ScatterMode 组合。

直接影响是修复了 GLM-5/DS-V3.2 模型在使用上下文并行且 tp_size 等于 attn_cp_size 时的推理崩溃问题,恢复了系统稳定性和可靠性。影响范围限于特定模型和并行配置,但鉴于标签为 'high priority',可能影响生产环境的关键推理任务。对用户透明,提升服务可用性,对团队而言减少了调试和宕机时间。

核心路径变更 特定配置依赖

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

  • 一句话:修复上下文并行中当 tp_size 等于 attn_cp_size 时残余张量大小不匹配导致的推理崩溃。
  • 推荐动作:对于维护 sglang 并行通信模块的工程师,建议精读此 PR 以理解 CP 中模式匹配和数据布局一致性的细节。变更虽小,但揭示了在并行计算中条件逻辑顺序的重要性,值得关注以防止类似错误;对于管理者,可快速合并以确保系统稳定。

功能与动机

PR body 描述:'After merging commit bb737d7a829bac8fb6386fb6f494e1b2403c598f https://github.com/sgl-project/sglang/pull/18233, GLM-5/DS-V3.2 with context parallelism (CP) crashes during inference with: RuntimeError: Check failed: residual.size(0) == batch_size (885 vs. 7080)'。这表明合并历史 PR 后引入了崩溃 bug,需要紧急修复以恢复系统稳定性。

实现拆解

修复集中在文件 python/sglang/srt/layers/communicator_nsa_cp.py 的 get_fn 函数中。关键改动是将检查特定模式组合(hidden_states_input_mode == ScatterMode.FULL 且 residual_input_mode == ScatterMode.SCATTERED 且 output_mode == ScatterMode.SCATTERED)的逻辑移到检查 group sizes 是否相同之前。这样,即使 tp_size == attn_cp_size 导致 group sizes 相等,FULL 和 SCATTERED 模式的不同数据布局也会触发正确的 scatter 操作,而不是错误地使用 trivial 函数,从而避免残余大小不匹配的崩溃。

关键文件:

  • python/sglang/srt/layers/communicator_nsa_cp.py(模块 srt/layers): 唯一修改的文件,包含了修复 CP 通信中残余大小不匹配的关键逻辑调整,防止了特定配置下的推理崩溃。

关键符号:get_fn

评论区精华

Review 过程中没有实质性技术讨论。Reviewer Fridge003 直接批准了变更,表明修复被认可为正确且必要,没有争议或未解决疑虑。Issue 评论中只有非技术内容(如配额限制和人员通知),未涉及技术细节。

  • 批准合并 (other): 变更被批准并合并,无技术讨论。

风险与影响

  • 风险:风险较低,因为变更只涉及一个函数的条件逻辑顺序调整,且修复了已知崩溃。但需注意:1. 修改了核心通信路径,如果新逻辑在其他边界情况下(如其他模式组合)有误,可能引入新 bug;2. 修复针对特定配置(tp_size == attn_cp_size),在其他配置下的行为需确保不变。建议在相关配置下进行回归测试,并检查是否覆盖所有可能的 ScatterMode 组合。
  • 影响:直接影响是修复了 GLM-5/DS-V3.2 模型在使用上下文并行且 tp_size 等于 attn_cp_size 时的推理崩溃问题,恢复了系统稳定性和可靠性。影响范围限于特定模型和并行配置,但鉴于标签为 'high priority',可能影响生产环境的关键推理任务。对用户透明,提升服务可用性,对团队而言减少了调试和宕机时间。
  • 风险标记:核心路径变更, 特定配置依赖

关联脉络

  • PR #18233 未知(未在提供列表中): PR body 提到合并该 PR 后引入了导致本 bug 的变更,因此是直接相关的历史 PR,需要回溯检查其变更以避免类似问题。

参与讨论