vllm-project/vllm · error · ValueError
dcp_comm_backend='a2a' requires decode_context_parallel_size
Error message
dcp_comm_backend='a2a' requires decode_context_parallel_size > 1.
What it means
The 'a2a' decode-context-parallel communication backend is an all-to-all implementation that only activates with more than one DCP rank. ParallelConfig rejects dcp_comm_backend='a2a' when decode_context_parallel_size <= 1, since there would be no cross-rank traffic to optimize.
Source
Thrown at vllm/config/parallel.py:542
tp = self.tensor_parallel_size
pcp = self.prefill_context_parallel_size
dcp = self.decode_context_parallel_size
if pcp > 1 and self.data_parallel_size > 1:
raise ValueError("PCP does not support data parallelism yet.")
if pcp == 1:
# DCP reuses the TP ranks when PCP is disabled.
if tp % dcp != 0:
raise ValueError(f"tp_size={tp} must be divisible by dcp_size={dcp}.")
elif dcp not in (1, pcp, tp * pcp):
raise ValueError(
"When PCP is enabled, DCP must be disabled, span the PCP "
"axis, or span the full TP x PCP axis. "
f"Got TP={tp}, PCP={pcp}, DCP={dcp}; valid DCP sizes are "
f"{sorted({1, pcp, tp * pcp})}."
)
if self.dcp_comm_backend == "a2a" and self.decode_context_parallel_size <= 1:
raise ValueError(
"dcp_comm_backend='a2a' requires decode_context_parallel_size > 1."
)
return self
@property
def world_size_across_dp(self) -> int:
"""Process world size across TP, PCP, PP, and DP."""
return self.world_size * self.data_parallel_size
@property
def use_ubatching(self) -> bool:
return self.enable_dbo or self.ubatch_size > 1
@property
def num_ubatches(self) -> int:
return 2 if self.enable_dbo else self.ubatch_size
View on GitHub (pinned to c794754062)
Solutions
- Add --decode-context-parallel-size N with N > 1 to make a2a meaningful.
- Or remove --dcp-comm-backend a2a / leave the default backend when running without DCP.
Example fix
# before vllm serve model --dcp-comm-backend a2a # after vllm serve model --decode-context-parallel-size 2 --dcp-comm-backend a2a
Defensive patterns
Strategy: validation
Validate before calling
def a2a_valid(dcp_comm_backend: str, dcp: int) -> bool:
return dcp_comm_backend != "a2a" or dcp > 1
assert a2a_valid("a2a", 2) Prevention
- Bind --dcp-comm-backend a2a and --decode-context-parallel-size > 1 into a single config fragment.
- Remove backend-tuning flags whenever disabling the feature they tune.
When it happens
Trigger: Setting --dcp-comm-backend a2a while decode_context_parallel_size is 1 (the default).
Common situations: Enabling the a2a backend from a performance tuning guide whose DCP flags were not also copied; disabling DCP for debugging but leaving the backend flag in place.
Related errors
- PCP does not support data parallelism yet.
- tp_size={tp} must be divisible by dcp_size={dcp}.
- When PCP is enabled, DCP must be disabled, span the PCP axis
- {kind} parser `{name}` is not registered{}
- gpt_oss uses native Harmony output parsing; generic {kind} p
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/9c019ab65f8b8d16.
Report an issue: GitHub.