Skip to content

Commit 1938c35

Browse files
committed
Add pid prefix to process stdout/stderr instead of logger
1 parent e048001 commit 1938c35

File tree

2 files changed

+38
-16
lines changed

2 files changed

+38
-16
lines changed

vllm/engine/local_worker_utils.py

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import asyncio
22
import multiprocessing
33
import os
4+
import sys
45
import threading
56
import traceback
67
import uuid
78
from dataclasses import dataclass
9+
from io import TextIOBase
810
from multiprocessing.connection import wait
911
from typing import Any, Callable, Dict, Generic, List, Optional, TypeVar, Union
1012

@@ -16,6 +18,10 @@
1618

1719
_TERMINATE = "TERMINATE" # sentinel
1820

21+
# ANSI color codes
22+
CYAN = '\033[1;36m'
23+
RESET = '\033[0;0m'
24+
1925
# Use dedicated multiprocess context for workers.
2026
# Both spawn and fork work
2127
mp_method = os.getenv("MULTIPROC_METHOD", "fork")
@@ -172,9 +178,11 @@ def kill_worker(self):
172178
self.kill()
173179

174180
def run(self) -> None:
175-
# Re-init logger in forked process, to include worker-specific prefix
176-
global logger
177-
logger = init_logger(__name__)
181+
# Add process-specific prefix to stdout and stderr
182+
process_name = mp.current_process().name
183+
pid = os.getpid()
184+
_add_prefix(sys.stdout, process_name, pid)
185+
_add_prefix(sys.stderr, process_name, pid)
178186

179187
del self.tasks # Not used in forked process
180188
self.worker = self.worker_factory()
@@ -205,3 +213,30 @@ def run(self) -> None:
205213
logger.exception("Worker failed")
206214

207215
logger.info("Worker exiting")
216+
217+
218+
def _add_prefix(file: TextIOBase, worker_name: str, pid: int) -> None:
219+
"""Prepend output with process-specific prefix"""
220+
221+
prefix = f"{CYAN}({worker_name} pid={pid}){RESET} "
222+
file_write = file.write
223+
224+
def write_with_prefix(s: str):
225+
if not s:
226+
return
227+
if file.start_new_line:
228+
file_write(prefix)
229+
idx = 0
230+
while (next_idx := s.find('\n', idx)) != -1:
231+
next_idx += 1
232+
file_write(s[idx:next_idx])
233+
if next_idx == len(s):
234+
file.start_new_line = True
235+
return
236+
file_write(prefix)
237+
idx = next_idx
238+
file_write(s[idx:])
239+
file.start_new_line = False
240+
241+
file.start_new_line = True
242+
file.write = write_with_prefix

vllm/logger.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
# https://github.com/skypilot-org/skypilot/blob/86dc0f6283a335e4aa37b3c10716f90999f48ab6/sky/sky_logging.py
33
"""Logging configuration for vLLM."""
44
import logging
5-
import multiprocessing as mp
65
import os
76
import sys
87
from typing import Optional
@@ -13,13 +12,6 @@
1312
_DATE_FORMAT = "%m-%d %H:%M:%S"
1413

1514

16-
class ProcessLogger(logging.LoggerAdapter):
17-
18-
def process(self, msg, kwargs):
19-
msg = f"[{self.extra['process_name']} pid {self.extra['pid']}] {msg}"
20-
return msg, kwargs
21-
22-
2315
class NewLineFormatter(logging.Formatter):
2416
"""Adds logging prefix to newlines to align multi-line messages."""
2517

@@ -72,9 +64,4 @@ def init_logger(name: str):
7264
" Please open an issue on Github.")
7365
logger.addHandler(_default_handler)
7466
logger.propagate = False
75-
if mp.parent_process() is not None:
76-
logger = ProcessLogger(logger, {
77-
'process_name': mp.current_process().name,
78-
'pid': os.getpid()
79-
})
8067
return logger

0 commit comments

Comments
 (0)