Add cuda_graph_forward_passes_total and num_retracted_reqs_total (#15189)
This commit is contained in:
@@ -2012,6 +2012,8 @@ class Scheduler(
|
|||||||
self.server_args, self.decode_mem_cache_buf_multiplier
|
self.server_args, self.decode_mem_cache_buf_multiplier
|
||||||
)
|
)
|
||||||
self.num_retracted_reqs = len(retracted_reqs)
|
self.num_retracted_reqs = len(retracted_reqs)
|
||||||
|
if self.enable_metrics and (x := len(retracted_reqs)) > 0:
|
||||||
|
self.metrics_collector.increment_num_retracted_reqs(x)
|
||||||
self.new_token_ratio = new_token_ratio
|
self.new_token_ratio = new_token_ratio
|
||||||
for req in reqs_to_abort:
|
for req in reqs_to_abort:
|
||||||
abort_reason: FINISH_ABORT = req.to_finish
|
abort_reason: FINISH_ABORT = req.to_finish
|
||||||
|
|||||||
@@ -337,6 +337,8 @@ class SchedulerOutputProcessorMixin:
|
|||||||
self.num_generated_tokens += len(batch.reqs)
|
self.num_generated_tokens += len(batch.reqs)
|
||||||
if not batch.spec_algorithm.is_none():
|
if not batch.spec_algorithm.is_none():
|
||||||
self.update_spec_metrics(batch.batch_size(), result.num_accepted_tokens)
|
self.update_spec_metrics(batch.batch_size(), result.num_accepted_tokens)
|
||||||
|
if self.enable_metrics:
|
||||||
|
self.metrics_collector.increment_cuda_graph_pass(value=can_run_cuda_graph)
|
||||||
|
|
||||||
self.token_to_kv_pool_allocator.free_group_begin()
|
self.token_to_kv_pool_allocator.free_group_begin()
|
||||||
|
|
||||||
|
|||||||
@@ -325,11 +325,18 @@ class SchedulerMetricsCollector:
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Retract
|
# Retract
|
||||||
|
# TODO maybe remove this old gauge in favor of the new counter
|
||||||
self.num_retracted_reqs = Gauge(
|
self.num_retracted_reqs = Gauge(
|
||||||
name="sglang:num_retracted_reqs",
|
name="sglang:num_retracted_reqs",
|
||||||
documentation="The number of retracted requests.",
|
documentation="The number of retracted requests.",
|
||||||
labelnames=labels.keys(),
|
labelnames=labels.keys(),
|
||||||
)
|
)
|
||||||
|
self.num_retracted_reqs_total = Counter(
|
||||||
|
# The name is `requests` instead of `reqs` to avoid dup name error
|
||||||
|
name="sglang:num_retracted_requests_total",
|
||||||
|
documentation="Total number of retracted requests.",
|
||||||
|
labelnames=labels.keys(),
|
||||||
|
)
|
||||||
self.num_paused_reqs = Gauge(
|
self.num_paused_reqs = Gauge(
|
||||||
name="sglang:num_paused_reqs",
|
name="sglang:num_paused_reqs",
|
||||||
documentation="The number of paused requests by async weight sync.",
|
documentation="The number of paused requests by async weight sync.",
|
||||||
@@ -605,12 +612,18 @@ class SchedulerMetricsCollector:
|
|||||||
labelnames=list(labels.keys()) + ["stage"],
|
labelnames=list(labels.keys()) + ["stage"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# TODO maybe remove this old gauge in favor of the new counter
|
||||||
self.is_cuda_graph = Gauge(
|
self.is_cuda_graph = Gauge(
|
||||||
name="sglang:is_cuda_graph",
|
name="sglang:is_cuda_graph",
|
||||||
documentation="Whether the batch is using CUDA graph.",
|
documentation="Whether the batch is using CUDA graph.",
|
||||||
labelnames=labels.keys(),
|
labelnames=labels.keys(),
|
||||||
multiprocess_mode="mostrecent",
|
multiprocess_mode="mostrecent",
|
||||||
)
|
)
|
||||||
|
self.cuda_graph_passes_total = Counter(
|
||||||
|
name="sglang:cuda_graph_passes_total",
|
||||||
|
documentation="Total number of forward passes categorized by CUDA graph.",
|
||||||
|
labelnames=list(labels.keys()) + ["mode"],
|
||||||
|
)
|
||||||
|
|
||||||
self.new_token_ratio = Gauge(
|
self.new_token_ratio = Gauge(
|
||||||
name="sglang:new_token_ratio",
|
name="sglang:new_token_ratio",
|
||||||
@@ -639,6 +652,14 @@ class SchedulerMetricsCollector:
|
|||||||
def observe_queue_time(self, latency: float) -> None:
|
def observe_queue_time(self, latency: float) -> None:
|
||||||
self._log_histogram(self.queue_time, latency)
|
self._log_histogram(self.queue_time, latency)
|
||||||
|
|
||||||
|
def increment_num_retracted_reqs(self, num: int) -> None:
|
||||||
|
self.num_retracted_reqs_total.labels(**self.labels).inc(num)
|
||||||
|
|
||||||
|
def increment_cuda_graph_pass(self, value: bool) -> None:
|
||||||
|
# leave room for piecewise cuda graph, etc
|
||||||
|
mode = "decode_cuda_graph" if value else "decode_none"
|
||||||
|
self.cuda_graph_passes_total.labels(**self.labels, mode=mode).inc(1)
|
||||||
|
|
||||||
def log_stats(self, stats: SchedulerStats) -> None:
|
def log_stats(self, stats: SchedulerStats) -> None:
|
||||||
self._log_gauge(self.num_running_reqs, stats.num_running_reqs)
|
self._log_gauge(self.num_running_reqs, stats.num_running_reqs)
|
||||||
self._log_gauge(self.num_used_tokens, stats.num_used_tokens)
|
self._log_gauge(self.num_used_tokens, stats.num_used_tokens)
|
||||||
|
|||||||
Reference in New Issue
Block a user