Prhub

#26672 [AMD] Work around HIP TPOT regression from Event.wait() in MTP seq lens resolution

原始 PR 作者 BangBOOM 合并时间 2026-05-29 15:18 文件变更 1 提交数 1 评论 0 代码增减 +5 / -1

执行摘要

修复 AMD MI355 上 MTP seq_lens 同步性能回退

在 AMD MI355 上进行 MTP 测试时,发现 resolve_seq_lens_cpu 路径中使用 Event.wait() 发布 publish_ready 会导致 TPOT 性能回退。该问题仅在 HIP 后端观察到,其他后端应保持原有的同步行为。

该 PR 为针对特定 AMD GPU 型号性能回退的临时 workaround,代码量小且逻辑清晰,适合快速合并以解除 AMD MI355 上的性能阻塞。建议在 AMD CI 中增加 MTP 性能测试以覆盖此场景,并跟踪后续 AMD 驱动或 PyTorch 版本更新是否能移除该 workaround。

讨论亮点

无实质性讨论。PR 由 gemini-code-assist 机器审核无反馈,并由 HaiShaw 批准。

实现拆解

  1. 修改 python/sglang/srt/managers/overlap_utils.pyresolve_seq_lens_cpu 方法:当 publish_ready 不为 None 时,根据后端类型选择不同的同步方式。
  2. 若为 HIP 后端(_is_hip 为 True),则调用 self.publish_ready.synchronize() 作为临时规避措施。
  3. 其他后端继续使用 self.publish_ready.wait() 保持原有行为。
  4. 该改动仅影响 MTP(Multi-Token Prediction)推测解码路径,不涉及其他功能。
文件 模块 状态 重要度
python/sglang/srt/managers/overlap_utils.py 调度器 modified 5.59

关键符号

resolve_seq_lens_cpu

关键源码片段

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

该文件实现了 MTP 推测解码中的序列长度同步逻辑。PR 在此处增加了一个 HIP 后端条件分支,用 `synchronize()` 替代 `wait()` 以规避 AMD MI355 上的 TPOT 回退。

def resolve_seq_lens_cpu(self, batch: ScheduleBatch) -> None:
    # ... 前面代码省略 ...
    fi = batch.spec_info.future_indices if batch.spec_info is not None else None
    if fi is None:
        return
    if self.publish_ready is not None:
        if _is_hip:
            # 临时 workaround: Event.wait() 在 AMD MI355 上导致 TPOT 回退
            self.publish_ready.synchronize()
        else:
            self.publish_ready.wait()
    batch.seq_lens = self.new_seq_lens_buf[fi]
    # ... 后续逻辑不变 ...

评论区精华

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

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

风险与影响

  • 回归风险:低。仅修改 HIP 后端的一个分支,其他后端行为不变。但缺少针对 HIP 后端的性能回归测试,无法保证该 workaround 在所有 AMD GPU 型号上均有效。
  • 功能性风险:synchronize() 是阻塞调用,会等待事件完成,可能略微增加 CPU 等待时间,但避免了更严重的 TPOT 回退。
  • 兼容性:无影响,因为改动仅限 HIP 后端。
  • 用户影响:AMD MI355 用户在使用 MTP 时将获得 TPOT 性能改善。其他 AMD GPU 或 NVIDIA GPU 用户无影响。
  • 系统影响:极小,仅影响 MTP 推测解码路径中的序列长度 CPU 同步环节。
  • 团队影响:低,代码改动小,但需在后续版本中确认是否需要更通用的修复。
缺少 HIP 性能测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论