Disaggregated prefill and decode serving splits the two distinct phases of LLM inference onto separate pools of GPUs: prefill, which processes the entire input prompt in one compute-intensive pass and is compute-bound, and decode, which generates output tokens one at a time and is memory-bandwidth-bound, transferring the computed key-value cache between the two pools over a fast interconnect such as NVLink or InfiniBand. Running both phases on the same GPUs, as most engines do by default, means a long prefill for one request can delay token generation for many other in-flight requests, hurting both time to first token and inter-token latency at once under mixed traffic. By dedicating hardware to each phase and scaling them independently, based on whichever is the actual bottleneck for a given traffic pattern, disaggregation improves both metrics simultaneously and lets operators size prefill and decode capacity separately rather than as one coupled pool. The approach adds real complexity, including KV cache transfer latency and orchestration across node pools, so it mainly pays off at large scale with high, variable traffic rather than small single-GPU deployments. vLLM, NVIDIA Dynamo, and SGLang have all added support for this pattern. Nanobase AI implements disaggregated serving for customers whose scale justifies the added operational complexity.

Two phases with opposite resource profiles

Every LLM inference request has two phases with genuinely different hardware demands. Prefill processes the entire input prompt in one pass, computing attention over every token at once, which is compute-bound and benefits from raw GPU FLOPs. Decode generates output tokens one at a time, each pass reading the full KV cache to produce a single new token, which is memory-bandwidth-bound and benefits from fast memory access more than raw compute.

PhaseBottleneckScales well withHurt by
PrefillCompute (FLOPs)More tensor core throughputLong queued decode work ahead of it
DecodeMemory bandwidthLarger KV cache, faster memoryLarge prefill jobs interleaved on the same GPU

Running both phases on the same GPU pool, which is the default in most engines, means these two opposite workloads compete for the same hardware, and a long prefill for one request can stall token generation for every other in-flight request sharing that GPU.

Prefill and decode are different workloads wearing the same request, and coupling them onto identical hardware is a compromise, not a natural fit.

What separating them actually solves

Disaggregation dedicates separate GPU pools to each phase and transfers the computed KV cache between them over a fast interconnect, typically NVLink within a node or InfiniBand across nodes. The direct payoff is that a burst of long prompts no longer delays token generation for unrelated requests, since the decode pool never sees prefill work land on the same GPUs at all. This improves both time to first token and inter-token latency simultaneously under mixed traffic, rather than trading one against the other the way tuning a shared pool usually does.

The second, less obvious benefit is independent scaling: prefill and decode capacity can be sized to the actual bottleneck in your traffic pattern rather than as one coupled resource, which matters once request volume is high enough that prefill-heavy and decode-heavy periods behave differently.

The real win is decoupling two workloads that were never actually the same shape, letting each scale to its own bottleneck instead of a shared compromise.

The transfer step is where the complexity lives

Moving KV cache between GPU pools sounds simple in description and is the hardest part in practice. The transfer needs to happen fast enough that it does not itself become the new bottleneck, which is why implementations lean on high-bandwidth interconnects and dedicated transfer libraries rather than generic networking. Several engines have built explicit support for this pattern: vLLM exposes a KV connector interface for pluggable transfer backends, SGLang has its own disaggregation implementation, and NVIDIA Dynamo builds cluster-wide KV-aware routing and cache transfer as a core part of its design, using NIXL for the underlying data movement across nodes.

Orchestration adds its own overhead too: the system needs to route each new request to a prefill worker, track when its cache is ready, and hand off to a decode worker with minimal added latency, all while both pools scale somewhat independently under changing load.

KV cache transfer speed and orchestration overhead determine whether disaggregation is a net win or just added complexity with no measurable benefit.

When it is not worth the complexity

Disaggregation adds real operational surface: two pools to monitor and scale instead of one, a transfer path that can itself fail or degrade, and more moving parts in the request routing layer. For a single-GPU or small single-node deployment with modest, fairly uniform traffic, this complexity has no bottleneck to solve, since prefill and decode contention only becomes a measurable problem once traffic is high, variable, and mixing long and short requests at meaningful scale.

The honest signal to look for is measured contention, prefill bursts visibly degrading decode latency for other users, rather than assuming disaggregation is simply the more advanced or forward-looking architecture. Many production deployments never need it.

Disaggregation earns its complexity at high, variable-mix traffic scale, and is usually the wrong first step for a small or uniform-traffic deployment.

Frequently asked questions

Which engines support disaggregated prefill and decode as of 2026?

vLLM, SGLang, and NVIDIA Dynamo all have implementations, with Dynamo built specifically around orchestrating this pattern across multi-node clusters and the other two supporting it as a serving mode within their own engines.

Does disaggregation reduce total GPU count needed?

Not usually; it typically requires dedicating GPUs to each phase rather than sharing a pool, which can mean more total GPUs for the same peak throughput unless the independent scaling lets you right-size each pool below what a single coupled pool would need.

What interconnect is required for disaggregation to work well?

NVLink within a single node or InfiniBand across nodes is standard; the KV cache transfer needs enough bandwidth and low enough latency that it does not itself become the new bottleneck, which rules out standard Ethernet for anything beyond small-scale experimentation.

Is disaggregation the same thing as NVIDIA Dynamo?

No. Disaggregation is the architectural pattern; Dynamo is one implementation that orchestrates it (along with routing and cache-awareness) across a cluster, running vLLM, SGLang, or TensorRT-LLM underneath as the actual per-GPU engine.

How Nanobase AI helps

Nanobase AI, a Silicon Valley GPU infrastructure company, implements disaggregated prefill and decode serving for customers whose traffic scale and variability actually justify the added operational complexity, and just as often advises against it when a simpler shared-pool deployment on vLLM or SGLang already meets latency targets. See our related coverage of NVIDIA Dynamo for how this pattern extends to full cluster orchestration.

Ready to discuss your project? Contact Nanobase AI or email hello@bumu.tech.