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