Encoder Disaggregation
Scale vision encoders separately from LLM workers
Overview
Encoder disaggregation separates the vision encoder from the prefill/decode pipeline into its own worker. Instead of running image encoding inline, a dedicated encode worker handles media processing and transfers the resulting embeddings to downstream workers via NIXL (RDMA).
This enables:
- Independent scaling of encode workers based on vision workload
- Reduced GPU memory pressure on prefill/decode workers
- Better GPU utilization by matching worker counts to actual bottlenecks
When to Use
Use encoder disaggregation when:
- Vision encoding is a bottleneck and you need to scale encoders independently of LLM workers
- You want to run the vision encoder on different hardware (e.g., smaller GPUs for encoding, larger GPUs for LLM inference)
- Your deployment handles high volumes of multimodal requests and encoding throughput is limiting
For simple deployments or development and testing, the aggregated pattern (EPD, one worker) is easier to set up.
Deployment Patterns
Placement Options
Where the encoder runs is a separate choice from whether it is disaggregated:
- Aggregated: every GPU runs one worker that encodes, prefills, and decodes. This is the simplest setup.
- Colocated encoder: every GPU runs encoder workers and a prefill and decode (PD) worker side by side, sharing the GPU through CUDA MPS. Encoding no longer queues behind prefill on the same scheduler, and you need no extra hardware.
- Disaggregated encoder: encoders run on their own GPUs, which can be lower-tier hardware, and send embeddings to the PD workers over NIXL.
Launching
vLLM
SGLang
TensorRT-LLM
See the backend-specific documentation (vLLM, TRT-LLM, SGLang) for full configuration details and component flags.