Skip to content

Commit 15b4d28

Browse files
committed
[BugFix] Seperate prometheus multiproc dir for single-server multi-dp services
1 parent cbb0811 commit 15b4d28

4 files changed

Lines changed: 27 additions & 7 deletions

File tree

fastdeploy/engine/common_engine.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
)
6666
from fastdeploy.inter_communicator.fmq import FMQ
6767
from fastdeploy.metrics.metrics import main_process_metrics
68+
from fastdeploy.metrics.prometheus_multiprocess_setup import setup_dp_prometheus_dir
6869
from fastdeploy.model_executor.guided_decoding import schema_checker
6970
from fastdeploy.plugins.token_processor import load_token_processor_plugins
7071
from fastdeploy.spec_decode import SpecMethod
@@ -2720,6 +2721,7 @@ def launch_components(self):
27202721
self.launched_expert_service_signal.value[0] = 1
27212722
self.dp_processed = []
27222723
self.dp_engine_worker_queue_server = []
2724+
base_prom_dir = os.environ.get("PROMETHEUS_MULTIPROC_DIR")
27232725
for i in range(
27242726
1,
27252727
self.cfg.parallel_config.data_parallel_size // self.cfg.nnode,
@@ -2758,10 +2760,13 @@ def launch_components(self):
27582760
f"Engine is initialized successfully with {self.cfg.parallel_config.tensor_parallel_size}"
27592761
+ f" data parallel id {i}"
27602762
)
2763+
setup_dp_prometheus_dir(i, base_prom_dir)
27612764
self.dp_processed[-1].start()
27622765
while self.launched_expert_service_signal.value[i] == 0:
27632766
time.sleep(1)
27642767

2768+
setup_dp_prometheus_dir(0, base_prom_dir)
2769+
27652770
def check_worker_initialize_status(self):
27662771
"""
27672772
Check the initlialize status of workers by stdout logging

fastdeploy/engine/engine.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
log_request_error,
5151
)
5252
from fastdeploy.metrics.metrics import main_process_metrics
53+
from fastdeploy.metrics.prometheus_multiprocess_setup import setup_dp_prometheus_dir
5354
from fastdeploy.platforms import current_platform
5455
from fastdeploy.utils import EngineError, console_logger, envs, llm_logger
5556

@@ -860,6 +861,7 @@ def launch_components(self):
860861
self.launched_expert_service_signal.value[0] = 1
861862
self.dp_processed = []
862863
self.dp_engine_worker_queue_server = []
864+
base_prom_dir = os.environ.get("PROMETHEUS_MULTIPROC_DIR")
863865
for i in range(
864866
1,
865867
self.cfg.parallel_config.data_parallel_size // self.cfg.nnode,
@@ -897,8 +899,11 @@ def launch_components(self):
897899
f"Engine is initialized successfully with {self.cfg.parallel_config.tensor_parallel_size}"
898900
+ f" data parallel id {i}"
899901
)
902+
setup_dp_prometheus_dir(i, base_prom_dir)
900903
self.dp_processed[-1].start()
901904

905+
setup_dp_prometheus_dir(0, base_prom_dir)
906+
902907
for i in range(
903908
1,
904909
self.cfg.parallel_config.data_parallel_size // self.cfg.nnode,

fastdeploy/entrypoints/openai/multi_api_server.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import sys
2121
import time
2222

23+
from fastdeploy.metrics.prometheus_multiprocess_setup import setup_dp_prometheus_dir
2324
from fastdeploy.platforms import current_platform
2425
from fastdeploy.utils import find_free_ports, get_logger, is_port_available
2526

@@ -108,13 +109,7 @@ def start_servers(
108109
env["FD_ENABLE_MULTI_API_SERVER"] = "1"
109110
env["FD_LOG_DIR"] = env.get("FD_LOG_DIR", "log") + f"/log_{i}"
110111
if "PROMETHEUS_MULTIPROC_DIR" in env:
111-
prom_dir = env.get("PROMETHEUS_MULTIPROC_DIR")
112-
prom_dir_i = os.path.join(os.path.dirname(prom_dir), os.path.basename(prom_dir) + f"_dp{i}")
113-
# Create the directory if it doesn't exist
114-
if not os.path.exists(prom_dir_i):
115-
os.makedirs(prom_dir_i, exist_ok=True)
116-
env["PROMETHEUS_MULTIPROC_DIR"] = prom_dir_i
117-
logger.info(f"Set PROMETHEUS_MULTIPROC_DIR for DP {i}: {prom_dir_i}")
112+
setup_dp_prometheus_dir(i, env["PROMETHEUS_MULTIPROC_DIR"], env)
118113

119114
cmd = [
120115
sys.executable,

fastdeploy/metrics/prometheus_multiprocess_setup.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,18 @@ def setup_multiprocess_prometheus():
4444
"will properly handle cleanup."
4545
)
4646
return os.environ["PROMETHEUS_MULTIPROC_DIR"]
47+
48+
49+
def setup_dp_prometheus_dir(dp_id, base_dir, env_dict=None):
50+
"""Set up an isolated PROMETHEUS_MULTIPROC_DIR for a given data parallel rank.
51+
52+
Args:
53+
dp_id: The data parallel rank id.
54+
base_dir: The base PROMETHEUS_MULTIPROC_DIR to derive from.
55+
env_dict: If provided, write to this dict instead of os.environ.
56+
"""
57+
prom_dir_dp = os.path.join(base_dir, f"dp{dp_id}")
58+
os.makedirs(prom_dir_dp, exist_ok=True)
59+
target = env_dict if env_dict is not None else os.environ
60+
target["PROMETHEUS_MULTIPROC_DIR"] = prom_dir_dp
61+
llm_logger.info(f"Set PROMETHEUS_MULTIPROC_DIR for DP {dp_id}: {prom_dir_dp}")

0 commit comments

Comments
 (0)