vllm-project/vllm · error · ValueError

Async scheduling is not compatible with disable_padded_draft

Error message

Async scheduling is not compatible with disable_padded_drafter_batch=True.

What it means

Padded drafter batches are an internal invariant of the async scheduling + speculative decoding path. Setting `disable_padded_drafter_batch=True` in the speculative config while async scheduling is explicitly enabled makes the two mechanisms incompatible, so VllmConfig raises this error during validation.

Source

Thrown at vllm/config/vllm.py:1176

                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(
                        "Async scheduling is not compatible with "
                        "disable_padded_drafter_batch=True."
                    )
            if not executor_supports_async_sched:
                raise ValueError(
                    f"`{executor_backend}` does not support async scheduling yet."
                )
        elif self.scheduler_config.async_scheduling is None:
            # Enable async scheduling unless there is an incompatible option.
            if (
                self.model_config is not None
                and self.model_config.runner_type == "pooling"
            ):
                # The current implementation of asynchronous scheduling negatively
                # impacts performance of pooling models, so we disable by default.
                logger.debug(
                    "Disabling asynchronous scheduling by default for pooling model."
                )

View on GitHub (pinned to c794754062)

Solutions

  1. Remove `disable_padded_drafter_batch` from the speculative config (let it default to False).
  2. Or disable async scheduling with `--no-async-scheduling` if padded-drafter-batch disabling is more important.

Example fix

# before
--async-scheduling --speculative-config '{"method":"eagle","model":"...","disable_padded_drafter_batch":true}'

# after
--async-scheduling --speculative-config '{"method":"eagle","model":"..."}'
Defensive patterns

Strategy: validation

Validate before calling

if async_scheduling and spec_config.get("disable_padded_drafter_batch"):
    spec_config.pop("disable_padded_drafter_batch")  # incompatible with async sched

Try / catch

try:
    LLM(**args)
except ValueError as e:
    if "disable_padded_drafter_batch" in str(e):
        args["speculative_config"].pop("disable_padded_drafter_batch", None)
        LLM(**args)
    else:
        raise

Prevention

When it happens

Trigger: Launching with `--async-scheduling` and a speculative config containing `"disable_padded_drafter_batch": true` (e.g. via --speculative-config JSON).

Common situations: Users copying a tuned speculative config (where padding was disabled to save compute) into a launch that also enables async scheduling for throughput.

Related errors


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