执行摘要
将 WAR 屏障设为仅 CUDA 启用,修复 AMD 回归
PR #26380 添加的WAR屏障在AMD/HIP平台上引发了性能回归:MTP测试超时、优先级调度断言失败、DSv4非MTP吞吐量下降约20%。该屏障在CUDA上免费,因此需要平台条件化以避免影响AMD。
值得精读,尤其是平台差异处理的决策过程。
reviewer yctseng0211 已批准并确认 deepseekv4 在 AMD 上的性能验证通过。
PR #26380 添加的WAR屏障在AMD/HIP平台上引发了性能回归:MTP测试超时、优先级调度断言失败、DSv4非MTP吞吐量下降约20%。该屏障在CUDA上免费,因此需要平台条件化以避免影响AMD。
值得精读,尤其是平台差异处理的决策过程。
reviewer yctseng0211 已批准并确认 deepseekv4 在 AMD 上的性能验证通过。
scheduler.py 的 run_event_loop 中导入 is_cuda 并设置 self._war_barrier_enabled = is_cuda()。event_loop_overlap、event_loop_overlap_disagg_decode、event_loop_overlap_disagg_prefill 中,只在启用屏障时执行 schedule_stream.wait_stream(forward_stream)。overlap_utils.py 中,将 D2H 流和固定内存缓冲区的创建条件从 _is_cuda or _is_hip 改为 _is_cuda,因为该补偿与CUDA屏障的占用损失对应,其他平台不需要。| 文件 | 模块 | 状态 | 重要度 |
|---|---|---|---|
python/sglang/srt/managers/scheduler.py |
调度器 | modified | 5.96 |
python/sglang/srt/managers/overlap_utils.py |
重叠工具 | modified | 5.19 |
python/sglang/srt/disaggregation/decode.py |
分离解码 | modified | 4.59 |
python/sglang/srt/disaggregation/prefill.py |
分离预填 | modified | 4.59 |
python/sglang/srt/managers/scheduler.py
core-logic
核心调度文件,添加了 `_war_barrier_enabled` 标志并条件化屏障调用。
def run_event_loop(self) -> None:
"""运行调度器事件循环,设置 schedule_stream 并分发到对应事件循环"""
if use_mlx():
dispatch_event_loop(self)
return
self.schedule_stream = self.device_module.Stream(priority=0)
if self.device == "cpu":
self.schedule_stream.synchronize = lambda: None # CPU 上无操作
# WAR 屏障仅针对 CUDA 启用;其他平台(HIP/NPU/CPU)保持无屏障行为
self._war_barrier_enabled = is_cuda()
with self.device_module.StreamContext(self.schedule_stream):
dispatch_event_loop(self)
python/sglang/srt/managers/overlap_utils.py
core-logic
重叠缓冲区工具,将 D2H 流和固定内存缓冲区创建条件收紧为仅 CUDA。
# 用于 forward 准备的 D2H 流和 CPU 固定内存缓冲区,仅 CUDA 需要:
# 该缓冲区用于补偿 CUDA 上 WAR 屏障带来的占用损失;
# 其他平台没有屏障,直接使用 .cpu() 回退路径。
if _is_cuda:
self.new_seq_lens_cpu_pinned = torch.empty(
(self.req_pool_size,), dtype=torch.int64, pin_memory=True
)
self.fwd_prepare_d2h_stream = torch.get_device_module(self.device).Stream()
else:
self.new_seq_lens_cpu_pinned = None
self.fwd_prepare_d2h_stream = None
yctseng0211 已批准并确认 deepseekv4 在 AMD 上的性能验证通过。
结论:屏障修改已通过 AMD CI 验证,无性能回归。 · 已解决
风险较低。CUDA平台保留屏障,数据竞争保护不变;非CUDA平台恢复为之前无屏障行为,但该屏障仅修复一个特定竞争,之前未报告问题。主要文件均为核心调度路径,修改仅是添加条件判断,引入新bug可能性低。
影响范围:仅影响非CUDA平台(AMD、NPU、CPU),CUDA无变化。用户:AMD用户将看到性能回归被修复。系统:调度器重叠运行时的并发安全性在非CUDA平台上恢复至之前状态。团队:已完成AMD环境验证。影响程度:中等。
当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。
参与讨论