vllm-project/vllm · error · ValueError

Elastic EP is not supported with pipeline parallelism (pipel

Error message

Elastic EP is not supported with pipeline parallelism (pipeline_parallel_size={self.pipeline_parallel_size}).

What it means

Elastic EP coordinates scale-up/scale-down across a single pipeline; pipeline stages cannot be independently rescaled, so ParallelConfig rejects elastic EP with pipeline_parallel_size > 1.

Source

Thrown at vllm/config/parallel.py:847

        return hash_factors(factors)

    def __post_init__(self) -> None:
        # Continue with the rest of the initialization
        self.world_size = (
            self.pipeline_parallel_size
            * self.tensor_parallel_size
            * self.prefill_context_parallel_size
        )

        if self.distributed_executor_backend == "external_launcher":
            logger.info("Using external launcher for distributed inference.")
            self.world_size *= self.data_parallel_size

        if self.enable_elastic_ep:
            if not self.enable_eplb:
                raise ValueError("Elastic EP is only supported with enable_eplb=True.")
            if self.pipeline_parallel_size > 1:
                raise ValueError(
                    "Elastic EP is not supported with pipeline parallelism "
                    f"(pipeline_parallel_size={self.pipeline_parallel_size})."
                )
            if self.data_parallel_external_lb or self.data_parallel_hybrid_lb:
                raise NotImplementedError(
                    "Elastic EP is not compatible with data_parallel_external_lb "
                    "or data_parallel_hybrid_lb. Elastic EP relies on a single API "
                    "server and core client to coordinate scale up/down."
                )
            if self.eplb_config.use_async:
                from vllm.distributed.nixl_utils import is_nixl_available

                if not is_nixl_available():
                    raise ValueError(
                        "Elastic EP with async EPLB requires the NIXL "
                        "package. Either install NIXL or set "
                        "--eplb-config.use_async=false."
                    )

View on GitHub (pinned to c794754062)

Solutions

  1. Remove pipeline parallelism (set --pipeline-parallel-size 1) and fit the model via TP/EP instead.
  2. Or keep PP and drop --enable-elastic-ep, using static capacity planning instead of dynamic scaling.

Example fix

# before
vllm serve big-moe --pipeline-parallel-size 2 --enable-elastic-ep
# after
vllm serve big-moe --pipeline-parallel-size 1 --tensor-parallel-size 8 --enable-elastic-ep
Defensive patterns

Strategy: validation

Validate before calling

def elastic_ep_pp_valid(enable_elastic_ep: bool, pp: int) -> bool:
    return not enable_elastic_ep or pp <= 1

assert elastic_ep_pp_valid(True, 1)

Prevention

When it happens

Trigger: Combining --enable-elastic-ep with --pipeline-parallel-size 2 or more.

Common situations: Large MoE models that traditionally need PP to fit in memory, with operators attempting to add elastic EP on top; migrating a PP deployment to elastic scaling without removing PP.

Related errors


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