Skip to main content
Articles/kv-cache-compression-llm-context/delta-encoding-kv-cache-shrink-llm-context-windows-one-token-at-a-time
Scenario Article

Delta‑Encoding KV Cache: Shrink LLM Context Windows One Token at a Time

The Gotcha

Abstract Algorithms•Sep 21, 2026
💡 Executive Summary

⏳ Reduce KV cache size by keeping deltas instead of full key‑value pairs—extending LLM context windows without extra GPU memory.

🎯 System Scenario & Requirements

System Goal

⏳ Reduce KV cache size by keeping deltas instead of full key‑value pairs—extending LLM context windows without extra GPU memory.

Actors & Components

  • Application or API tier
  • Core service under design
  • Operator or SRE observer

Functional Requirements

  • TLDR: ⏳ Reduce KV cache size by keeping deltas instead of full key‑value pairs—extending LLM context windows without extra GPU memory.
  • When you feed a large prompt to a transformer, the KV cache grows linearly with context length.
  • Most LLMs store each token’s key and value vectors (e.g., 128 × 768 floats) verbatim.

Constraints & Assumptions

  • Constraints are derived from the rebuilt scenario stages.

⚡ Execution Stages & Decision Trace

1

Stage 1 — The Solution: Delta‑Encoding

Action / Decision:

Instead of caching the full key/value vectors, cache differences (deltas) between successive tokens.

Component Behavior:

Because adjacent tokens in a language model often produce highly correlated keys/values, their differences are sparse and can be encoded with fewer bits.

Observable Output: Compute ΔK, ΔV for each new token: ΔK = K new - K prev , ΔV = V new - V prev .
Read Full Stage in Deep Dive ↓
📖

Deep Dive

Detailed Architectural Analysis

Scenario context

⏳ Reduce KV cache size by keeping deltas instead of full key‑value pairs—extending LLM context windows without extra GPU memory. When you feed a large prompt to a transformer, the KV cache grows linearly with context length. Most LLMs store each token’s key and value vectors (e.g., 128 × 768 floats) verbatim. Even a 4 k‑token context can push cache memory beyond what a single GPU can hold, forcing you to truncate…

This walkthrough focuses on The Gotcha.

Before making a design choice, clarify:

  • When you feed a large prompt to a transformer, the KV cache grows linearly with context length.
  • Most LLMs store each token’s key and value vectors (e.g., 128 × 768 floats) verbatim.
  • Even a 4 k‑token context can push cache memory beyond what a single GPU can hold, forcing you to truncate or offload tokens.

Concepts in play: caching, deep-learning-foundations, quantization-and-llm-inference, stack-and-queue-data-structures

Stage 1 — The Solution: Delta‑Encoding

  • Instead of caching the full key/value vectors, cache differences (deltas) between successive tokens.
  • Because adjacent tokens in a language model often produce highly correlated keys/values, their differences are sparse and can be encoded with fewer bits.
  • Compute ΔK, ΔV for each new token: ΔK = K new - K prev , ΔV = V new - V prev .
  • Quantize the deltas (e.g., 8‑bit signed integers).

Observable outcome: Quantize the deltas (e.g., 8‑bit signed integers).

Stage 2 — Code Snippet

  • Usage: Store cache as a list of (dk, dv) tuples.
  • When the model needs the KV cache, run delta decode(cache) to reconstruct the full tensors.
import numpy as np

def delta_encode(cache, new_k, new_v):
    if not cache:
        cache.append((new_k, new_v))
        return
    prev_k, prev_v = cache[-1]
    dk = (new_k - prev_k).astype(np.int8)   # 8‑bit delta
    dv = (new_v - prev_v).astype(np.int8)
    cache.append((dk, dv))

def delta_decode(cache):
    k, v = cache[0]
    full_k, full_v = [k.astype(np.float32)], [v.astype(np.float32)]
    for dk, dv in cache[1:]:
        k = k + dk.astype(np.float32)
        v = v + dv.astype(np.float32)
        full_k.append(k); full_v.append(v)
    return np.stack(full_k), np.stack(full_v)

Observable outcome: When the model needs the KV cache, run delta decode(cache) to reconstruct the full tensors.

Stage 3 — Trade‑offs

    • Compression Ratio: 10×–20× reduction for typical text; depends on token similarity.
    • Decoding Latency: Minor; vector addition per layer.
    • Implementation Complexity: Low; fits into existing KV cache pipelines.

Observable outcome: - Implementation Complexity: Low; fits into existing KV cache pipelines.

End-to-end outcome

After working through the stages, you should be able to explain:

  • Delta‑encoding the KV cache leverages token locality to shrink memory usage dramatically, letting you push LLM context windows beyond the usual 4 k‑token limit without hardware upgrades.
  • It’s a lightweight, algorithmic “gotcha” that can be added to any transformer inference engine.

Alternatives considered

The source focuses on one primary design. A second architecture is not compared, so no alternative is invented here.

Failure and degraded modes

The source does not isolate a separate failure mode. Limits that matter for the scenario are called out in the stage decisions above.

✅

Key learnings

  • Delta‑encoding the KV cache leverages token locality to shrink memory usage dramatically, letting you push LLM context windows beyond the usual 4 k‑token limit without hardware upgrades.
  • It’s a lightweight, algorithmic “gotcha” that can be added to any transformer inference engine.
  • Instead of caching the full key/value vectors, cache differences (deltas) between successive tokens.
  • Usage: Store cache as a list of (dk, dv) tuples.
    • Compression Ratio: 10×–20× reduction for typical text; depends on token similarity.

Share this case study

Discuss architecture trade-offs and lessons with your team.

Share:XLinkedInReddit