Files
sglang/python/sglang/srt/debug_utils/log_parser.py
2025-11-14 17:34:22 +08:00

47 lines
1.5 KiB
Python

_PATTERN_DECODE = (
r"(\(\w+ pid=(?P<pid>\d+)(?:,\s*ip=(?P<ip>[\d\.]+))?\))?\s*"
r"\[(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})"
r"(?:\s+DP(?P<dp_rank>\d+))?"
r"(?:\s+TP(?P<tp_rank>\d+))?"
r"(?:\s+EP(?P<ep_rank>\d+))?"
r"(?:\s+PP(?P<pp_rank>\d+))?"
r"\]\s+"
r"Decode batch( \[\d+\])?,\s+"
r"#running-req:\s*(?P<num_running_req>\d+),\s+"
r"#token:\s*(?P<num_token>\d+),\s+"
r"token usage:\s*(?P<token_usage>[0-9.]+),\s+"
r".*?"
r"gen throughput \(token/s\):\s*(?P<gen_throughput>[0-9.]+),\s+"
r"#queue-req:\s*(?P<queue_req>\d+),"
)
def parse(lines):
import polars as pl
df = pl.DataFrame(dict(line=lines.splitlines()))
df = df.with_columns(info=pl.col("line").str.extract_groups(_PATTERN_DECODE))
df = df.unnest("info")
df = df.filter(pl.col("gen_throughput").is_not_null())
df = df.with_columns(
pl.col("time").str.strptime(pl.Datetime, "%Y-%m-%d %H:%M:%S"),
*[
pl.col(col).cast(dtype)
for col, dtype in [
("pid", pl.Int64),
("dp_rank", pl.Int64),
("tp_rank", pl.Int64),
("ep_rank", pl.Int64),
("pp_rank", pl.Int64),
("num_running_req", pl.Int64),
("num_token", pl.Int64),
("token_usage", pl.Float64),
("gen_throughput", pl.Float64),
("queue_req", pl.Int64),
]
if col in df.columns
],
)
return df