[PD metrics] Add latency Histogram metrics of each stage for generate requests (#8710)
This commit is contained in:
@@ -17,7 +17,7 @@ from dataclasses import dataclass, field
|
||||
from enum import Enum
|
||||
from typing import Dict, List, Optional, Union
|
||||
|
||||
from sglang.srt.metrics.utils import generate_buckets
|
||||
from sglang.srt.metrics.utils import exponential_buckets, generate_buckets
|
||||
from sglang.srt.server_args import ServerArgs
|
||||
from sglang.srt.utils import get_bool_env_var
|
||||
|
||||
@@ -513,6 +513,14 @@ class SchedulerMetricsCollector:
|
||||
buckets=tree_traversal_time_buckets,
|
||||
)
|
||||
|
||||
self.request_latency_seconds = Histogram(
|
||||
name="sglang:request_latency_seconds",
|
||||
documentation="The latency of each stage of requests.",
|
||||
# captures latency in range [1ms - ~1191s]
|
||||
buckets=exponential_buckets(start=0.001, width=1.62, length=30),
|
||||
labelnames=list(labels.keys()) + ["stage"],
|
||||
)
|
||||
|
||||
def _log_gauge(self, gauge, data: Union[int, float]) -> None:
|
||||
# Convenience function for logging to gauge.
|
||||
gauge.labels(**self.labels).set(data)
|
||||
@@ -526,6 +534,10 @@ class SchedulerMetricsCollector:
|
||||
def increment_transfer_failed_reqs(self) -> None:
|
||||
self.num_transfer_failed_reqs.labels(**self.labels).inc(1)
|
||||
|
||||
def observe_request_latency_seconds(self, stage: str, latency: float) -> None:
|
||||
labels_with_stage = {**self.labels, "stage": stage}
|
||||
self.request_latency_seconds.labels(**labels_with_stage).observe(latency)
|
||||
|
||||
def log_stats(self, stats: SchedulerStats) -> None:
|
||||
self._log_gauge(self.num_running_reqs, stats.num_running_reqs)
|
||||
self._log_gauge(self.num_used_tokens, stats.num_used_tokens)
|
||||
|
||||
@@ -20,6 +20,8 @@ import time
|
||||
from functools import wraps
|
||||
from typing import Any, Callable, List, Optional
|
||||
|
||||
from sglang.srt.metrics.utils import exponential_buckets
|
||||
|
||||
enable_metrics = False
|
||||
|
||||
|
||||
@@ -42,13 +44,6 @@ def enable_func_timer():
|
||||
FUNC_LATENCY = None
|
||||
|
||||
|
||||
def exponential_buckets(start: float, width: float, length: int) -> List[float]:
|
||||
buckets = []
|
||||
for i in range(length):
|
||||
buckets.append(start * (width**i))
|
||||
return buckets
|
||||
|
||||
|
||||
def time_func_latency(
|
||||
func: Callable = None, name: Optional[str] = None
|
||||
) -> Callable[..., Any]:
|
||||
|
||||
@@ -46,3 +46,10 @@ def generate_buckets(
|
||||
return sorted(set(default_buckets))
|
||||
assert rule == "customer"
|
||||
return sorted(set([float(x) for x in buckets_rule[1:]]))
|
||||
|
||||
|
||||
def exponential_buckets(start: float, width: float, length: int) -> List[float]:
|
||||
buckets = []
|
||||
for i in range(length):
|
||||
buckets.append(start * (width**i))
|
||||
return buckets
|
||||
|
||||
Reference in New Issue
Block a user