Back to Blog
Release KV Cache vLLM NVLink

New release: MiniMax M3, the Kimi K3 architecture and NVLink fan-out

Awide Labs Engineering · September 22, 2026

This release of the ADP KV cache connector adds MiniMax M3 on vLLM 0.28, verified on hardware with a full regression, and support for the Kimi K3 architecture on vLLM 0.29. It introduces NVLink fan-out of cache restores, which makes decode 14% faster at 32 concurrent agents, and it starts work on a connector that no longer has to be adapted to every new model.

New model support

Two more model families, verified end to end

Every model family lays its KV cache out differently, and every new layout is a new chance for a restore to hand the engine the wrong bytes. So a model joins the supported list only after it passes the same regression on hardware: the pages the engine wrote are compared byte for byte after they come back from the accelerator, the engine is restarted under load, and concurrent agent traffic runs against it.

MiniMax M3 pairs a mixture-of-experts model with MiniMax's sparse attention, which keeps an indexer next to the keys and values: 117 cache tensors on every GPU, all of them now restored. We run the official MXFP8 checkpoint. A 142,665-token prompt that takes 18.3 seconds to recompute comes back from the accelerator in 3.8 seconds after an engine restart, and generation speed under concurrent agents stays level with vLLM without the connector. We recommend vLLM 0.28.0 for MiniMax M3.

Kimi K3 is a hybrid: 69 Kimi Delta Attention layers carry a recurrent state and 24 MLA layers carry keys and values, with cache pages of 864 KiB, more than three times what the accelerator accepts in one object. The connector now describes that topology and fragments those pages. We recommend vLLM 0.29.0 for the Kimi family.

Added to the support matrix
8× H200 NVL · TP=8 · ADP over NVMe-oF
Model Attention architecture vLLM On hardware
MiniMax M3 MXFP8 Sparse attention with indexer, MoE 0.28.0 Full regression
Kimi-Linear-48B-A3B Kimi Delta Attention + MLA 0.29.0 Full regression
Kimi K3 Kimi Delta Attention + MLA 0.29.0 Full regression
0 mismatches 695,448 MiniMax M3 pages restored from the accelerator and compared byte for byte against what the engine wrote, plus 677,616 indexer pages the engine never hands to a connector. Kimi-Linear: 21,608 of 21,608.
Engineering notes

What it took

Fragments to the
device limit

MiniMax M3 aggregates the pages of eight GPUs into 256 KiB objects, twice what the device takes in one command, and Kimi's pages are 864 KiB. The gateway now splits objects against the device's own transfer limit, so both go to the accelerator with no tuning.

Ring alignment
for aggregation

When eight GPUs write one aggregated object, each must own an exact share of the shared-memory ring. The ring length is now a multiple of the tensor-parallel width and the gateway checks that every rank agrees on it, so each GPU restores exactly its own pages: 21,608 of 21,608 matched on Kimi-Linear.

Hybrid models
under load

A restore plan is now recomputed when the engine's own cache hit grows while a request waits. That keeps hybrid models steady under concurrent load: twenty minutes of engine restarts under load pass without a single failure.

Optimization

NVLink fan-out: one copy per node instead of one per GPU

With MLA, which GLM-5.x and DeepSeek use, the latent KV page is identical on every tensor-parallel rank. Until now every GPU copied the whole restored layer out of host memory on its own: on eight GPUs, eight copies of the same bytes through the same host path.

With nvlink_fanout enabled, each GPU copies only its share of a layer's pages, and the GPUs of an NVLink domain exchange the rest over NVLink with one collective per layer. The connector finds the NVLink domains itself and all ranks agree on them before switching the feature on. If any rank cannot take part, it stays off for all of them with a single warning, and restores run exactly as before. A restore that fails on one GPU counts as failed on all of them, so no rank ever computes on a partially filled page.

This is an NVIDIA-only feature. It relies on NCCL over NVLink and on NVML to discover the topology, so it needs CUDA and NVIDIA GPUs joined by NVLink. It applies to MLA models with tensor parallelism of two or more. Its exchange buffers live outside gpu_memory_utilization: about 924 MiB per GPU on GLM-5.3.

2.14× Faster copy of a 196,000-token restore into eight GPUs, measured in isolation: 0.490 s with every GPU copying everything, 0.229 s with the fan-out. Every rank checked byte for byte.
Median generation rate per agent under load
GLM-5.3 FP8 · 8× H200 NVL · range of three runs · 64 agents projected
Fan-out off NVLink fan-out on Projected
0 10 20 30 16 agents, fan-out off: 26.6 tok/s 16 agents, fan-out on: 26.0 tok/s (three runs 25.6–26.6) 26.6 26.0 16 agents ≈ parity 32 agents, fan-out off: 23.6 tok/s 32 agents, fan-out on: 26.9 tok/s (three runs 24.5–29.9) 23.6 26.9 32 agents +14% 64 agents, fan-out off: projected from the measured trend, not measured 64 agents, fan-out on: projected ≈ +28%, not measured PROJECTED ~20.6 ~26.4 64 agents ≈ +28% MEDIAN TOKENS PER SECOND, PER AGENT · DASHED: PROJECTED

At 32 concurrent agents the median generation rate per agent rises from 23.6 to 26.9 tokens per second, +14%. The copy into GPU memory competes with the model's own work, so the more agents run at once, the more the fan-out gives back. Extending the trend from 16 to 32 agents, we expect the gap to keep widening, to about +28% at 64 agents; that point is a projection, drawn dashed, and not yet a measurement.

Restoring a 196,000-token prompt after an engine restart
GLM-5.3 FP8 · 8× H200 NVL · mean of three
Fan-out off NVLink fan-out on
From ADP ACCELERATOR From the accelerator, fan-out off: 2.11 s 2.11 s From the accelerator, fan-out on: 2.04 s 2.04 s −3% 0 0.5 1.0 1.5 2.0 2.5 TIME TO FIRST TOKEN, SECONDS

On a restore from the accelerator after an engine restart, time to first token drops from 2.11 to 2.04 seconds, −3%.

Latest results

Against vLLM without the connector, on 8× H200

The comparison that matters most for agents is the plain one: the same vLLM build, model and GPUs, with the ADP connector and without it. Every coding agent below carries a 33,000 to 40,000-token history, and the histories differ, so without a tier outside GPU memory the agents evict one another.

ADP connector against vLLM on its own
GLM-5.2 FP8 · 8× H200 NVL · TP=8 · median per agent
Metric vLLM alone With ADP Gain
Concurrent agents within 50 ms per token 4 32+ ≥ 8×
Generation rate per agent, 8 agents 4.4 tok/s 29.2 tok/s 6.6×
Generation rate per agent, 16 agents 3.5 tok/s 22.4 tok/s 6.4×
Time to first token of a returning agent, 8 agents 51.6 s 3.8 s 13.7×
Time to first token of a 200,000-token prompt after an engine restart 44.5 s 1.98 s 22.5×

At eight agents the histories no longer fit in GPU memory. vLLM on its own recomputes them, and generation falls to 4.4 tokens per second per agent; with ADP a returning agent reads its history back off the accelerator and keeps 29.2. The median agent stays within 50 ms per token up to four concurrent agents without the connector, and all the way to 32 with it, the highest load we ran.

What's next

Toward a connector that new models don't break

Most of the work in this release, and in the two before it, was the same kind of work: teaching the connector how another architecture lays out its cache. Mamba state, sliding windows, the indexers of sparse attention, MLA, MTP layers. Today 171 lines of the connector name a specific architecture, and every new model family has added to them.

vLLM has a second extension point that takes that work away: the KV offloading framework and its OffloadingSpec API. There the engine describes the cache itself. It reduces every layer to plain pages grouped by cache group, handles hybrid groups, Mamba alignment and MLA replication, and hands the backend nothing but pages and keys. A backend is registered from outside vLLM, with no fork.

We have started building the ADP backend on that API. In the prototype, the number of lines that name an architecture is zero. It passes its tests on vLLM 0.28 and 0.29 and runs end to end against the real gateway. Pages travel between GPU memory and the accelerator on the connector's own path rather than through vLLM's host-memory tier, which would add a copy. Validation on our GPU stands and tensor parallelism across multiple GPUs come next.

Instead of adapting the connector to each new model, ADP inherits vLLM's own model support: every model vLLM runs becomes a model ADP accelerates.

Also in this release

Reliability improvements

  • Objects larger than the device accepts in one command are fragmented by the gateway, so KV pages of any size are written in full.
  • A restored Mamba state lands in the block the engine uses next, including when the engine prepares that block early.
  • The sparse-attention indexer reads the KV cache only after the restore has completed.
  • The scheduler and the workers share one view of the layers and their ids; the connector exchanges exactly the caches vLLM hands over.
  • I/O capacity is sized per submitted request, which keeps long prompts well within limits.
  • After an EXIST timeout the client reopens its connection and carries on.
  • The restore plan is recomputed when the local cache hit grows while a request waits, keeping Mamba, MLA and sliding-window models consistent.
  • Data derived from an incomplete restore is never written back; the related requests and their writes are cleaned up.
  • A restore error is attributed to the step where it occurs.
  • Deletes wait for every outstanding read, and each MTP write is awaited exactly once.
  • Early writes that include the MTP layer are fenced correctly.
How we measured

Test setup

NVLink fan-out
8× NVIDIA H200 NVL in two NVLink domains of four, TP=8, GLM-5.3 FP8, vLLM 0.28.0, ADP reached over NVMe-oF. Load: anonymized coding-agent traces, 645 requests at 8, 16 and 32 concurrent agents; one run with the fan-out off, three with it on.
Restore
A 196,000-token prompt; the vLLM engine is restarted before each measurement, so a hit can only come from the accelerator. Mean of three.
Isolated copy
The full volume of a 196,000-token restore, 78 layers × 3,072 pages × 41,984 bytes, about 10 GB, copied into eight GPUs with and without the fan-out, and checked byte for byte on every rank.
MiniMax M3
Official MXFP8 checkpoint, 8× H200 NVL, TP=8, vLLM 0.28.0. Byte-for-byte comparison on a 100,000-token prompt, a 142,665-token restore after an engine restart, agent load from 1 to 8 concurrent sessions against vLLM without the connector.
Latest results
GLM-5.2 FP8, 8× H200 NVL, TP=8, ADP reached over NVMe-oF. Replayed coding-agent traces with 33,000 to 40,000-token histories at 1 to 32 concurrent agents, against the same vLLM build with the connector disabled; median generation rate per agent. The 200,000-token prompt is restored after an engine restart, so a hit can only come from the accelerator.
Baseline
The same vLLM build, model, tensor parallelism and context length, with the feature under test switched off. Only that feature differs.

Bring your next model

MiniMax M3 and the Kimi family join the models the connector already serves. If your model is not on the list yet, tell us which one. The goal of the offloading work is for that list to become vLLM's own.

Talk to Awide Labs