Sidecar Backends
Experimental. Sidecar packaging, launchers, and API coverage are still evolving. The sidecar path does not yet match every feature of the in-process backends.
A Dynamo sidecar runs beside the inference engine process. It registers the engine with Dynamo discovery, forwards engine events into the Dynamo event plane, and serves requests from the Dynamo frontend by calling the engine’s native gRPC API.
Design Goals
- Keep the upstream engine’s native serve path and argument surface.
- Move toward public, versioned gRPC contracts with explicit backward compatibility instead of importing private engine APIs.
- Isolate Dynamo and engine dependencies in separate processes.
- Attribute failures through engine-specific and Dynamo-specific logs and health checks.
- Reuse Dynamo’s frontend, routing, planning, and disaggregated-serving orchestration.
Architecture
The frontend and router discover sidecars and send requests to them over the Dynamo request plane. Each sidecar converts requests to the engine’s native gRPC API and streams responses back.
Responsibilities
Container Packaging
The sidecar Dockerfile builds all three engine-specific sidecar executables into
one CPU-only image. Deployments select an engine by setting the container
command:
The image’s default entrypoint, dynamo-sidecar, maps the short names vllm,
sglang, and trtllm onto those executables. It is a convenience for ad-hoc
docker run; the deployment manifests override it with command. The inference
engine remains in a separate GPU container, so the sidecar image does not
include vLLM, SGLang, TensorRT-LLM, CUDA, or engine-specific Python
dependencies. The image runs as the non-root dynamo user with numeric user ID
1000 and declares port 9090 for Dynamo system endpoints, so Kubernetes can
enforce runAsNonRoot.
The sidecar image is published to NGC for each release, starting with 1.6.0:
To build it from source instead, run from the repository root with the sidecar Dockerfile:
Pod Layout
The engine and sidecar share one worker pod. The engine is the main
container; the sidecar is a
native sidecar:
an init container named runtime with restartPolicy: Always, which requires
Kubernetes 1.29 or later. The two connect over loopback.
Kubernetes starts the sidecar before the engine and keeps it running for the
life of the pod. Declaring the runtime init container enables sidecar mode in
the Dynamo operator, which gives the sidecar /live and /health probes on
port 9090. These probes do not track engine loading, so keep the engine’s own
probes on main. Sidecar mode supports worker, prefill, and decode components;
multinode deployments are not yet supported.
Topologies
Each engine page shows its single-node TP, multi-node TP, and multi-node DP topologies: vLLM, SGLang, TensorRT-LLM.