@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / d3a563501b
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 3, 01:45 UTC

[EPLB] Change default EPLB communicator (#43110)

Signed-off-by: Markov Ilya <markovilya19@gmail.com> Co-authored-by: Markov Ilya <markovilya19@gmail.com>

Ilya Markov committed May 22, 2026 at 15:43 UTC d3a563501bcc6134a348f8458b1a797c94336f1f
2 files changed +25 -6
vllm/config/parallel.py
+11 -5
@@ -900,12 +900,18 @@ class ParallelConfig:
900 # (torch.distributed.batch_isend_irecv doesn't
901 # support stateless mode), so we use PyNCCL backend
902 self.eplb_config.communicator = "pynccl"
903 - elif self.eplb_config.use_async:
904 - # Torch Gloo is a backend that allows avoiding hangs
905 - # due to NCCL multi-thread conflicts in async EPLB
906 - self.eplb_config.communicator = "torch_gloo"
903 else:
908 - self.eplb_config.communicator = "torch_nccl"
904 + # Avoid torch_nccl: NCCL is fundamentally incompatible
905 + # with async EPLB due to multi-stream conflicts, and
906 + # batched isend/irecv hangs under high load.
907 + # See https://github.com/pytorch/pytorch/issues/174288
908 + # Prefer nixl when available; fall back to torch_gloo.
909 + from vllm.distributed.nixl_utils import is_nixl_available
910 +
911 + if is_nixl_available():
912 + self.eplb_config.communicator = "nixl"
913 + else:
914 + self.eplb_config.communicator = "torch_gloo"
915
916 @property
917 def use_ray(self) -> bool:
vllm/distributed/nixl_utils.py
+14 -1
@@ -79,4 +79,17 @@ def __getattr__(name: str) -> Any:
79 raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
80
81
82 -__all__ = ["NixlWrapper", "nixl_agent_config", "nixlXferTelemetry"]
82 +def is_nixl_available() -> bool:
83 + """Lightweight check for nixl/rixl package without importing it."""
84 + import importlib.util
85 +
86 + pkg = "rixl" if current_platform.is_rocm() else "nixl"
87 + return importlib.util.find_spec(pkg) is not None
88 +
89 +
90 +__all__ = [
91 + "NixlWrapper",
92 + "nixl_agent_config",
93 + "nixlXferTelemetry",
94 + "is_nixl_available",
95 +]