Prhub

#25685 [SP] Fix runtime_max_tokens_per_rank for sequence parallelism

原始 PR 作者 merrymercy 合并时间 2026-05-19 06:59 文件变更 1 提交数 1 评论 2 代码增减 +10 / -5

执行摘要

修复 SP 下 runtime_max_tokens_per_rank 过大问题

当启用序列并行时,get_dp_global_num_tokens() 返回的是 pre-scatter 的 scheduler token 数,可能远超实际单个 worker 在 SP 下处理 token 数,导致 A2A workspace 分配过大,增加 TTFT。PR body 明确说明“the pre-scatter scheduler token count… can exceed the A2A workspace cap”。

建议需要关注 MoE + 序列并行性能的团队成员精读该改动。设计思路清晰(区分 DP attention 与 SP 的 workspace 需求),可作为类似分配逻辑的优化参考。

讨论亮点

无 review 评论,PR 由作者 merrymercy 直接提交并合并。讨论仅在 CI 触发指令中出现过一次 /tag-and-rerun-ci

实现拆解

  1. 条件逻辑重写:在 flashinfer.pydispatch 方法中,将原来单行三目运算拆分为更清晰的分支判断。
  2. 多 rank DP attention 分支:当 dp_global 非空且列表长度大于 1 时,保持原有行为——取全局最大 token 数以确保所有 rank 的 workspace 能容纳最胖的输入。
  3. 单 rank 或 SP 分支:否则使用 x.shape[0](post-scatter 后的实际 token 数)。这个数值对于 SP 而言正好反映当前 rank 在 scatter 后真正的输入规模,不会大于实际传给 A2A 的 payload。
  4. 配套影响:仅修改了一个文件(flashinfer.py),无其他模块、配置或测试变更。
文件 模块 状态 重要度
python/sglang/srt/layers/moe/token_dispatcher/flashinfer.py 调度器 modified 6.04

关键源码片段

python/sglang/srt/layers/moe/token_dispatcher/flashinfer.py core-logic

MoE token dispatcher 的核心分发逻辑,修复了序列并行下 workspace 分配过大的问题,直接影响 TTFT。

# python/sglang/srt/layers/moe/token_dispatcher/flashinfer.py
# dispatch 方法中关键计算逻辑(PR 改动部分)dp_global = get_dp_global_num_tokens()
if dp_global is not None and len(dp_global) > 1:
    # DP attention: 多个 DP rank 有不同 token 数。
    # 取全局最大值以保证每个 rank 的 A2A workspace 都能容纳最胖的输入。
    self.runtime_max_tokens_per_rank = max(dp_global)
else:
    # dp_size==1 或 启用序列并行(SP):
    # 使用实际的输入张量大小(SP 模式下为 post-scatter 后的 size,普通模式为完整 batch size)。
    # 避免使用 pre-scatter 的 scheduler 计数(该计数可能超过 workspace 上限)。
    self.runtime_max_tokens_per_rank = x.shape[0]

评论区精华

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

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

风险与影响

风险较低。改动局限于 flashinfer.pyruntime_max_tokens_per_rank 的计算逻辑,且原有 x.shape[0] 回退路径已被保留。唯一可能的问题是当 get_dp_global_num_tokens() 返回非 None 但长度为 0(理论上不应发生),此时会进入 else 分支使用 x.shape[0],行为与原代码后备一致,无额外风险。

影响范围:仅影响启用了序列并行(SP)且使用 MoE 的模型(如 Llama4x、DeepSeek V4)。影响程度:降低了这些场景下的 TTFT,对非 SP 或 DP 注意力场景无行为变化。团队影响:开发者无需修改其他代码即可受益。

核心路径变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论