vllm-project/vllm · error · ValueError
Async scheduling is not compatible with ROCm DeepEP high-thr
Error message
Async scheduling is not compatible with ROCm DeepEP high-throughput DBO. Please use --no-async-scheduling or select a different all2all backend.
What it means
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.
Source
Thrown at vllm/config/vllm.py:1158
from vllm.platforms import current_platform
from vllm.v1.executor.abstract import Executor
executor_backend = self.parallel_config.distributed_executor_backend
executor_class = Executor.get_class(self)
executor_supports_async_sched = executor_class.supports_async_scheduling()
uses_rocm_deepep_ht_dbo = (
current_platform.is_rocm()
and self.parallel_config.enable_dbo
and self.parallel_config.all2all_backend == "deepep_high_throughput"
)
if self.scheduler_config.async_scheduling:
# Async scheduling explicitly enabled, hard fail any incompatibilities.
# Currently, async scheduling only support eagle speculative
# decoding.
if uses_rocm_deepep_ht_dbo:
raise ValueError(
"Async scheduling is not compatible with ROCm DeepEP "
"high-throughput DBO. Please use --no-async-scheduling or "
"select a different all2all backend."
)
if self.speculative_config is not None:
if (
self.speculative_config.method not in get_args(EagleModelTypes)
and self.speculative_config.method not in get_args(NgramGPUTypes)
and self.speculative_config.method != "draft_model"
and self.speculative_config.method != "dspark"
):
raise ValueError(
"Currently, async scheduling is only supported "
"with EAGLE/MTP/Draft Model/NGram GPU/DSpark kind of "
"speculative decoding"
)
if self.speculative_config.disable_padded_drafter_batch:
raise ValueError(View on GitHub (pinned to c794754062)
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.
Example fix
# before vllm serve deepseek-ai/DeepSeek-V3 \ --async-scheduling --enable-dbo \ --all2all-backend deepep_high_throughput # after vllm serve deepseek-ai/DeepSeek-V3 \ --no-async-scheduling --enable-dbo \ --all2all-backend deepep_high_throughput
Defensive patterns
Strategy: validation
Validate before calling
import platform
if async_scheduling and is_rocm() and enable_dbo and all2all_backend == "deepep_high_throughput":
async_scheduling = False # or pick another all2all backend before launch Try / catch
try:
engine = AsyncLLM.from_engine_args(args)
except ValueError as e:
if "ROCm DeepEP" in str(e):
args.async_scheduling = False
engine = AsyncLLM.from_engine_args(args)
else:
raise Prevention
- Keep platform-conditional flag sets (CUDA vs ROCm) in launch scripts
- Smoke-test flag combinations on the target platform in CI
When it happens
Trigger: Launching on ROCm hardware with `--async-scheduling`, `--enable-dbo`, and `--all2all-backend deepep_high_throughput` (all three conditions combined).
Common situations: 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.
Related errors
- multimodal preprocessing error: {0}
- Invalid wheel filename format: {wheel_name}
- The optimized moe_wna16_gemm kernel is only available on CUD
- The fused grouped_topk kernel is only available on CUDA plat
- Number of experts in the model must be greater than 0 when e
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/a7840e1845922731.
Report an issue: GitHub.