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
+]