[metric] Optional extra metric labels (#18049)
This commit is contained in:
@@ -109,6 +109,8 @@ class SchedulerMetricsMixin:
|
|||||||
}
|
}
|
||||||
if dp_rank is not None:
|
if dp_rank is not None:
|
||||||
labels["dp_rank"] = dp_rank
|
labels["dp_rank"] = dp_rank
|
||||||
|
if self.server_args.extra_metric_labels:
|
||||||
|
labels.update(self.server_args.extra_metric_labels)
|
||||||
self.metrics_collector = SchedulerMetricsCollector(
|
self.metrics_collector = SchedulerMetricsCollector(
|
||||||
labels=labels,
|
labels=labels,
|
||||||
enable_lora=self.enable_lora,
|
enable_lora=self.enable_lora,
|
||||||
|
|||||||
@@ -437,6 +437,8 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi
|
|||||||
if self.server_args.tokenizer_metrics_allowed_custom_labels:
|
if self.server_args.tokenizer_metrics_allowed_custom_labels:
|
||||||
for label in self.server_args.tokenizer_metrics_allowed_custom_labels:
|
for label in self.server_args.tokenizer_metrics_allowed_custom_labels:
|
||||||
labels[label] = ""
|
labels[label] = ""
|
||||||
|
if self.server_args.extra_metric_labels:
|
||||||
|
labels.update(self.server_args.extra_metric_labels)
|
||||||
self.metrics_collector = TokenizerMetricsCollector(
|
self.metrics_collector = TokenizerMetricsCollector(
|
||||||
server_args=self.server_args,
|
server_args=self.server_args,
|
||||||
labels=labels,
|
labels=labels,
|
||||||
|
|||||||
@@ -119,9 +119,13 @@ class BasePrefixCache(ABC, PrefixCacheTrait):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def init_metrics_collector(self):
|
def init_metrics_collector(self):
|
||||||
self.metrics_collector = RadixCacheMetricsCollector(
|
from sglang.srt.server_args import get_global_server_args
|
||||||
labels={"cache_type": self.__class__.__name__}
|
|
||||||
)
|
server_args = get_global_server_args()
|
||||||
|
labels = {"cache_type": self.__class__.__name__}
|
||||||
|
if server_args.extra_metric_labels:
|
||||||
|
labels.update(server_args.extra_metric_labels)
|
||||||
|
self.metrics_collector = RadixCacheMetricsCollector(labels=labels)
|
||||||
|
|
||||||
def update_eviction_metrics(self, num_evicted: int, start_time: float):
|
def update_eviction_metrics(self, num_evicted: int, start_time: float):
|
||||||
if self.metrics_collector is not None and num_evicted > 0:
|
if self.metrics_collector is not None and num_evicted > 0:
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import os
|
|||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
from queue import Empty
|
from queue import Empty
|
||||||
from typing import TYPE_CHECKING, List, Optional
|
from typing import TYPE_CHECKING, Dict, List, Optional
|
||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
@@ -88,6 +88,7 @@ class HiRadixCache(RadixCache):
|
|||||||
self.pp_size = params.pp_size
|
self.pp_size = params.pp_size
|
||||||
self.enable_storage = server_args.hicache_storage_backend is not None
|
self.enable_storage = server_args.hicache_storage_backend is not None
|
||||||
self.enable_storage_metrics = self.enable_storage and params.enable_metrics
|
self.enable_storage_metrics = self.enable_storage and params.enable_metrics
|
||||||
|
self.extra_metric_labels = server_args.extra_metric_labels
|
||||||
|
|
||||||
(
|
(
|
||||||
extra_config,
|
extra_config,
|
||||||
@@ -126,6 +127,7 @@ class HiRadixCache(RadixCache):
|
|||||||
hicache_storage_pass_prefix_keys=hicache_storage_pass_prefix_keys,
|
hicache_storage_pass_prefix_keys=hicache_storage_pass_prefix_keys,
|
||||||
enable_storage=self.enable_storage,
|
enable_storage=self.enable_storage,
|
||||||
enable_storage_metrics=self.enable_storage_metrics,
|
enable_storage_metrics=self.enable_storage_metrics,
|
||||||
|
extra_metric_labels=self.extra_metric_labels,
|
||||||
)
|
)
|
||||||
|
|
||||||
# record the nodes with ongoing write through
|
# record the nodes with ongoing write through
|
||||||
@@ -168,6 +170,7 @@ class HiRadixCache(RadixCache):
|
|||||||
hicache_storage_pass_prefix_keys: bool,
|
hicache_storage_pass_prefix_keys: bool,
|
||||||
enable_storage: bool,
|
enable_storage: bool,
|
||||||
enable_storage_metrics: bool,
|
enable_storage_metrics: bool,
|
||||||
|
extra_metric_labels: Optional[Dict[str, str]],
|
||||||
) -> None:
|
) -> None:
|
||||||
prefetch_timeout_per_page = (
|
prefetch_timeout_per_page = (
|
||||||
self.page_size / 1024 * prefetch_timeout_per_ki_token
|
self.page_size / 1024 * prefetch_timeout_per_ki_token
|
||||||
@@ -182,6 +185,9 @@ class HiRadixCache(RadixCache):
|
|||||||
"pp_rank": self.cache_controller.pp_rank,
|
"pp_rank": self.cache_controller.pp_rank,
|
||||||
"pp_size": self.cache_controller.pp_size,
|
"pp_size": self.cache_controller.pp_size,
|
||||||
}
|
}
|
||||||
|
if extra_metric_labels:
|
||||||
|
labels.update(extra_metric_labels)
|
||||||
|
self.storage_metrics_collector = StorageMetricsCollector(labels=labels)
|
||||||
storage_metrics_collector = StorageMetricsCollector(labels=labels)
|
storage_metrics_collector = StorageMetricsCollector(labels=labels)
|
||||||
|
|
||||||
self.enable_storage = enable_storage
|
self.enable_storage = enable_storage
|
||||||
@@ -310,6 +316,7 @@ class HiRadixCache(RadixCache):
|
|||||||
hicache_storage_pass_prefix_keys=hicache_storage_pass_prefix_keys,
|
hicache_storage_pass_prefix_keys=hicache_storage_pass_prefix_keys,
|
||||||
enable_storage=True,
|
enable_storage=True,
|
||||||
enable_storage_metrics=self._enable_metrics_flag,
|
enable_storage_metrics=self._enable_metrics_flag,
|
||||||
|
extra_metric_labels=self.extra_metric_labels,
|
||||||
)
|
)
|
||||||
return True, "Attached HiCache storage backend successfully."
|
return True, "Attached HiCache storage backend successfully."
|
||||||
|
|
||||||
|
|||||||
@@ -380,6 +380,7 @@ class ServerArgs:
|
|||||||
enable_metrics_for_all_schedulers: bool = False
|
enable_metrics_for_all_schedulers: bool = False
|
||||||
tokenizer_metrics_custom_labels_header: str = "x-custom-labels"
|
tokenizer_metrics_custom_labels_header: str = "x-custom-labels"
|
||||||
tokenizer_metrics_allowed_custom_labels: Optional[List[str]] = None
|
tokenizer_metrics_allowed_custom_labels: Optional[List[str]] = None
|
||||||
|
extra_metric_labels: Optional[Dict[str, str]] = None
|
||||||
bucket_time_to_first_token: Optional[List[float]] = None
|
bucket_time_to_first_token: Optional[List[float]] = None
|
||||||
bucket_inter_token_latency: Optional[List[float]] = None
|
bucket_inter_token_latency: Optional[List[float]] = None
|
||||||
bucket_e2e_request_latency: Optional[List[float]] = None
|
bucket_e2e_request_latency: Optional[List[float]] = None
|
||||||
@@ -3369,6 +3370,13 @@ class ServerArgs:
|
|||||||
"'--tokenizer-metrics-custom-labels-header' field in HTTP requests, e.g., {'label1': 'value1', 'label2': "
|
"'--tokenizer-metrics-custom-labels-header' field in HTTP requests, e.g., {'label1': 'value1', 'label2': "
|
||||||
"'value2'} is allowed if '--tokenizer-metrics-allowed-custom-labels label1 label2' is set.",
|
"'value2'} is allowed if '--tokenizer-metrics-allowed-custom-labels label1 label2' is set.",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--extra-metric-labels",
|
||||||
|
type=json.loads,
|
||||||
|
default=ServerArgs.extra_metric_labels,
|
||||||
|
help="The custom labels for metrics. "
|
||||||
|
'e.g. \'{"label1": "value1", "label2": "value2"}\'',
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--bucket-time-to-first-token",
|
"--bucket-time-to-first-token",
|
||||||
type=float,
|
type=float,
|
||||||
|
|||||||
Reference in New Issue
Block a user