vllm-project/vllm · error · ValueError

Elastic EP with async EPLB requires the NIXL package. Either

Error message

Elastic EP with async EPLB requires the NIXL package. Either install NIXL or set --eplb-config.use_async=false.

What it means

Elastic EP with asynchronous EPLB (eplb_config.use_async=true) transfers expert states with NIXL. ParallelConfig lazily imports vllm.distributed.nixl_utils.is_nixl_available and raises when the NIXL package is absent from the environment.

Source

Thrown at vllm/config/parallel.py:861

        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."
                    )

        if self.data_parallel_size > 1 or self.data_parallel_size_local == 0:
            # Data parallel was specified in the engine args.
            if self.distributed_executor_backend == "external_launcher":
                # For external launcher,
                # we need to set the data parallel rank automatically
                self.data_parallel_rank = int(os.environ["RANK"]) // (
                    self.world_size // self.data_parallel_size
                )
                logger.info(
                    "Set data_parallel_rank to %d automatically.",
                    self.data_parallel_rank,
                )
            if not self.enable_elastic_ep:

View on GitHub (pinned to c794754062)

Solutions

  1. Install/build vLLM with NIXL support (e.g. a recent wheel that bundles nixl, or install the nixl package into the environment).
  2. Or set --eplb-config.use_async=false to use synchronous EPLB rebalancing that does not need NIXL.
  3. Verify with `python -c "from vllm.distributed.nixl_utils import is_nixl_available; print(is_nixl_available())"` before launching.

Example fix

# before
vllm serve model --enable-eplb --enable-elastic-ep --eplb-config '{"use_async": true}'
# after (no NIXL available)
vllm serve model --enable-eplb --enable-elastic-ep --eplb-config '{"use_async": false}'
Defensive patterns

Strategy: validation

Validate before calling

def async_eplb_nixl_ok(use_async: bool) -> bool:
    if not use_async:
        return True
    from vllm.distributed.nixl_utils import is_nixl_available
    return is_nixl_available()

Try / catch

try:
    EngineArgs(enable_eplb=True, enable_elastic_ep=True,
               eplb_config={"use_async": True})
except ValueError as e:
    if "NIXL" in str(e):
        # fall back to sync EPLB rather than failing the deployment
        EngineArgs(enable_eplb=True, enable_elastic_ep=True,
                   eplb_config={"use_async": False})
    else:
        raise

Prevention

When it happens

Trigger: Running --enable-elastic-ep with an eplb config where use_async is true (its default in EPLBConfig) in a vLLM install built without NIXL support.

Common situations: Custom or older vLLM builds, slim Docker images that excluded NIXL, or CUDA environments where the nixl wheel was not installed; the error surfaces only when elastic EP + async EPLB are both requested.

Related errors


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