vllm-project/vllm · error · ValueError

data_parallel_size_local ({self.data_parallel_size_local}) m

Error message

data_parallel_size_local ({self.data_parallel_size_local}) must be <= data_parallel_size ({self.data_parallel_size})

What it means

data_parallel_size_local bounds how many of the data-parallel ranks run on this node. ParallelConfig rejects it when it exceeds the total data_parallel_size, since a per-node count cannot be larger than the global count.

Source

Thrown at vllm/config/parallel.py:476

            )

        if self.enable_fault_tolerance and self._api_process_count > 1:
            raise ValueError(
                "Fault tolerance requires a single API server process "
                f"(--api-server-count=1), but got {self._api_process_count}. "
                "The FT system assumes one AsyncMPClient manages all engines."
            )

        if self.all2all_backend in ["pplx", "naive"]:
            logger.warning(
                "The '%s' all2all backend has been removed. "
                "Falling back to 'allgather_reducescatter'.",
                self.all2all_backend,
            )
            self.all2all_backend = "allgather_reducescatter"

        if self.data_parallel_size_local > self.data_parallel_size:
            raise ValueError(
                f"data_parallel_size_local ({self.data_parallel_size_local}) "
                f"must be <= data_parallel_size ({self.data_parallel_size})"
            )

        if self.data_parallel_size <= 1 and self.data_parallel_external_lb:
            raise ValueError(
                "data_parallel_external_lb can only be set when data_parallel_size > 1"
            )

        if not self.numa_bind and (
            self.numa_bind_nodes is not None or self.numa_bind_cpus is not None
        ):
            raise ValueError(
                "numa_bind_nodes and numa_bind_cpus require numa_bind=True."
            )

        if self.enable_eplb:
            if not current_platform.is_cuda_alike():

View on GitHub (pinned to c794754062)

Solutions

  1. Raise --data-parallel-size to at least the local value, e.g. --data-parallel-size 4 --data-parallel-size-local 4.
  2. Or lower --data-parallel-size-local so it is <= data_parallel_size.
  3. Leave data_parallel_size_local unset (0) on single-node setups so vLLM treats all DP ranks as local.

Example fix

# before
--data-parallel-size 2 --data-parallel-size-local 4
# after
--data-parallel-size 4 --data-parallel-size-local 4
Defensive patterns

Strategy: validation

Validate before calling

def dp_sizes_valid(dp_size: int, dp_size_local: int) -> bool:
    return dp_size_local <= dp_size

assert dp_sizes_valid(4, 4)

Prevention

When it happens

Trigger: Passing --data-parallel-size-local greater than --data-parallel-size, e.g. local=4 with size=2.

Common situations: Editing a multi-node launch script and shrinking --data-parallel-size without updating the local value; assuming data_parallel_size_local is an independent knob rather than a sub-count of the global DP size.

Related errors


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