Tiny support customizing prometheus buckets for prefill delayer (#16831)
This commit is contained in:
@@ -97,7 +97,7 @@ class SchedulerMetricsMixin:
|
|||||||
self.metrics_collector = SchedulerMetricsCollector(
|
self.metrics_collector = SchedulerMetricsCollector(
|
||||||
labels=labels,
|
labels=labels,
|
||||||
enable_lora=self.enable_lora,
|
enable_lora=self.enable_lora,
|
||||||
prefill_delayer_max_delay_passes=self.server_args.prefill_delayer_max_delay_passes,
|
server_args=self.server_args,
|
||||||
)
|
)
|
||||||
|
|
||||||
if ENABLE_METRICS_DEVICE_TIMER:
|
if ENABLE_METRICS_DEVICE_TIMER:
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ class SchedulerMetricsCollector:
|
|||||||
self,
|
self,
|
||||||
labels: Dict[str, str],
|
labels: Dict[str, str],
|
||||||
enable_lora: bool = False,
|
enable_lora: bool = False,
|
||||||
prefill_delayer_max_delay_passes: int = 30,
|
server_args: Optional["ServerArgs"] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
# We need to import prometheus_client after setting the env variable `PROMETHEUS_MULTIPROC_DIR`
|
# We need to import prometheus_client after setting the env variable `PROMETHEUS_MULTIPROC_DIR`
|
||||||
from prometheus_client import Counter, Gauge, Histogram, Summary
|
from prometheus_client import Counter, Gauge, Histogram, Summary
|
||||||
@@ -762,19 +762,36 @@ class SchedulerMetricsCollector:
|
|||||||
labelnames=list(labels.keys()) + ["category", "num_prefill_ranks"],
|
labelnames=list(labels.keys()) + ["category", "num_prefill_ranks"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
max_delay = server_args.prefill_delayer_max_delay_passes
|
||||||
self.prefill_delayer_wait_forward_passes = Histogram(
|
self.prefill_delayer_wait_forward_passes = Histogram(
|
||||||
name="sglang:prefill_delayer_wait_forward_passes",
|
name="sglang:prefill_delayer_wait_forward_passes",
|
||||||
documentation="Histogram of forward passes waited by prefill delayer.",
|
documentation="Histogram of forward passes waited by prefill delayer.",
|
||||||
labelnames=labels.keys(),
|
labelnames=labels.keys(),
|
||||||
# Need bucket "<=0" for zero-delay cases
|
buckets=sorted(
|
||||||
buckets=[0, 5, 20, prefill_delayer_max_delay_passes - 1],
|
set(
|
||||||
|
x
|
||||||
|
for x in (
|
||||||
|
server_args.prefill_delayer_forward_passes_buckets
|
||||||
|
or [5, 20, 50, 100, 200]
|
||||||
|
)
|
||||||
|
if x < max_delay
|
||||||
|
)
|
||||||
|
# Need bucket "<=0" for zero-delay cases, and "max_delay-1" to distinguish "max_delay" timeout passes
|
||||||
|
| {0, max_delay - 1}
|
||||||
|
),
|
||||||
)
|
)
|
||||||
self.prefill_delayer_wait_seconds = Histogram(
|
self.prefill_delayer_wait_seconds = Histogram(
|
||||||
name="sglang:prefill_delayer_wait_seconds",
|
name="sglang:prefill_delayer_wait_seconds",
|
||||||
documentation="Histogram of wait time in seconds by prefill delayer.",
|
documentation="Histogram of wait time in seconds by prefill delayer.",
|
||||||
labelnames=labels.keys(),
|
labelnames=labels.keys(),
|
||||||
|
buckets=sorted(
|
||||||
|
set(
|
||||||
|
server_args.prefill_delayer_wait_seconds_buckets
|
||||||
|
or [1, 2, 5, 10, 20, 50, 100, 200, 500]
|
||||||
|
)
|
||||||
# Need bucket "<=0" for zero-delay cases
|
# Need bucket "<=0" for zero-delay cases
|
||||||
buckets=[0, 5, 20, 100, 500],
|
| {0}
|
||||||
|
),
|
||||||
)
|
)
|
||||||
self.prefill_delayer_outcomes_total = Counter(
|
self.prefill_delayer_outcomes_total = Counter(
|
||||||
name="sglang:prefill_delayer_outcomes_total",
|
name="sglang:prefill_delayer_outcomes_total",
|
||||||
|
|||||||
@@ -314,6 +314,8 @@ class ServerArgs:
|
|||||||
enable_prefill_delayer: bool = False
|
enable_prefill_delayer: bool = False
|
||||||
prefill_delayer_max_delay_passes: int = 30
|
prefill_delayer_max_delay_passes: int = 30
|
||||||
prefill_delayer_token_usage_low_watermark: Optional[float] = None
|
prefill_delayer_token_usage_low_watermark: Optional[float] = None
|
||||||
|
prefill_delayer_forward_passes_buckets: Optional[List[float]] = None
|
||||||
|
prefill_delayer_wait_seconds_buckets: Optional[List[float]] = None
|
||||||
|
|
||||||
# Runtime options
|
# Runtime options
|
||||||
device: Optional[str] = None
|
device: Optional[str] = None
|
||||||
@@ -2915,6 +2917,20 @@ class ServerArgs:
|
|||||||
default=None,
|
default=None,
|
||||||
help="Token usage low watermark for prefill delayer.",
|
help="Token usage low watermark for prefill delayer.",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--prefill-delayer-forward-passes-buckets",
|
||||||
|
type=float,
|
||||||
|
nargs="+",
|
||||||
|
default=None,
|
||||||
|
help="Custom buckets for prefill delayer forward passes histogram. 0 and max_delay_passes-1 will be auto-added.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--prefill-delayer-wait-seconds-buckets",
|
||||||
|
type=float,
|
||||||
|
nargs="+",
|
||||||
|
default=None,
|
||||||
|
help="Custom buckets for prefill delayer wait seconds histogram. 0 will be auto-added.",
|
||||||
|
)
|
||||||
|
|
||||||
# Runtime options
|
# Runtime options
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|||||||
Reference in New Issue
Block a user