Improve metrics, observability, and PD deploy tooling (#24521)

This commit is contained in:
Lianmin Zheng
2026-05-06 11:27:35 -07:00
committed by GitHub
parent d86f2916cc
commit b859f7ffba
11 changed files with 118 additions and 98 deletions
@@ -48,6 +48,8 @@ class TestDisaggregationMooncakePrefillLargerTP(PDDisaggregationServerBase):
cls.bootstrap_port,
"--tp",
"4",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
prefill_args += cls.transfer_backend + cls.rdma_devices
cls.process_prefill = popen_launch_pd_server(
@@ -69,6 +71,8 @@ class TestDisaggregationMooncakePrefillLargerTP(PDDisaggregationServerBase):
"2",
"--base-gpu-id",
"4",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
decode_args += cls.transfer_backend + cls.rdma_devices
cls.process_decode = popen_launch_pd_server(
@@ -123,6 +127,8 @@ class TestDisaggregationMooncakeDecodeLargerTP(PDDisaggregationServerBase):
cls.bootstrap_port,
"--tp",
"2",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
prefill_args += cls.transfer_backend + cls.rdma_devices
cls.process_prefill = popen_launch_pd_server(
@@ -144,6 +150,8 @@ class TestDisaggregationMooncakeDecodeLargerTP(PDDisaggregationServerBase):
"4",
"--base-gpu-id",
"4",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
decode_args += cls.transfer_backend + cls.rdma_devices
cls.process_decode = popen_launch_pd_server(
@@ -198,6 +206,8 @@ class TestDisaggregationMooncakeMHAPrefillLargerTP(PDDisaggregationServerBase):
cls.bootstrap_port,
"--tp",
"4",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
prefill_args += cls.transfer_backend + cls.rdma_devices
cls.process_prefill = popen_launch_pd_server(
@@ -219,6 +229,8 @@ class TestDisaggregationMooncakeMHAPrefillLargerTP(PDDisaggregationServerBase):
"2",
"--base-gpu-id",
"4",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
decode_args += cls.transfer_backend + cls.rdma_devices
cls.process_decode = popen_launch_pd_server(
@@ -273,6 +285,8 @@ class TestDisaggregationMooncakeMHADecodeLargerTP(PDDisaggregationServerBase):
cls.bootstrap_port,
"--tp",
"2",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
prefill_args += cls.transfer_backend + cls.rdma_devices
cls.process_prefill = popen_launch_pd_server(
@@ -294,6 +308,8 @@ class TestDisaggregationMooncakeMHADecodeLargerTP(PDDisaggregationServerBase):
"4",
"--base-gpu-id",
"4",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
decode_args += cls.transfer_backend + cls.rdma_devices
cls.process_decode = popen_launch_pd_server(
@@ -354,6 +370,8 @@ class TestDisaggregationStagingPrefillLargerTP(PDDisaggregationServerBase):
cls.bootstrap_port,
"--tp",
"4",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
prefill_args += cls.transfer_backend + cls.rdma_devices
env = {**os.environ, **STAGING_ENV}
@@ -377,6 +395,8 @@ class TestDisaggregationStagingPrefillLargerTP(PDDisaggregationServerBase):
"2",
"--base-gpu-id",
"4",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
decode_args += cls.transfer_backend + cls.rdma_devices
env = {**os.environ, **STAGING_ENV}
@@ -431,6 +451,8 @@ class TestDisaggregationStagingDecodeLargerTP(PDDisaggregationServerBase):
cls.bootstrap_port,
"--tp",
"2",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
prefill_args += cls.transfer_backend + cls.rdma_devices
env = {**os.environ, **STAGING_ENV}
@@ -454,6 +476,8 @@ class TestDisaggregationStagingDecodeLargerTP(PDDisaggregationServerBase):
"4",
"--base-gpu-id",
"4",
"--enable-metrics",
"--enable-request-time-stats-logging",
]
decode_args += cls.transfer_backend + cls.rdma_devices
env = {**os.environ, **STAGING_ENV}
+11 -3
View File
@@ -1,5 +1,6 @@
import io
import json
import re
import tempfile
import unittest
import uuid
@@ -11,6 +12,8 @@ from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=6, suite="stage-a-test-cpu")
_LOG_PREFIX_RE = re.compile(r"^\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\] ")
class TestLogUtils(unittest.TestCase):
def test_stdout(self):
@@ -23,7 +26,7 @@ class TestLogUtils(unittest.TestCase):
)
self.assertEqual(len(loggers), 1)
log_json(loggers[0], "test.event", {"key": "value"})
data = json.loads(buf.getvalue().strip())
data = _parse_log_json(buf.getvalue().strip())
self.assertIn("timestamp", data)
self.assertEqual(data["event"], "test.event")
self.assertEqual(data["key"], "value")
@@ -52,13 +55,18 @@ class TestLogUtils(unittest.TestCase):
self.assertEqual(len(loggers), 2)
log_json(loggers, "multi.event", {"x": 1})
_flush_all(loggers)
stdout_data = json.loads(buf.getvalue().strip())
stdout_data = _parse_log_json(buf.getvalue().strip())
file_data = _read_log_file(temp_dir)
self.assertEqual(stdout_data["event"], "multi.event")
self.assertEqual(file_data["event"], "multi.event")
self.assertEqual(stdout_data["x"], file_data["x"])
def _parse_log_json(line: str) -> dict:
"""Strip the ``[YYYY-MM-DD HH:MM:SS] `` prefix added by the formatter."""
return json.loads(_LOG_PREFIX_RE.sub("", line))
def _flush_all(loggers: list) -> None:
for logger in loggers:
for handler in logger.handlers:
@@ -68,7 +76,7 @@ def _flush_all(loggers: list) -> None:
def _read_log_file(temp_dir: str) -> dict:
log_files = list(Path(temp_dir).glob("*.log"))
assert len(log_files) == 1
return json.loads(log_files[0].read_text().strip())
return _parse_log_json(log_files[0].read_text().strip())
if __name__ == "__main__":