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

  1. Add `--no-async-scheduling` to disable the async scheduler.
  2. Or switch the all2all backend, e.g. `--all2all-backend deepep_normal` (or another supported backend).
  3. 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

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


AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14). Data as JSON: /api/errors/a7840e1845922731. Report an issue: GitHub.