Enterprise AI teams have spent years optimising model selection, fine-tuning pipelines, and training infrastructure. What most have not optimised is the system that actually serves users at scale. Inference now represents a market measured in the hundreds of billions of dollars, yet the infrastructure running it was largely inherited from training-era designs that carry fundamentally different assumptions about memory access patterns, request lifecycles, and hardware utilisation. The result is a quiet but compounding degradation in GPU ROI that shows up as latency spikes, throughput ceilings, and underutilised hardware that looks busy on a dashboard but is not doing productive work.
The KV Cache Is the Constraint Nobody Budgeted For
When a transformer model processes a sequence, it computes key and value tensors for every token in the context window. These tensors must be retained in GPU memory for the duration of the generation pass so that attention can reference prior context without recomputing it. This is the KV cache, and it is not a minor overhead. For a large model serving long-context requests, the KV cache for a single sequence can consume gigabytes of high-bandwidth memory. Multiply that across concurrent requests and the memory budget disappears fast.
The problem compounds with context length. As enterprises push toward 128K and longer context windows for document analysis, code generation, and agentic workflows, the KV cache grows linearly with sequence length. The model weights themselves are fixed. The KV cache is not. This means that at long contexts, memory is the binding constraint long before compute becomes the bottleneck, which inverts the assumptions most infrastructure teams built their capacity models around.
Why Training-Era Storage Systems Fail at Inference
Training workloads are batch-oriented and memory-predictable. A training run processes fixed-size batches, checkpoints periodically to disk, and tolerates latency in exchange for throughput. The memory access pattern is regular enough that VRAM allocation can be planned in advance. Inference is the opposite. Requests arrive at variable intervals, carry variable context lengths, and require low-latency first-token generation followed by sustained token streaming. The memory footprint of any given request is unknown until the request arrives.
Systems designed for training allocate memory statically or in large contiguous blocks. Applied to inference, this means that VRAM is reserved for the maximum possible sequence length even when most requests are far shorter. The unused reservation cannot be reclaimed for other requests. GPU utilisation numbers look acceptable in aggregate, but a significant fraction of that allocated memory is idle, which means the effective throughput per dollar of hardware is materially lower than the raw specifications suggest.
What Purpose-Built Inference Memory Management Actually Looks Like
The most consequential architectural shift in inference infrastructure over the past two years has been the move toward paged and disaggregated KV cache management. Rather than allocating a contiguous VRAM block per request, paged attention systems allocate memory in fixed-size blocks and map logical sequence positions to physical pages dynamically. This allows the system to pack more concurrent requests into the same VRAM budget, reclaim memory from completed sequences immediately, and share KV cache pages across requests that share a common prefix, which is a significant efficiency gain for applications with system prompts or retrieval-augmented prefixes.
Prefill and Decode Disaggregation
A further architectural pattern gaining traction in production deployments is the separation of the prefill phase from the decode phase onto distinct hardware. Prefill is compute-intensive and processes the entire input context in parallel. Decode is memory-bandwidth-intensive and generates tokens one at a time. Running both on the same GPU means neither phase is using the hardware optimally. Disaggregated architectures route prefill to compute-optimised instances and decode to memory-bandwidth-optimised instances, improving utilisation of both.
Offloading and Tiered Memory
For deployments where VRAM budgets are fixed but context lengths are growing, tiered KV cache offloading moves less-recently-accessed cache blocks to CPU DRAM or NVMe storage, retrieving them on demand. The latency penalty is real and must be managed carefully. The benefit is that effective context capacity can extend well beyond what VRAM alone would permit, which changes the economics of long-context serving without requiring additional GPU nodes.
The Neocloud and Enterprise Economics of Getting This Wrong
Neoclouds pricing GPU capacity by the hour have a direct financial exposure to KV cache inefficiency. If a cluster is nominally at high utilisation but a substantial fraction of that utilisation is idle memory reservation rather than active compute, the revenue per GPU-hour is lower than the utilisation metric implies. Enterprises running on-premises or reserved cloud capacity face the same issue expressed differently: the hardware budget required to serve a given request volume at acceptable latency is larger than it needs to be.
The corrective is not simply to buy more GPUs. Additional GPUs allocated to an architecturally inefficient inference stack will exhibit the same memory waste at higher cost. The corrective is to address the memory management layer first, then size the hardware to the corrected workload. In our experience working with production inference deployments, the gap between nominal and effective GPU utilisation is consistently larger than infrastructure teams expect when they first instrument it properly.
What Rethinking From First Principles Requires
Purpose-built inference infrastructure starts from the request lifecycle, not the training pipeline. It treats KV cache as a first-class resource with explicit allocation, eviction, and sharing policies. It separates the concerns of prefill and decode rather than conflating them on shared hardware. And it instruments memory at the page level rather than relying on aggregate VRAM utilisation as a proxy for efficiency.
The operational implication is that the team responsible for inference infrastructure needs to own the memory management layer explicitly. This is not a concern that can be delegated to the model serving framework defaults. Default configurations in most open-source serving stacks are tuned for benchmarks, not for the variable request distributions and long-context workloads that characterise production enterprise deployments. Closing the gap between benchmark performance and production performance requires deliberate configuration of KV cache policies, batch scheduling, and memory tiering based on the actual request distribution of the application.
The inference infrastructure problem is ultimately a resource allocation problem that happens to run on very expensive hardware. Solving it requires the same rigour applied to any constrained resource system: measure the actual constraint, model the workload accurately, and design the allocation policy to match. Retrofitting training-era assumptions onto inference workloads is what created the utilisation gap. Closing it requires acknowledging that inference is a distinct engineering discipline with its own first principles.
Where Vector Labs Fits
We work with engineering teams to diagnose and redesign production AI infrastructure where default configurations are creating measurable cost or performance gaps. In our memory-wall analysis, we examine how KV cache efficiency and high-bandwidth memory constraints translate directly into inference economics, covering the hardware and architectural trade-offs that determine cost per token at scale. If your inference stack is underperforming relative to your hardware investment, contact us at vector-labs.ai/contacts.
FAQs
The clearest signal is a gap between reported VRAM utilisation and actual request throughput. If your GPUs are showing high memory occupancy but throughput per GPU is lower than your hardware specifications would suggest, idle memory reservation from static or oversized KV cache allocation is the most likely cause. Instrumenting cache occupancy at the page or block level, rather than relying on aggregate VRAM metrics, will surface the true allocation efficiency.
Yes. Paged attention is implemented in several widely deployed open-source inference engines and is increasingly the default in purpose-built serving stacks. The more important question is whether the default configuration of those frameworks matches your actual request distribution. Default block sizes, eviction policies, and batch scheduling parameters are typically tuned for benchmark conditions, and production workloads with variable context lengths and concurrent request patterns will require deliberate tuning to realise the efficiency gains the architecture makes possible.
Not universally. Disaggregation introduces network transfer overhead between the prefill and decode stages, which adds latency and operational complexity. The trade-off is favourable when prefill and decode phases have meaningfully different compute and memory-bandwidth profiles, which is typically the case for long-context workloads and large models. For shorter-context, lower-concurrency deployments, the overhead may outweigh the utilisation benefit, and a well-tuned unified serving stack will often be the more practical choice.
Offloading introduces retrieval latency whenever a cache block that has been evicted from VRAM is needed again during generation. For CPU DRAM offloading, this latency is typically on the order of microseconds to low milliseconds and is often acceptable if the eviction policy is well-calibrated to the application's attention patterns. NVMe offloading carries higher retrieval latency and is better suited to prefill caching for repeated prefixes than to active decode sequences. Any offloading strategy requires careful profiling against the application's latency budget before deployment.
Start by measuring effective throughput per GPU after KV cache and scheduling optimisations are in place, using your actual production request distribution rather than synthetic benchmarks. That corrected throughput figure is the basis for capacity planning. Sizing against the uncorrected baseline will result in over-provisioning relative to what an efficient inference stack actually requires, which is a common and expensive error in initial deployment planning.

