From 8bc776a9fb640cb45e42aca1f43606a57636c548 Mon Sep 17 00:00:00 2001 From: Stefan Koncarevic Date: Wed, 12 Aug 2026 10:15:27 -0500 Subject: [PATCH] [Bugfix][ROCm] Stop running shared experts on the aux stream vllm-project#48223 widened the shared-expert multi-stream overlap from is_cuda() to is_cuda_alike() under dp_size > 1, so the shared experts run on the aux stream on ROCm for the first time. Output is corrupted there: Qwen3.5-35B-A3B at DP2 + EP on gfx950 scores 0.00 on GSM8K with 70% of the answers unparsable. That is also why only this config broke, since the other two Qwen3.5 models in the same job run TP2 and never take the path. This is a workaround rather than a fix. The root cause in the new path is not isolated yet: it needs concurrency, it is not the BLAS backend and not tied to full decode graphs, and graph replay bypasses the Python path so the failing case cannot be instrumented. Turn the overlap off on ROCm meanwhile, restoring the behaviour every ROCm deployment had before vllm-project#48223. CUDA is untouched. GSM8K on gfx950 at DP2 + EP, 1319 questions: 0.0000 to 0.8613, invalid rate 0.705 to 0.000. Signed-off-by: Stefan Koncarevic --- .../layers/fused_moe/runner/shared_experts.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/vllm/model_executor/layers/fused_moe/runner/shared_experts.py b/vllm/model_executor/layers/fused_moe/runner/shared_experts.py index 992b2f836896..0ba34106df78 100644 --- a/vllm/model_executor/layers/fused_moe/runner/shared_experts.py +++ b/vllm/model_executor/layers/fused_moe/runner/shared_experts.py @@ -103,11 +103,10 @@ def _disable_shared_experts_overlap(self) -> bool: @property def _should_enable_stream_overlap_heuristic(self) -> bool: - # On ROCm, empirically it's shown that only DPA deployments benefit from - # multi-stream shared experts - if not current_platform.is_rocm(): - return True - return self._moe_config.moe_parallel_config.dp_size > 1 + # Workaround: the aux stream corrupts MoE output on ROCm, where this + # path first ran with #48223 -- Qwen3.5-35B-A3B at DP2 + EP on gfx950 + # scores 0.00 on GSM8K. Keep it off until the cause is found. + return not current_platform.is_rocm() def _determine_shared_experts_order( self,