@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 8d6a89dffd
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 12, 13:30 UTC

[UX] Suppress gloo log spam (#29250)

Signed-off-by: mgoin <mgoin64@gmail.com>

Michael Goin committed Nov 25, 2025 at 20:19 UTC 8d6a89dffd9e2e238b3c6ead964783cfdb053756
3 files changed +64 -27
vllm/distributed/parallel_state.py
+3 -1
@@ -51,6 +51,7 @@ from vllm.distributed.utils import StatelessProcessGroup
51 from vllm.logger import init_logger
52 from vllm.utils.import_utils import resolve_obj_by_qualname
53 from vllm.utils.network_utils import get_distributed_init_method
54 +from vllm.utils.system_utils import suppress_stdout
55 from vllm.utils.torch_utils import (
56 direct_register_custom_op,
57 supports_custom_op,
@@ -329,7 +330,8 @@ class GroupCoordinator:
330 )
331 # a group with `gloo` backend, to allow direct coordination between
332 # processes through the CPU.
332 - cpu_group = torch.distributed.new_group(ranks, backend="gloo")
333 + with suppress_stdout():
334 + cpu_group = torch.distributed.new_group(ranks, backend="gloo")
335 if self.rank in ranks:
336 self.ranks = ranks
337 self.world_size = len(ranks)
vllm/distributed/utils.py
+28 -26
@@ -30,6 +30,7 @@ from torch.distributed.rendezvous import rendezvous
30 import vllm.envs as envs
31 from vllm.logger import init_logger
32 from vllm.utils.network_utils import get_tcp_uri
33 +from vllm.utils.system_utils import suppress_stdout
34 from vllm.utils.torch_utils import is_torch_equal_or_newer
35
36 logger = init_logger(__name__)
@@ -427,33 +428,34 @@ def init_gloo_process_group(
428 Stateless init ProcessGroup with gloo backend compatible with
429 different torch versions.
430 """
430 - if is_torch_equal_or_newer("2.6"):
431 - pg = ProcessGroup(
432 - prefix_store,
433 - group_rank,
434 - group_size,
435 - )
436 - else:
437 - options = ProcessGroup.Options(backend="gloo")
438 - pg = ProcessGroup(
439 - prefix_store,
440 - group_rank,
441 - group_size,
442 - options,
443 - )
444 - from torch.distributed.distributed_c10d import ProcessGroupGloo
431 + with suppress_stdout():
432 + if is_torch_equal_or_newer("2.6"):
433 + pg = ProcessGroup(
434 + prefix_store,
435 + group_rank,
436 + group_size,
437 + )
438 + else:
439 + options = ProcessGroup.Options(backend="gloo")
440 + pg = ProcessGroup(
441 + prefix_store,
442 + group_rank,
443 + group_size,
444 + options,
445 + )
446 + from torch.distributed.distributed_c10d import ProcessGroupGloo
447
446 - backend_class = ProcessGroupGloo(
447 - prefix_store, group_rank, group_size, timeout=timeout
448 - )
449 - backend_type = ProcessGroup.BackendType.GLOO
450 - device = torch.device("cpu")
451 - if is_torch_equal_or_newer("2.6"):
452 - # _set_default_backend is supported in torch >= 2.6
453 - pg._set_default_backend(backend_type)
454 - backend_class._set_sequence_number_for_group()
455 -
456 - pg._register_backend(device, backend_type, backend_class)
448 + backend_class = ProcessGroupGloo(
449 + prefix_store, group_rank, group_size, timeout=timeout
450 + )
451 + backend_type = ProcessGroup.BackendType.GLOO
452 + device = torch.device("cpu")
453 + if is_torch_equal_or_newer("2.6"):
454 + # _set_default_backend is supported in torch >= 2.6
455 + pg._set_default_backend(backend_type)
456 + backend_class._set_sequence_number_for_group()
457 +
458 + pg._register_backend(device, backend_type, backend_class)
459 return pg
460
461
vllm/utils/system_utils.py
+33
@@ -56,6 +56,39 @@ def set_env_var(key: str, value: str) -> Iterator[None]:
56 os.environ[key] = old
57
58
59 +@contextlib.contextmanager
60 +def suppress_stdout():
61 + """
62 + Suppress stdout from C libraries at the file descriptor level.
63 +
64 + Only suppresses stdout, not stderr, to preserve error messages.
65 + Suppression is disabled when VLLM_LOGGING_LEVEL is set to DEBUG.
66 +
67 + Example:
68 + with suppress_stdout():
69 + # C library calls that would normally print to stdout
70 + torch.distributed.new_group(ranks, backend="gloo")
71 + """
72 + # Don't suppress if logging level is DEBUG
73 + if envs.VLLM_LOGGING_LEVEL == "DEBUG":
74 + yield
75 + return
76 +
77 + stdout_fd = sys.stdout.fileno()
78 + stdout_dup = os.dup(stdout_fd)
79 + devnull_fd = os.open(os.devnull, os.O_WRONLY)
80 +
81 + try:
82 + sys.stdout.flush()
83 + os.dup2(devnull_fd, stdout_fd)
84 + yield
85 + finally:
86 + sys.stdout.flush()
87 + os.dup2(stdout_dup, stdout_fd)
88 + os.close(stdout_dup)
89 + os.close(devnull_fd)
90 +
91 +
92 # File path utilities
93
94