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
- Remove `disable_padded_drafter_batch` from the speculative config (let it default to False).
- 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
- Do not copy tuned speculative configs wholesale into async-scheduling launches
- Pre-check speculative_config keys against known incompatibilities
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
- Currently, async scheduling is only supported with EAGLE/MTP
- rejection_sample_method='synthetic' requires exactly one of
- synthetic_acceptance_rates must have length {n}, got {rates}
- synthetic_acceptance_rates entries must be in [0, 1], got {r
- synthetic_acceptance_rates must be non-increasing, got {rate
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/8f28205a6ee5641c.
Report an issue: GitHub.