@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 72ff142c37
Fork 0

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 5, 06:00 UTC

[Core][Metrics] Remove `vllm:prompt_tokens_recomputed` metric (#38709)

Signed-off-by: Mark McLoughlin <markmc@redhat.com>

Mark McLoughlin committed Apr 12, 2026 at 10:22 UTC 72ff142c37564790a11a186e64bbcaa1d4441142
3 files changed +6 -27
tests/v1/metrics/test_stats.py
+3 -5
@@ -190,8 +190,7 @@ def test_prompt_token_stats_full_local_cache_recompute():
190 )
191
192 assert stats.computed == 1
193 - assert stats.local_cache_hit == 1000
194 - assert stats.recomputed_tokens == 1
193 + assert stats.local_cache_hit == 999
194
195
196 def test_prompt_token_stats_full_external_transfer_recompute():
@@ -201,11 +200,10 @@ def test_prompt_token_stats_full_external_transfer_recompute():
200 # Case 6: Full external transfer (999 cached after reduction, 1 recomputed)
201 stats.update_from_output(
202 num_cached_tokens=999,
204 - num_external_computed_tokens=1000,
203 + num_external_computed_tokens=999,
204 prompt_len=1000,
205 )
206
207 assert stats.computed == 1
208 assert stats.local_cache_hit == 0
210 - assert stats.external_kv_transfer == 1000
211 - assert stats.recomputed_tokens == 1
209 + assert stats.external_kv_transfer == 999
vllm/v1/metrics/loggers.py
-11
@@ -622,16 +622,6 @@ class PrometheusStatLogger(AggregateStatLoggerBase):
622 counter_prompt_tokens_cached, per_engine_labelvalues
623 )
624
625 - # Recomputed tokens (last token recomputed when entire prompt is cached)
626 - counter_prompt_tokens_recomputed = self._counter_cls(
627 - name="vllm:prompt_tokens_recomputed",
628 - documentation="Number of cached tokens recomputed for forward pass.",
629 - labelnames=labelnames,
630 - )
631 - self.counter_prompt_tokens_recomputed = create_metric_per_engine(
632 - counter_prompt_tokens_recomputed, per_engine_labelvalues
633 - )
634 -
625 counter_generation_tokens = self._counter_cls(
626 name="vllm:generation_tokens",
627 documentation="Number of generation tokens processed.",
@@ -1122,7 +1112,6 @@ class PrometheusStatLogger(AggregateStatLoggerBase):
1112 pts.get_by_source(source)
1113 )
1114 self.counter_prompt_tokens_cached[engine_idx].inc(pts.cached_tokens)
1125 - self.counter_prompt_tokens_recomputed[engine_idx].inc(pts.recomputed_tokens)
1115 self.counter_generation_tokens[engine_idx].inc(
1116 iteration_stats.num_generation_tokens
1117 )
vllm/v1/metrics/stats.py
+3 -11
@@ -246,12 +246,11 @@ class PromptTokenStats:
246 local_cache_hit: Tokens from local prefix cache.
247 external_kv_transfer: Tokens from external KV transfer.
248 cached_tokens: Tokens skipped during prefill (from scheduler).
249 - recomputed_tokens: Cached tokens that were recomputed (see below).
249 total: Total prompt tokens.
250
251 Invariants:
253 - computed + local_cache_hit + external_kv_transfer - recomputed_tokens = total
254 - local_cache_hit + external_kv_transfer - recomputed_tokens = cached_tokens
252 + computed + local_cache_hit + external_kv_transfer = total
253 + local_cache_hit + external_kv_transfer = cached_tokens
254 """
255
256 ALL_SOURCES: tuple[str, ...] = (
@@ -264,7 +263,6 @@ class PromptTokenStats:
263 local_cache_hit: int = 0
264 external_kv_transfer: int = 0
265 cached_tokens: int = 0
267 - recomputed_tokens: int = 0
266 total: int = 0
267
268 def update_from_output(
@@ -274,11 +272,6 @@ class PromptTokenStats:
272 prompt_len: int,
273 ) -> None:
274 """Update stats from a prefill output."""
277 - # When all tokens are cached, the scheduler reduces num_cached_tokens
278 - # by 1 to force the model to recompute the last token, since the model
279 - # needs at least one input token to run a forward pass.
280 - recomputed = 1 if (num_cached_tokens + 1 == prompt_len) else 0
281 -
275 self.computed += prompt_len - num_cached_tokens
276 self.external_kv_transfer += num_external_computed_tokens
277 # FIXME(yifan): local_cache_hit can go negative after preemption.
@@ -290,10 +283,9 @@ class PromptTokenStats:
283 # as a separate metric rather than reusing num_external_computed_tokens
284 # for metric directly.
285 self.local_cache_hit += max(
293 - 0, (num_cached_tokens + recomputed - num_external_computed_tokens)
286 + 0, (num_cached_tokens - num_external_computed_tokens)
287 )
288 self.cached_tokens += num_cached_tokens
296 - self.recomputed_tokens += recomputed
289 self.total += prompt_len
290
291 def get_by_source(self, source: str) -> int: