NVIDIA Dynamo · Developer intro

NVIDIA Dynamo

Open-source, distributed inference serving for the datacenter.

Dynamo scheduling memory data transfer vLLM SGLang TRT-LLM GPUGPUGPU engines optimize the GPU · Dynamo optimizes the system around them
What is Dynamo

Engines optimize the GPU. Dynamo optimizes the system around them.

clients Dynamo frontendOpenAI API routerKV + load aware plannerSLA autoscaling prefill workers decode workers KV via NIXL KV cache tiers · GPU → host → disk → remoteKVCR · NIXL
Open sourceRust + Python · Apache 2.0 · pip, containers, Kubernetes
Any enginevLLM · SGLang · TensorRT-LLM, and more
Modularscheduling, memory, data transfer as separate crates and wheels
Solves: disaggregation · config search · traffic spikes · fault tolerance beyond Kubernetes
What Dynamo focuses on

How Dynamo approaches performance, scale and resiliency

Performance

2×tokens/s · disagg vs agg
agg
disagg
Baseten · GLM-5.2
⇢
Route to the cacheKV events → the worker holding the prefix
⇄
Split prefill and decodeeach phase on its own GPUs
▤
Keep KV, don't recomputeoffload to host, disk, remote

Scalability

5×faster cold start
before
Dynamo
Photoroom · Snapshot · 220 s → 40 s
⚡
Start in secondsSnapshot + ModelExpress
◎
Scale to the SLAPlanner sizes prefill and decode separately
▦
Scale hierarchicallyGrove: gang, topology-aware

Resiliency

2.7×faster P95 TTFT in failover
before
Dynamo
KVCR-Guard · internal
⛨
Keep state aliveKV and weights outlive the engine
◉
Detect fastinhibition, discovery, canaries
↻
Keep streams alivemigrate requests with their tokens
Why Dynamo

Three reasons teams pick Dynamo

1

Production-grade performance

fault tolerance engine KV routing disagg KV offloading

Routing, disagg and offloading speed up the engine; fault tolerance keeps it serving.

2

Best integration & interop

EnginesvLLMSGLangTRT-LLMTokenSpeedFastVideo
KV offloadLMCacheHiCacheFlexTensorKVCR
Networking & storage · NIXLUCXlibfabricGPUDirect StorageS3Azure Blob3FSMooncakePOSIX

Plug into the engines, caches and fabrics you already run.

3

Hardware neutral

NVIDIAGPU
IntelXPU
AMDGPU
GoogleTPU · via vLLM
AmazonTrainium · via vLLM

Run on the accelerators you have, without vendor lock-in.

Where Dynamo is today

In production at scale, built in the open

Customers
~100production customers
25%+serve on 1,000+ GPUsseveral on 10,000+ GPUs
25+ customers

v1.0 at GTC 2026 · v1.6 today · enterprise support since v1.4

GitHub activity
⭐ 8.4kstars · 1.75k forks
~175merged PRs / week
283external contributors
62% external
214external PRs merged · Oct 2026
33% of all

github.com/ai-dynamo/dynamo · Mar 2025 – Oct 21 2026

Where Dynamo is today · community

External contributions keep climbing

PRs external · Oct
Mar 2025Oct 2026
external contributors
Mar 2025Oct 2026
customer & partner blogs
Mar 2025Oct 2026
papers · deep dives + citations
Mar 2025Oct 2026
The Dynamo ecosystem

Use the whole stack, or pick the parts you need

Click a component for its slide.

Scheduling & scaling

Router: the right worker for every request

Sends each request to the worker that already holds its KV cache, weighed against live load, so cached prefixes are reused instead of recomputed.

  • 1
    Exact cache viewKV events from every engine, on every router replica
  • 2
    Admission controladmit, hold in class queues, or fail fast with 529
  • 3
    Customizableplug in your own filters, scorers and pickers
requestsadmissionadmithold · queue5292Routerfilterscore: cache + loadpick3W1cache hitW2coldW3busyKV events1
Scheduling & scaling

Planner: capacity that follows the SLA

An autoscaler built for LLM serving: it watches live traffic and scales prefill and decode separately to hit your TTFT and ITL targets with the fewest GPUs.

  • 1
    Live traffic inrequest rate, prompt and output lengths as they arrive
  • 2
    Predict and sizeforecasts the next interval; sizes prefill and decode to TTFT / ITL
  • 3
    Scale up and downadds prefill or decode workers, removes idle ones, within the GPU budget
Live trafficPlannerobservetraffic + metricspredictnext intervalsizeprefill & decode to SLAconstrainminimums · GPU budgetDeploymentprefill▲ +1+decode▼ −1up and down, every tickengine metrics123
Scheduling & scaling

Grove: schedule whole inference systems

A Kubernetes API that describes a whole inference system — frontend, prefill, decode — as one custom resource. Unlike LeaderWorkerSet, which groups one leader with its workers, Grove gang-schedules, scales and orders every role together.

  • 1
    Scale at every levela role, a group, or the whole system
  • 2
    Hierarchical gang schedulingleader + workers start together or not at all
  • 3
    Topology-aware placementpack in one rack, spread replicas apart
PodCliqueSet · replica 1frontend ScalingGroup · gangprefilldecodeall-or-nothingPodCliqueSet · replica 2frontend ScalingGroup · gangprefilldecodeall-or-nothingscaletopology-aware placementrack / NVLink domain Areplica 1 packed togetherrack / NVLink domain Breplica 2 spread for availability123
Scheduling & scaling

Snapshot: warm workers in seconds

Checkpoint a warmed-up worker once, including GPU state, and restore it anywhere in seconds.

  • 1
    Capture a warm workerafter engine init, CRIU + cuda-checkpoint save CPU and GPU state
  • 2
    Restore from storageany node resumes the snapshot: seconds instead of a full cold start
  • 3
    Weights via ModelExpressrestored nodes pull weights GPU → GPU from a peer
Node A · warm workerengine init oncekernels · CUDA graphsCPU process stateGPU memory statecapturesnapshotCRIU image+ cuda-checkpointsharedstoragepeer GPUModelExpressrestoreweights P2PNode B · serving■ state from snapshot■ weights from peerNode C · serving■ state from snapshot■ weights from peerNode D · serving■ state from snapshot■ weights from peer123
PhotoroomGPU cold start
5× faster
Qwen3-Next-80Bto serving, + ModelExpress
13× faster
Published results gray = before · green = with DynamoDeep dive: mx-snapshot.html →
Memory management

KVCR: move KV to where it is needed

The router plans where KV should be; KVCR moves it across workers, host memory and storage, and keeps it through engine crashes.

  • 1
    Router plans the movehints say what to copy, move, prefetch or drop
  • 2
    KV across nodes and tiersallocate KV across DRAM and storage, peer to peer over NIXL
  • 3
    KVCR-Guarda sidecar process holds the KV pool and serves it if the engine fails
Dynamo routerhints: where to fetch KVNode AGPU · HBMengine-managedhost CPU · DRAMengine processKVCRKVCR-Guardsidecar processsurvives a crashNode BGPU · HBMengine-managedhost CPU · DRAMengine processKVCRKV P2P · NIXLlocal disk · storage tiers123
DeepSeek V4 Prop99 TTFT on burst · B200
6× faster
ProductionTTFT p50 · 22 B200 nodes
1.28× faster
Production customerKV cache reuse
+14%
KVCR-GuardP95 TTFT in failover
2.7× faster
Results gray = before · green = with DynamoDeep dive: kvcr.html →
Memory management

GMS: weights that outlive the engine

Model weights live in GPU memory owned by a service, so they outlive the engine process.

  • 1
    One copy of weightsowned by GMS, mapped read-only into engines
  • 2
    Shadow engineparked; takes over in seconds if the active engine crashes
  • 3
    Engines plug incustom PyTorch allocator on CUDA VMM
GPU HBMweights · owned by GMScustom PyTorch allocator · CUDA VMM · maps weights read-onlyactive engineown KV + scratch✕ crashesshadow enginegraphs ready · parked on a lock▶ takes overswapseconds123
After an engine crashweights reloaded
0 GB
gpt-oss-120brestore with GMS + NVMe (PoC)
< 5 s
Memory management

FlexTensor: stream weights into HBM on demand

Streams model weights (tensors) from host DRAM into GPU HBM just before each layer runs, so models larger than HBM fit and run at full speed.

  • 1
    Wrap, don't rewriteplain PyTorch: wrap the nn.Module, no model or engine changes
  • 2
    Weights (tensors) in host DRAMpacked into pinned blocks, freeing HBM for KV and activations
  • 3
    Streamed just in timeprofiled prefetch hides the copy behind compute
PyTorch model · nn.Modulewrapped by FlexTensor · no code changeGPU HBMcomputing nowL1L2L3← arrives just before it runsfreed HBM → KV cache · activationsHost DRAMpinned blocksL3L4L5L6L7L8L9L10stream weights (tensors) · PCIe / C2Cprefetch scheduled from the profile123
LTX-2.3 outpaint · A100 80GBmax video length
+48.5% longer
LTX-2.3 outpaint · 8×A100 80GBmedian generation time
2.24× faster
Results gray = before · green = with DynamoDeep dive: flextensor.html →
Data transfer

NIXL: one API for every transfer

The inference transfer library: one API every engine (vLLM, SGLang, TRT-LLM) uses to move KV and weights over networks and to storage.

  • 1
    One async agentpoint to point, non-blocking; used by vLLM, SGLang and TRT-LLM
  • 2
    Pluggable backendsnetwork: UCX, libfabric, UCCL, GPUNetIO · storage: GDS, POSIX, 3FS, S3…
  • 3
    Every memory tierGPU, CPU, SSD and remote storage behind one API
Inference enginesvLLMSGLangTRT-LLMNIXL agentone async API · moves KV and weights across GPU, CPU, SSD and remoteNetworkGPU ↔ GPU / host, across nodesUCXlibfabric · EFAUCCLDOCA GPUNetIOMooncakeStoragefile · block · objectGDSPOSIX3FSGUSLI blockS3Azure BlobDDN InfiniaRedis123
Data transfer

ModelExpress: weights from peers, not storage

New workers get weights from GPUs that already have them, over NIXL. Storage is read once per cluster.

  • 1
    Read storage onceone seed per cluster, storage as fallback
  • 2
    Peer to peerGPU → GPU over NIXL / RDMA
  • 3
    Fan outevery new worker becomes a source
storageread onceseed GPUfirst replicaslow · from storagenew worker 1GPU weightsnew worker 2GPU weightsnew worker 3GPU weightsGPU → GPU · NIXL / RDMA123
Performance

AIPerf: benchmark any endpoint

Load-tests any inference endpoint with realistic traffic and reports the metrics that set your SLA.

  • 1
    Real workloadssynthetic, ShareGPT, production and agentic-trace replay
  • 2
    Realistic loadconcurrency, request rate, arrivals, multi-turn sessions
  • 3
    SLA-grade metricsTTFT, ITL, goodput at p50/p99, plus Pareto sweeps
$ aiperf profile --model Qwen3-0.6B \--endpoint-type chat --streaming \--request-rate 32 --goodput "ttft:300"NVIDIA AIPerf | LLM MetricsMetricavgp50p99Time to First Token (ms)234.6231.1289.3Inter Token Latency (ms)15.715.519.0Request Latency (ms)1,234.61,223.51,534.2Output Tokens / request150149179Request Throughput (req/s)31.45Goodput (req/s)29.80→ artifacts/…/profile_export_aiperf.{json,csv}aiperf plot · Paretotok/s/user →tok/s/GPUconfig Bconfig A123
Performance

AISim: test deployments without GPUs

Simulates Dynamo and the engine on measured GPU timing: compare deployments before spending GPU hours.

  • 1
    Two layersDynamo router + planner over vLLM, SGLang or TRT-LLM
  • 2
    Predictreplay a trace, get every request's latency
  • 3
    Recommendfewest GPUs that meet the SLA
workloadDynamooptionalKV routerPlanner ±workerworkerworker+ workerEnginevLLMSGLangTRT-LLMbatchesKV cachereused prefixactive→ hostmeasured GPU timing · A100 → GB300Predictreplay a tracetraceAISimlatencywhat-if · validate sizingRecommendsearch configsTP · batch · replicas · disaggbest configmin GPUs at SLA123
Performance

AITune: the fastest backend for every module

No-code tuning for PyTorch: picks the fastest validated backend for every module in your model or pipeline.

  • 1
    Inspectfinds tunable modules in any PyTorch model or pipeline
  • 2
    Tune each moduletries TensorRT, Torch-TRT, Inductor, ONNX Runtime; keeps the fastest that matches outputs
  • 3
    Run or deployjust-in-time with one env var, or a saved .ait for Triton and Dynamo
PyTorchmodel + inputsInspectfind tunablenn.Modules+ wrapTuneeach moduleTensorRT✓Torch-TRTTorch InductorONNX RuntimeTorch eagerspeed on your inputs →✓ validate outputs · ⏱ measure+ PTQ · kernels · CUDA graphs*.aittuned artifactPythonTritonDynamo123
~300 public models · mean speedup vs Torch eagerdiffusion · NLP · vision · ASR · recommenders, from Transformers, Diffusers, timm, MONAI, NeMo
1.85× faster
Internal benchmark gray = before · green = with DynamoDeep dive: aitune.html →
Putting it together

Use cases with their own deep dives

Get started

Try it, build on it, talk to us

# one-line install, then serve
pip install "ai-dynamo[vllm]"
python3 -m dynamo.frontend --router-mode kv &
python3 -m dynamo.vllm --model Qwen/Qwen3-0.6B

Speaker notes

← → step · N notes · F fullscreen