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

  1. Add --decode-context-parallel-size N with N > 1 to make a2a meaningful.
  2. 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

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


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