KV cache transfer benchmarks
Analysis
- tl;dr: a translated KV cache carries most of the quality and almost none of the prefill cost. Qwen3.5-4B → Qwen3.8-27B scores 0.84 on QuALITY vs 0.94 native 27B, and GLM-4.7-Flash → GLM-5.3 gets 0.98 on ARC and 0.89 on ZebraLogic vs 0.99 and 0.93 native. On timing, Qwen2.5 3B → 72B turns a projected ~76-minute native 1M-token prefill into ~9 minutes, and Ministral-3B → Mistral-Medium-128B turns ~2 hours into ~11 minutes. The open weakness is exact string recall (Gemma 4 is the hardest case), and the details per pair are in the tabs above.
- Task-specific mapping materially outperforms the generic mapper when the task distribution is known. On the Qwen3 1.7B to 8B transfer, the task-specific map reaches 0.79 on ZebraLogic versus 0.185 for the generic map, 0.78 versus 0.52 on LongHealth, and also improves QuALITY, ContractNLI, and BAMBOO PaperQA. The generic map remains useful as a zero-task-data baseline, while a small amount of task data closes much more of the receiver gap.
- ZebraLogic is unusually sensitive to cache-transfer errors because each answer depends on preserving an exact chain of interlocking constraints. The generic mapper was trained on FineWeb-Edu rather than ZebraLogic, so small errors in the translated relational state can invalidate the whole solution. That explanation fits the result: generic transfer scores 0.185, while the ZebraLogic-specific map recovers to 0.79, matching the native 8B model.
- Cache transfer can scale between models even when the source and receiver are not architecturally identical. Qwen3.5 to Qwen3.8 is a strong example: the mapped cache carries useful state across model generations and sizes. Gemma 4 is a harder case and shows where architecture differences still create large losses, especially on exact recall, but it also gives us a concrete target for better alignment methods.
- The timing benefit becomes larger as context grows. At one million tokens, the current projections put Qwen2.5 72B native prefill at about 76 minutes versus about 9 minutes for transfer, and Mistral-Medium native prefill at about two hours versus about 11 minutes for transfer. The important scaling property is that mapping and cache movement grow much more gently than large-model prefill.
- A partner could use this as a serving primitive for reading long contexts with a smaller model and handing the resulting cache to the model they already serve. With access to their GPUs, we would train and evaluate maps for their model pairs, measure long-context and concurrency behavior on their stack, optimize cache movement, and replace the remaining projections with production-scale measurements.
- Exact-recall benchmarks are the clearest weakness: translated caches do worse when the score requires reproducing a hidden string exactly. This is a deliberately harsh test, and most real workloads care more about semantic correctness, reasoning, and downstream task performance than verbatim copying. We still show the result because improving exact recall would make the method useful for an even broader set of retrieval workloads.
- We are exploring speculative decoding in the opposite direction: transferring state from a larger model into a smaller model, then letting the smaller model generate. The goal is to increase tokens per second by decoding with the cheaper model while giving it better output quality than it achieves from its own context processing alone. Cache transfer lets the large model contribute stronger internal representations without paying its full autoregressive decoding cost. This direction is especially relevant to real-time systems; see the Ultravox research blog.
Thank you to Lily Sun for all your help on these benchmarks.