Prhub

#25721 Publish elastic-EP active ranks from a dedicated step

原始 PR 作者 fzyzcjy 合并时间 2026-05-19 09:21 文件变更 1 提交数 1 评论 1 代码增减 +15 / -11

执行摘要

抽取 elastic-EP 活跃 rank 发布为独立私有方法

PR body 明确指出将 run_batch 末尾的条件块抽取为私有辅助方法,使得 run_batch 方法更聚焦于主流程,便于后续维护和扩展。

该 PR 属于小型重构,逻辑简单,无测试覆盖,建议快速合入。对于关注代码结构整洁性的开发者值得一读。

讨论亮点

PR 无 review 评论,仅有自动检测时的一条警告。

实现拆解

  1. python/sglang/srt/managers/scheduler.pyrun_batch 方法中,将原来位于 return ret 之前的条件判断块(检查 enable_dp_attentionelastic_ep_backend 并发布 ActiveRanksOutput)整体移除。
  2. run_batch 方法中 return ret 之前插入 self._maybe_report_active_ranks() 调用。
  3. run_batch 方法之后(launch_batch_sample_if_needed 之前)定义新的私有方法 _maybe_report_active_ranks,该方法内容完全复制原来的内联逻辑,仅将条件改为 early return 风格(if not ...: return)。
  4. 无其他文件变更,无测试、配置或部署配套改动。
文件 模块 状态 重要度
python/sglang/srt/managers/scheduler.py 调度器 modified 6.15

关键符号

_maybe_report_active_ranks

关键源码片段

python/sglang/srt/managers/scheduler.py core-logic

唯一变更文件,将 `run_batch` 中的内联代码抽取为私有方法 `_maybe_report_active_ranks`,涉及调度器核心类的代码组织优化。

// python/sglang/srt/managers/scheduler.pyclass Scheduler:
    ...
​
    def run_batch(self, batch) -> GenerationBatchResult:
        # ... 前面是 run_batch 的主逻辑 ...
        # 返回结果前,调用新抽取的私有方法发布弹性 EP 活跃 rank 信息
        self._maybe_report_active_ranks()
        return ret
​
    def _maybe_report_active_ranks(self) -> None:
        /* 如果未启用 dp_attention 或未配置 elastic_ep_backend则无需发布 */
        if not (
            self.server_args.enable_dp_attention
            and self.server_args.elastic_ep_backend is not None
        ):
            return
        # 获取当前 TP 组的活跃 rank 信息(GPU 张量),拷贝到 CPU
        tp_active_ranks = self.tp_group.active_ranks.detach().cpu().numpy()
        tp_active_ranks_cpu = self.tp_group.active_ranks_cpu.detach().numpy()
        # 合并两部分活跃信息
        tp_active_ranks &= tp_active_ranks_cpu
        # 按 DP 维度 reshape 并取每一组的 and 结果,得到每个 DP rank 是否活跃
        dp_active_ranks = tp_active_ranks.reshape(self.ps.dp_size, -1).prod(axis=1)
        # 通过 IPC 通道将活跃 rank 列表发送给 tokenizer 进程
        self.ipc_channels.send_to_tokenizer.send_output(
            ActiveRanksOutput(status=dp_active_ranks.tolist())
        )

评论区精华

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

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

风险与影响

低风险。逻辑完全不变,仅代码重组。但需确保 _maybe_report_active_ranksrun_batch 中被正确调用(位置在 return ret 之前),且原内联代码的 early return 转换(从 if ...: blockif not ...: return)语义等价。

影响范围小,仅涉及 Scheduler 类的一个私有方法重构。对用户无感知,对系统行为无影响。未来需要调整 elastic-EP 活跃 rank 发布逻辑时,只需修改 _maybe_report_active_ranks,维护成本降低。

缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论