{"record":{"id":"a7840e1845922731","repo":"vllm-project/vllm","slug":"async-scheduling-is-not-compatible-with-rocm-deepe","errorCode":null,"errorMessage":"Async scheduling is not compatible with ROCm DeepEP high-throughput DBO. Please use --no-async-scheduling or select a different all2all backend.","messagePattern":"Async scheduling is not compatible with ROCm DeepEP high-throughput DBO\\. Please use --no-async-scheduling or select a different all2all backend\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"vllm/config/vllm.py","lineNumber":1158,"sourceCode":"\n        from vllm.platforms import current_platform\n        from vllm.v1.executor.abstract import Executor\n\n        executor_backend = self.parallel_config.distributed_executor_backend\n        executor_class = Executor.get_class(self)\n        executor_supports_async_sched = executor_class.supports_async_scheduling()\n        uses_rocm_deepep_ht_dbo = (\n            current_platform.is_rocm()\n            and self.parallel_config.enable_dbo\n            and self.parallel_config.all2all_backend == \"deepep_high_throughput\"\n        )\n\n        if self.scheduler_config.async_scheduling:\n            # Async scheduling explicitly enabled, hard fail any incompatibilities.\n            # Currently, async scheduling only support eagle speculative\n            # decoding.\n            if uses_rocm_deepep_ht_dbo:\n                raise ValueError(\n                    \"Async scheduling is not compatible with ROCm DeepEP \"\n                    \"high-throughput DBO. Please use --no-async-scheduling or \"\n                    \"select a different all2all backend.\"\n                )\n            if self.speculative_config is not None:\n                if (\n                    self.speculative_config.method not in get_args(EagleModelTypes)\n                    and self.speculative_config.method not in get_args(NgramGPUTypes)\n                    and self.speculative_config.method != \"draft_model\"\n                    and self.speculative_config.method != \"dspark\"\n                ):\n                    raise ValueError(\n                        \"Currently, async scheduling is only supported \"\n                        \"with EAGLE/MTP/Draft Model/NGram GPU/DSpark kind of \"\n                        \"speculative decoding\"\n                    )\n                if self.speculative_config.disable_padded_drafter_batch:\n                    raise ValueError(","sourceCodeStart":1140,"sourceCodeEnd":1176,"githubUrl":"https://github.com/vllm-project/vllm/blob/c794754062d49a8fdb63ab3c5215b488b865030c/vllm/config/vllm.py#L1140-L1176","documentation":"On ROCm, DeepEP high-throughput all2all combined with decode-batch-overlap (DBO) is incompatible with the async scheduling path in vLLM's scheduler. When `async_scheduling` is explicitly enabled and the platform is ROCm with `--enable-dbo` and `--all2all-backend deepep_high_throughput`, VllmConfig validation hard-fails.","triggerScenarios":"Launching on ROCm hardware with `--async-scheduling`, `--enable-dbo`, and `--all2all-backend deepep_high_throughput` (all three conditions combined).","commonSituations":"Running DeepSeek-style MoE models on AMD MI300x clusters with DeepEP; porting a CUDA launch script (where this combination may be fine) to ROCm without adjusting flags.","solutions":["Add `--no-async-scheduling` to disable the async scheduler.","Or switch the all2all backend, e.g. `--all2all-backend deepep_normal` (or another supported backend).","Or drop `--enable-dbo` if DBO is not required."],"exampleFix":"# before\nvllm serve deepseek-ai/DeepSeek-V3 \\\n  --async-scheduling --enable-dbo \\\n  --all2all-backend deepep_high_throughput\n\n# after\nvllm serve deepseek-ai/DeepSeek-V3 \\\n  --no-async-scheduling --enable-dbo \\\n  --all2all-backend deepep_high_throughput","handlingStrategy":"validation","validationCode":"import platform\nif async_scheduling and is_rocm() and enable_dbo and all2all_backend == \"deepep_high_throughput\":\n    async_scheduling = False  # or pick another all2all backend before launch","typeGuard":null,"tryCatchPattern":"try:\n    engine = AsyncLLM.from_engine_args(args)\nexcept ValueError as e:\n    if \"ROCm DeepEP\" in str(e):\n        args.async_scheduling = False\n        engine = AsyncLLM.from_engine_args(args)\n    else:\n        raise","preventionTips":["Keep platform-conditional flag sets (CUDA vs ROCm) in launch scripts","Smoke-test flag combinations on the target platform in CI"],"tags":["rocm","deepep","async-scheduling","dbo","moe"],"backgroundTag":null,"analyzedSha":"c794754062d49a8fdb63ab3c5215b488b865030c","analyzedAt":"2026-08-14T21:17:39.825Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}