执行摘要
本次PR修复了SGLang调度器中Pipeline Parallelism (PP) 与Context Parallelism (CP) 结合使用的通信问题,支持PP2+CP8+TP8等配置,通过修改调度器发送/接收逻辑并放宽配置断言,确保在H20等硬件上并行部署正常工作。
功能与动机
动机源于H20 GPU集群上PP与CP结合使用时出现的问题,导致无法生成输出。PR body引用PR #19504的评论,明确需修复此配置下的bug。Issue评论中yiakwy-xpu-ml-framework-team验证修改后PP2+CP工作正常,强调了修复的紧迫性。
实现拆解
主要改动点按模块拆解:
- 调度器模块(
scheduler_pp_mixin.py):
- 修改
_pp_send_pyobj_to_next_stage和_pp_recv_pyobj_from_prev_stage函数,添加条件self.attn_tp_rank == 0 and self.attn_cp_rank == 0,确保只有TP和CP rank为零的进程进行进程间通信。
- 在接收后添加CP广播代码块:
python
if self.attn_cp_size > 1:
data = broadcast_pyobj(
data,
self.attn_cp_group.rank,
self.attn_cp_cpu_group,
src=self.attn_cp_group.ranks[0],
)
- 配置模块(
server_args.py):
- 在
_handle_context_parallelism方法中,将硬性断言assert self.pp_size == 1改为条件性检查,仅当enable_nsa_prefill_context_parallel为假时触发,允许PP与CP在NSA预填充上下文并行启用时共存。
- 设置
attn_cp_size = tp_size以适配配置路径。
评论区精华
Review讨论中关键交锋包括:
风险与影响
风险:
- 核心调度通信路径变更可能引入死锁或数据不一致,特别是在分布式环境中依赖特定rank假设。
- 配置检查放宽可能导致用户误用未测试组合,引发运行时错误。
- 缺少针对PP+CP组合的专门测试,依赖CI覆盖可能不足。
影响:
- 积极影响:扩展并行配置选项,支持更高效的大规模模型部署,提升H20等硬件资源利用率。
- 潜在影响:需用户确保正确设置
enable_nsa_prefill_context_parallel等变量,团队需跟进未解决的attn_cp_size讨论以维护代码质量。
关联脉络
从历史PR看,本次PR与近期调度器优化(如PR #22577修复空闲检测、PR #22453修复HiSparse解码侧)共享调度器模块的演进趋势,反映团队在分布式并行性和性能调优上的持续投入。虽然未直接关联到特定功能线,但共同支撑SGLang在高负载环境下的稳定性和扩展性。
参与讨论