What is Disaggregated Serving?
Disaggregated Serving is an LLM inference architecture that runs prompt prefill and token decoding in separate worker pools connected by a key-value cache transfer path.
Quick Facts
| Created | Developed in modern LLM serving systems in the 2020s |
|---|---|
| Specification | Official Specification |
How It Works
Prefill processes input tokens and creates the initial KV cache, while decode repeatedly reads that state to generate output tokens. Their compute, memory, batching, and latency profiles differ, so disaggregated serving lets operators size and scale each phase independently and reduce interference between long prompts and active generations. Every request must move or expose its KV state from a prefill worker to a decode worker, making transfer bandwidth, locality, routing, compatibility, and failure recovery part of the critical path. The architecture can improve service-level objective isolation, but it is not an automatic throughput optimization and should be benchmarked against an aggregated baseline. See the <a href="https://qubittool.com/blog/disaggregated-llm-serving-prefill-decode">disaggregated LLM serving guide</a> for routing and capacity planning.
Key Characteristics
- Separates prefill and decode into independently scalable worker pools
- Transfers or remotely exposes KV-cache state between phases
- Can isolate time to first token from inter-token latency pressure
- Supports phase-specific parallelism, batching, and hardware choices
- Adds routing, network, compatibility, observability, and recovery complexity
Common Use Cases
- Serving long-prompt and long-generation workloads with different bottlenecks
- Scaling prefill and decode capacity independently
- Protecting active decode streams from bursty prompt processing
- Applying KV-aware routing across specialized worker pools
- Benchmarking phase-specific hardware and parallelism under explicit SLOs
Example
Loading code...Frequently Asked Questions
Why separate prefill and decode?
They have different compute, memory, batching, and latency behavior. Separate pools can scale each bottleneck independently and reduce interference.
Does disaggregated serving always improve throughput?
No. KV transfer, routing, synchronization, and underused workers can outweigh the benefits. Benchmark the real workload against an aggregated deployment.
Why is KV-cache transfer important?
Decode cannot continue without the state produced during prefill. Slow transfer can dominate time to first token and erase the expected isolation benefit.
Is disaggregated serving the same as speculative decoding?
No. Disaggregation places prefill and decode on different workers. Speculative decoding accelerates token generation by verifying draft tokens.
When should aggregated serving remain the default?
It is often simpler for short prompts, small models, low concurrency, limited networking, or workloads without clearly different phase bottlenecks.