Back to Blog
Release KV Cache HMA MTP vLLM

New ADP KV cache connector release: hybrid Mamba and MTP on vLLM 0.26

Awide Labs Engineering · September 2, 2026

A new release of the ADP KV cache connector supports the two things that used to break KV offload outright: hybrid Mamba (HMA) and multi-token prediction (MTP) — on vLLM 0.26. It now covers eight production models across seven attention architectures, and on a 200,000-token prompt it turns a 44-second prefill into two seconds.

The problem

Agents made the KV cache the bottleneck

Inference no longer looks like a chat box. An agent opens a repository, reads files, calls tools, corrects itself, and keeps every step of that in its context: a session that starts at a few thousand tokens is still running an hour later at fifty thousand. A support copilot carries the whole ticket history into every turn. A document assistant is handed 200,000 tokens before it is asked its first question. These are long-lived, context-heavy sessions — and a production server runs many of them at once.

All of that context exists as a KV cache in GPU memory, sitting next to the weights in the scarcest space in the server. The model claims its share first, and whatever is left has to be divided among every session in flight. A single 200,000-token prompt can take the rest on its own. Eight coding agents, each with a different history, simply evict one another.

Eviction has exactly one price, and it is always the same: recompute. The next request that needed those pages pushes the entire prompt back through the model before it can emit a single token. On eight H200s and a 200,000-token prompt that is 44.5 seconds of prefill before the first word appears. Past a handful of concurrent agents the cache stops holding anything reusable at all and generation collapses to 2.7 tokens per second per agent — unusable for anything interactive.

And none of that work is new. Those keys and values were computed once already, correctly, and then thrown away because there was nowhere to put them. The longer the session, the more times it pays for the same tokens.

The connector

Give the cache somewhere to live, and prefill becomes a read

The ADP KV cache connector plugs into vLLM through its v1 connector interface — the hook the engine uses to hand KV pages to something outside itself. As a request generates, the connector writes those pages out to the Awide Data Processor, the PCIe accelerator that holds them (reached over NVMe-oF in the tests below). When a later request shares a prefix — the same document, the same system prompt, the same agent history — the pages are read back off the card and placed straight into the engine's cache.

The model never sees the difference: these are the same keys and values it wrote, compared byte for byte on the way back. What changes is the cost. Prefill stops being a matter of pushing every token through the attention stack and becomes a matter of reading it off a device.

The GPU cache stays exactly where it is and keeps doing what it is good at. The connector simply makes it the first tier instead of the only one.

What's new

What this release adds: HMA and MTP

This release moves the connector onto vLLM 0.26 and, with it, onto the model families that shipped this year. Hybrid Mamba (HMA) and Gated DeltaNet layers store their cache in a shape the previous version could not describe, sparse attention keeps an index the engine never hands to a connector, and multi-token prediction (MTP) conflicted with the connector outright. Each of them failed differently.

Four model families are new to the supported list, and three ceilings are gone — cache pages larger than the accelerator's transfer size, contexts above roughly 49,000 tokens, and the conflict with MTP. All three are now handled in the shared layer, so the next architecture is a configuration change rather than a rewrite.

Everything below is measured on the release build.

Coverage

Eight models, HMA and MTP included

The hard part of KV offload is not the fast path — it is that every new model family lays its cache out differently. Sparse attention keeps an extra index the engine never hands over. Hybrid Mamba models carry a recurrent state instead of keys and values. Sliding-window layers expire pages that full-attention layers keep. All of it is now handled in the shared layer, not per model.

Validated support matrix
16 of 16 configurations passed
Model Attention architecture Speculative decoding
GLM-5.2 FP8 Sparse MLA (DSA) MTP
GLM-4.7-Flash MLA, AWQ
DeepSeek-V2-Lite MLA
Gemma 4 12B Full + sliding-window attention MTP
Qwen 3.8 27B Linear + full attention MTP
Qwen 3.6 35B-A3B Gated DeltaNet, MoE MTP
Qwen 3.6 27B Mamba hybrid, three cache groups
Nemotron 3 Nano 30B-A3B Mamba-2 + sparse attention
Engineering notes

Four changes that made the new architectures possible

HMA page
fragmentation

The accelerator accepts objects up to 256 KiB. A hybrid Mamba model's cache page is 2–3 MiB, so every write was being rejected — silently, with no error to see. The connector now splits an object across keys and reassembles it on read, up to 25 fragments per page. The layout is derived from the transfer size, so nothing extra is stored and nothing can drift out of sync. Verified across five different page layouts.

Context ceiling
removed

IO capacity is now measured per submitted request rather than per layer group — the shared memory ring already batches the stream on its own. On a standard 6 GiB ring the ceiling moved from roughly 49,000 tokens to 788,000. The limit is now the GPU's own cache, not the transport.

Sparse attention
index filter

Sparse-attention models allocate an indexer cache that the engine never hands to a connector. Asking for it back failed whole requests even when the data on the card was intact. The connector now exchanges only the caches the engine actually passes it, detected from the layer's own backend.

Transfer-size
alignment

Cache slots are aligned to the size of a transfer instead of to each individual page. Same data, 4.5% less traffic to the accelerator on every model whose page size is not a multiple of the device block.

MTP runs alongside it

Multi-token prediction works with the connector enabled at a 55.3% acceptance rate — 2.76 of every five draft tokens accepted — with a 100% cache hit rate and no errors. The storage format is independent of speculation, so a cache written with MTP on reads back correctly on an engine running without it.

Prefill

44.5 seconds becomes 1.98 seconds

The measurement below is deliberately unkind to us. Between the cold and the warm column the vLLM engine is restarted — the GPU cache is wiped, so a hit can only come from the accelerator. Every prompt is independent, and each cold run is confirmed cold by the query counter reading the prompt's full length.

Time to first token, before and after an engine restart
8× H200 NVL · GLM-5.2 FP8 · TP=8
Cold — recomputed on GPU Warm — restored from ADP
16,512 TOKENS 3.16 s 0.20 s 16.9× 65,927 TOKENS 12.68 s 0.62 s 20.8× 131,798 TOKENS 28.94 s 1.26 s 22.5× 205,877 TOKENS 44.54 s 1.98 s 21.8× 0 10 20 30 40 TIME TO FIRST TOKEN, SECONDS
101,000 tok/s The rate at which the accelerator returns cached context, against 4,445 tok/s when the same GPUs recompute it — a 22.7× wider prefill path.
Agentic load

Where it matters most: many agents, long histories

Coding agents are the worst case for a GPU-only cache. Each one carries a 40–50k-token history, and the histories are all different, so they evict one another. Past a handful of concurrent agents the GPU cache stops holding anything useful and generation collapses.

Below is a customer A/B on eight H200 PCIe cards. Same model, same traffic, same prompts — the only difference is whether the ADP connector is enabled.

Median generation rate per agent
Customer stand · 8× H200 PCIe · GLM-5.2
vLLM baseline With ADP connector
0 25 50 75 100 103.2 107.1 1 agent 1.04× 59.3 75.8 4 agents 1.28× 2.7 16.9 8 agents 6.3× MEDIAN TOKENS PER SECOND, PER AGENT

At one and four agents the connector costs nothing and already runs ahead. At eight — the point where the GPU cache is full and the baseline falls off a cliff — it is more than six times faster. The share of requests below the customer's speed floor drops with it, to 42.2% against 50.6%.

Latency under saturation

Lower time to first token at every level of concurrency

A separate capacity sweep, from one to three hundred concurrent users on the same eight-GPU server. The 95th-percentile time to first token is lower with the connector enabled at all seventeen measured points — not on average, at every one of them.

Time to first token, 95th percentile
Fixed 1,000-in / 256-out · streaming · 1 → 300 concurrent
vLLM baseline With ADP connector
0 20 40 60 80 74.1 s 33.9 s 1 64 128 192 256 300 CONCURRENT REQUESTS

At three hundred concurrent users the connector holds first-token latency at 33.9 seconds against 74.1, and it does so while returning zero failed requests. The baseline drops 1.64% of them at the same load.

Correctness

What we checked before shipping

A cache that is fast and occasionally wrong is worse than no cache at all. Every acceptance run compares each restored page against exactly what the engine wrote.

Acceptance results
Ten configurations · seven models · two storage backends
CheckResult
Objects restored and compared byte for byte412,787 — zero mismatches
Cache hits across a full acceptance session489,599 of 490,773 — 99.76%
Connector errors / gateway errors0 / 0
Container restarts during acceptance0
16 concurrent readers, GPU cache empty98.5% hits, 0 failures
Throughput, 1 → 64 concurrent requests17.7 → 479 tok/s (27×)
Written with speculative decoding on, read with it offIdentical
Live customer deployment on ADP62.4% hit rate, ~6M objects resident
How we measured

Test setup

Software
vLLM 0.26 with the ADP KV cache connector, deployed via Docker Compose. Release image awide-vllm:0.26-full.
Prefill and correctness
8× NVIDIA H200 NVL, TP=8, GLM-5.2 FP8, 256,000-token context, ADP reached over NVMe-oF. August 2026.
Agentic A/B
Customer stand, 8× H200 PCIe, GLM-5.2, live coding-agent traffic with 41–54k-token prompts. Median generation rate per session, one run per point.
Capacity sweep
Fixed 1,000-token input / 256-token output, streaming, seventeen concurrency levels from 1 to 300, one measured run after a discarded warm-up.
Support matrix
Sixteen configurations across seven models on the release image, plus GLM-5.2 on the H200 stand. Every restored page compared against what the engine wrote.
Baseline
The same vLLM build, model, tensor parallelism and context length, with the connector disabled. Only the KV offload path differs.

Try it on your own model

The connector ships as a drop-in for vLLM 0.26 with ready-made configurations for all eight models above. If your architecture is not on the list, tell us which one — adding a family is now a matter of days, not a rewrite.

Talk to Awide Labs