LMCache 0.5.4 on T4 & L4 · 0.5.5rc5 on T4

Correctness checks
for cached inference

Prefix KV reuse is standard in production inference. On the stack we tested, reusing a cached prefix changed the model’s answer — while every counter reported a clean, complete hit and no fallback.

Read the verifier docs Evidence

No performance claims.

python -m diagnostics.verify_kv_reuse \
  --model Qwen/Qwen3-0.6B \
  --model-revision c1899de289a04d12100db370d81485cdf75e47ca \
  --kv-connector LMCacheConnectorV1 \
  --lmcache-config diagnostics/fixtures/lmcache-local-cpu.yaml \
  --dtype float16 --gpu-memory-utilization 0.45 \
  --max-model-len 2048 --block-size 16 --max-tokens 16 --seed 0 \
  --suite acceptance --compare-native \
  --fixture diagnostics/fixtures/efim-018-l4.json \
  --report tmp/efim-019-l4/report.json

Setup and repository access required →

Recorded readout T4 / sm75 · 16-token window
token 0 ──────────▶ 15 req 0 miss ████████████████ 0 req 1 hit ██████████▓▓▓▓▓▓ 1,280 @10 req 2 hit ██████████████▓▓ 1,280 @14 req 3 hit ████▓▓▓▓▓▓▓▓▓▓▓▓ 1,280 @ 4
Four identical requests. One correct answer, three different wrong ones.
A fresh process reproduces all four byte for byte.
Upstream report
Reported to LMCache on issue #4463 ↗

Our reproduction, posted for the LMCache maintainers: vLLM 0.28.0 with LMCache 0.5.4 on T4 and L4 (and 0.5.5rc5 on T4), native prefix caching as the byte-exact control, and a runnable script. Not yet confirmed as the same bug the issue describes.

github.com/LMCache/LMCache/issues/4463
The failure mode

Nothing reports a problem

Not a crash, not a timeout, not a degraded response. Every health signal a serving stack exposes says the request succeeded.

Clean telemetry

1,280 cached tokens, exactly as planned

No fallback reason, normal finish. The counters are indistinguishable from a correct run.

Survives smoke tests

The cache miss is perfect

A miss matches cache-disabled recompute exactly. Only the reuse path diverges.

Window-dependent

Eight tokens hid two of three

An 8-token window caught only the divergence at index 4. Widening to 16 exposed those at 10 and 14. A short check misses real mismatches.

Not our code

Zero EFIM in the path

A bare AsyncLLM and the in-tree connector. No gateway, no bridge, no HTTP.

Reproduction

Two reuse paths, one L4

Same 1502-token chat prompt, same model revision, float16, eager execution, greedy decoding, 16-token window.

LMCacheConnectorV1 · kv_load_failure_policy=fail 4 requests

A cold miss, then three reuses that each diverge from the miss and from one another. Every retrieve logs five double-unpin warnings; the cold store logs none.

Verdict
4 answers
Cached sequence
0 → 1280 ×3
Fallbacks
0
Exit code
1

That contrast is what makes the finding actionable. It narrows the fault to LMCache’s path rather than to the GPU, the model, the dtype, or prefix reuse as a concept.

We posted this reproduction, with a runnable script, to the LMCache maintainers on their existing silent-corruption issue.

Read it on GitHub ↗

The verifier

What the verifier checks

It runs a configuration twice in separate processes — once with caching fully disabled, once with reuse enabled — and compares generated token IDs exactly. No normalization, no tolerance, no majority vote.

It currently supports Linux with one NVIDIA GPU, vLLM 0.28.0, and stock LMCache 0.5.4/0.5.5rc5 or native prefix caching. The source is private for now.

Fails loud

Unknown never becomes a pass

A reuse with a zero or missing hit counter is inconclusive. Absent telemetry is never read as zero.

Full evidence

Every token array, kept

Submitted and generated IDs, per-answer cached counts, first differing index, effective engine config.

CI-shaped

Exit code matches the verdict

Versioned JSON, atomic writes. An error is never hidden behind a green summary.

Limits

What we are not claiming

No performance claim
Every report carries claim_eligible=false. We publish no speedup, cost, throughput or latency number.
Bounded scope
One model (Qwen3-0.6B at a pinned revision), one chat-prompt family, up to four requests per sequence, two measured GPUs — Tesla T4 / sm75 and NVIDIA L4 / sm89. Nothing is established about other models, prompt shapes or accelerators.
Native success is narrow
Byte-exact native reuse was observed on one L4 fixture. Not a general guarantee, and it does not validate any other caching path.
One validated fixture
The paired L4 acceptance ran once, on 2026-09-10 at commit 54a0af2: LMCache failed 4 of 4 probes, native prefix caching passed 4 of 4, and acceptance.matched was true across 24 generations. That shows the verifier separates these two configurations on this fixture — including LMCache diverging after reusing a single 256-token chunk. It does not show the verifier catches every defect, and says nothing about other models, hardware or workloads.
Start

If you reuse KV cache,
you should check

The failure mode is silent by construction: correct on a miss, clean in telemetry, wrong only on reuse. We would rather hand you the test than tell you a number.