A high-throughput and memory-efficient inference and serving engine for LLMs
Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git
Synced Nov 14, 05:30 UTC
[Metrics] Hide deprecated metrics with gpu_ prefix (#24245)
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Mark McLoughlin committed
Sep 16, 2025 at 03:15 UTC
2942970d4462c1d938db4f142008e106702c0dc5
2 files changed
+63
-46
tests/entrypoints/openai/test_metrics.py
+15
-6
@@ -232,6 +232,9 @@ EXPECTED_METRICS_V1 = [
232
"vllm:gpu_cache_usage_perc",
233
"vllm:gpu_prefix_cache_queries",
234
"vllm:gpu_prefix_cache_hits",
235
+ "vllm:kv_cache_usage_perc",
236
+ "vllm:prefix_cache_queries",
237
+ "vllm:prefix_cache_hits",
238
"vllm:num_preemptions_total",
239
"vllm:prompt_tokens_total",
240
"vllm:generation_tokens_total",
@@ -277,6 +280,9 @@ EXPECTED_METRICS_V1 = [
280
]
281
282
HIDDEN_DEPRECATED_METRICS: list[str] = [
283
+ "vllm:gpu_cache_usage_perc",
284
+ "vllm:gpu_prefix_cache_queries",
285
+ "vllm:gpu_prefix_cache_hits",
286
"vllm:time_per_output_token_seconds_sum",
287
"vllm:time_per_output_token_seconds_bucket",
288
"vllm:time_per_output_token_seconds_count",
@@ -307,7 +313,7 @@ async def test_abort_metrics_reset(server: RemoteOpenAIServer,
313
client: openai.AsyncClient, use_v1: bool):
314
315
running_requests, waiting_requests, kv_cache_usage = (
310
- _get_running_metrics_from_api(server))
316
+ _get_running_metrics_from_api(server, use_v1))
317
318
# Expect no running requests or kvcache usage
319
assert running_requests == 0
@@ -330,7 +336,7 @@ async def test_abort_metrics_reset(server: RemoteOpenAIServer,
336
337
# Check that we have running requests
338
running_requests, waiting_requests, kv_cache_usage = (
333
- _get_running_metrics_from_api(server))
339
+ _get_running_metrics_from_api(server, use_v1))
340
341
# Expect running requests and kvcache usage
342
assert running_requests > 0
@@ -349,7 +355,7 @@ async def test_abort_metrics_reset(server: RemoteOpenAIServer,
355
356
# Verify running and waiting requests counts and KV cache usage are zero
357
running_requests_after, waiting_requests_after, kv_cache_usage_after = (
352
- _get_running_metrics_from_api(server))
358
+ _get_running_metrics_from_api(server, use_v1))
359
360
assert running_requests_after == 0,\
361
(f"Expected 0 running requests after abort, got "
@@ -362,7 +368,7 @@ async def test_abort_metrics_reset(server: RemoteOpenAIServer,
368
f"{kv_cache_usage_after}")
369
370
365
-def _get_running_metrics_from_api(server: RemoteOpenAIServer):
371
+def _get_running_metrics_from_api(server: RemoteOpenAIServer, use_v1: bool):
372
"""Return (running_count, waiting_count, kv_cache_usage)"""
373
374
response = requests.get(server.url_for("metrics"))
@@ -371,6 +377,9 @@ def _get_running_metrics_from_api(server: RemoteOpenAIServer):
377
# Verify running and waiting requests counts and KV cache usage are zero
378
running_requests, waiting_requests, kv_cache_usage = None, None, None
379
380
+ kv_cache_usage_metric = ("vllm:kv_cache_usage_perc"
381
+ if use_v1 else "vllm:gpu_cache_usage_perc")
382
+
383
for family in text_string_to_metric_families(response.text):
384
if family.name == "vllm:num_requests_running":
385
for sample in family.samples:
@@ -382,9 +391,9 @@ def _get_running_metrics_from_api(server: RemoteOpenAIServer):
391
if sample.name == "vllm:num_requests_waiting":
392
waiting_requests = sample.value
393
break
385
- elif family.name == "vllm:gpu_cache_usage_perc":
394
+ elif family.name == kv_cache_usage_metric:
395
for sample in family.samples:
387
- if sample.name == "vllm:gpu_cache_usage_perc":
396
+ if sample.name == kv_cache_usage_metric:
397
kv_cache_usage = sample.value
398
break
399
vllm/v1/metrics/loggers.py
+48
-40
@@ -202,40 +202,46 @@ class PrometheusStatLogger(StatLoggerBase):
202
#
203
# GPU cache
204
#
205
- # Deprecated in 0.9 - Renamed as vllm:kv_cache_usage_perc
206
- # TODO: in 0.10, only enable if show_hidden_metrics=True
207
- gauge_gpu_cache_usage = self._gauge_cls(
208
- name="vllm:gpu_cache_usage_perc",
209
- documentation=(
210
- "GPU KV-cache usage. 1 means 100 percent usage."
211
- "DEPRECATED: Use vllm:kv_cache_usage_perc instead."),
212
- multiprocess_mode="mostrecent",
213
- labelnames=labelnames)
214
- self.gauge_gpu_cache_usage = make_per_engine(gauge_gpu_cache_usage,
215
- engine_indexes,
216
- model_name)
217
-
218
- # Deprecated in 0.9 - Renamed as vllm:prefix_cache_queries
219
- # TODO: in 0.10, only enable if show_hidden_metrics=True
220
- counter_gpu_prefix_cache_queries = self._counter_cls(
221
- name="vllm:gpu_prefix_cache_queries",
222
- documentation=(
223
- "GPU prefix cache queries, in terms of number of queried"
224
- "tokens. DEPRECATED: Use vllm:prefix_cache_queries instead."),
225
- labelnames=labelnames)
226
- self.counter_gpu_prefix_cache_queries = make_per_engine(
227
- counter_gpu_prefix_cache_queries, engine_indexes, model_name)
228
-
229
- # Deprecated in 0.9 - Renamed as vllm:prefix_cache_hits
230
- # TODO: in 0.10, only enable if show_hidden_metrics=True
231
- counter_gpu_prefix_cache_hits = self._counter_cls(
232
- name="vllm:gpu_prefix_cache_hits",
233
- documentation=(
234
- "GPU prefix cache hits, in terms of number of cached "
235
- "tokens. DEPRECATED: Use vllm:prefix_cache_hits instead."),
236
- labelnames=labelnames)
237
- self.counter_gpu_prefix_cache_hits = make_per_engine(
238
- counter_gpu_prefix_cache_hits, engine_indexes, model_name)
205
+ # Deprecated in 0.9.2 - Renamed as vllm:kv_cache_usage_perc
206
+ # With 0.11.x you can enable with --show-hidden-metrics-for-version=0.10
207
+ # TODO: remove in 0.12.0
208
+ if self.show_hidden_metrics:
209
+ gauge_gpu_cache_usage = self._gauge_cls(
210
+ name="vllm:gpu_cache_usage_perc",
211
+ documentation=(
212
+ "GPU KV-cache usage. 1 means 100 percent usage."
213
+ "DEPRECATED: Use vllm:kv_cache_usage_perc instead."),
214
+ multiprocess_mode="mostrecent",
215
+ labelnames=labelnames)
216
+ self.gauge_gpu_cache_usage = make_per_engine(
217
+ gauge_gpu_cache_usage, engine_indexes, model_name)
218
+
219
+ # Deprecated in 0.9.2 - Renamed as vllm:prefix_cache_queries
220
+ # With 0.11.x you can enable with --show-hidden-metrics-for-version=0.10
221
+ # TODO: remove in 0.12.0
222
+ if self.show_hidden_metrics:
223
+ counter_gpu_prefix_cache_queries = self._counter_cls(
224
+ name="vllm:gpu_prefix_cache_queries",
225
+ documentation=(
226
+ "GPU prefix cache queries, in terms of number of queried"
227
+ "tokens. DEPRECATED: Use vllm:prefix_cache_queries instead."
228
+ ),
229
+ labelnames=labelnames)
230
+ self.counter_gpu_prefix_cache_queries = make_per_engine(
231
+ counter_gpu_prefix_cache_queries, engine_indexes, model_name)
232
+
233
+ # Deprecated in 0.9.2 - Renamed as vllm:prefix_cache_hits
234
+ # With 0.11.x you can enable with --show-hidden-metrics-for-version=0.10
235
+ # TODO: remove in 0.12.0
236
+ if self.show_hidden_metrics:
237
+ counter_gpu_prefix_cache_hits = self._counter_cls(
238
+ name="vllm:gpu_prefix_cache_hits",
239
+ documentation=(
240
+ "GPU prefix cache hits, in terms of number of cached "
241
+ "tokens. DEPRECATED: Use vllm:prefix_cache_hits instead."),
242
+ labelnames=labelnames)
243
+ self.counter_gpu_prefix_cache_hits = make_per_engine(
244
+ counter_gpu_prefix_cache_hits, engine_indexes, model_name)
245
246
gauge_kv_cache_usage = self._gauge_cls(
247
name="vllm:kv_cache_usage_perc",
@@ -509,15 +515,17 @@ class PrometheusStatLogger(StatLoggerBase):
515
self.gauge_scheduler_waiting[engine_idx].set(
516
scheduler_stats.num_waiting_reqs)
517
512
- self.gauge_gpu_cache_usage[engine_idx].set(
513
- scheduler_stats.kv_cache_usage)
518
+ if self.show_hidden_metrics:
519
+ self.gauge_gpu_cache_usage[engine_idx].set(
520
+ scheduler_stats.kv_cache_usage)
521
self.gauge_kv_cache_usage[engine_idx].set(
522
scheduler_stats.kv_cache_usage)
523
517
- self.counter_gpu_prefix_cache_queries[engine_idx].inc(
518
- scheduler_stats.prefix_cache_stats.queries)
519
- self.counter_gpu_prefix_cache_hits[engine_idx].inc(
520
- scheduler_stats.prefix_cache_stats.hits)
524
+ if self.show_hidden_metrics:
525
+ self.counter_gpu_prefix_cache_queries[engine_idx].inc(
526
+ scheduler_stats.prefix_cache_stats.queries)
527
+ self.counter_gpu_prefix_cache_hits[engine_idx].inc(
528
+ scheduler_stats.prefix_cache_stats.hits)
529
530
self.counter_prefix_cache_queries[engine_idx].inc(
531
scheduler_stats.prefix_cache_stats.queries)