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
- Remove pipeline parallelism (set --pipeline-parallel-size 1) and fit the model via TP/EP instead.
- 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
- Plan MoE memory fit via TP/EP instead of PP when elastic scaling is a requirement.
- Document per-model which parallel strategy is allowed so operators do not stack PP onto elastic EP.
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
- Elastic EP is only supported with enable_eplb=True.
- Expert parallelism load balancing is only supported on CUDA
- enable_expert_parallel must be True to use EPLB.
- EPLB requires tensor, prefill-context, or data parallelism,
- num_redundant_experts is set to {self.eplb_config.num_redund
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/7f1216d31239f148.
Report an issue: GitHub.