dynamo

App Listed

A Datacenter Scale Distributed Inference Serving Framework

Downloads
6,860
Dependents
Not applicable
Stars
8,457
Forks
1,829
Contributors
429
Commits
8,510
Latest release
1.6.2 ·

About

From the project README ·

Dynamo banner

| Docs | Roadmap | Recipes | Examples | Containers | Digest | Design Proposals | How to Contribute | Slack |

English | 简体中文

The open-source, datacenter-scale inference stack. Dynamo is the orchestration layer above inference engines — it doesn't replace SGLang, TensorRT-LLM, or vLLM, it turns them into a coordinated multi-node inference system. Disaggregated serving, intelligent routing, multi-tier KV caching, and automatic scaling work together to maximize throughput and minimize latency for LLM, reasoning, multimodal, and video generation workloads.

Built in Rust for performance, Python for extensibility.

Community Events

DateEventLocation
Thu, Nov 12, 2026SIG Frontend — Biweekly Sync–
Thu, Nov 12, 2026SIG Engines — Biweekly Sync–
Thu, Nov 19, 2026SIG Router–
Thu, Nov 5, 2026Dynamo SIG RL–
Thu, Nov 5, 2026SIG Router–

Events are updated automatically. Subscribe to our public calendar.

Read the full README

When to use Dynamo

  • You're serving LLMs across multiple GPUs or nodes and need to coordinate them
  • You want KV-aware routing to avoid redundant prefill computation
  • You need to independently scale prefill and decode (disaggregated serving)
  • You want automatic scaling that meets latency SLAs at minimum total cost of ownership (TCO)
  • You need fast cold-starts when spinning up new replicas

If you're running a single model on a single GPU, your inference engine alone is probably sufficient.

Feature support at a glance:

Full Feature Matrix → — LoRA, request migration, speculative decoding, and feature interactions.

Key Results

ResultContext
7x higher throughput per GPUDeepSeek R1 on GB200 NVL72 w/ Dynamo vs B200 without (InferenceX)
7x faster model startupModelExpress weight streaming (DeepSeek-V3 on H200)
2x faster time to first tokenKV-aware routing, Qwen3-Coder 480B (Baseten benchmark)
80% fewer SLA breachesPlanner autoscaling at 5% lower TCO (Alibaba APSARA 2025 @ 2:50:00)
750x higher throughputDeepSeek-R1 on GB300 NVL72 (InferenceXv2)

What Dynamo Does

Most inference engines optimize a single GPU or a single node. Dynamo is the orchestration layer above them — it turns a cluster of GPUs into a coordinated inference system.

Dynamo architecture overview

Architecture Deep Dive →

Core Capabilities
CapabilityWhat it doesWhy it matters
Disaggregated Prefill/DecodeSeparates prefill and decode into independently scalable GPU poolsMaximizes GPU utilization; each phase runs on hardware tuned for its workload
KV-Aware RoutingRoutes requests based on worker load and KV cache overlapEliminates redundant prefill computation — 2x faster TTFT
KV Block Manager (KVBM)Offloads KV cache across GPU → CPU → SSD → remote storageExtends effective context length beyond GPU memory
ModelExpressStreams model weights GPU-to-GPU via NIXL/NVLink7x faster cold-start for new replicas
PlannerSLA-driven autoscaler that profiles workloads and right-sizes poolsMeets latency targets at minimum total cost of ownership (TCO)
GroveK8s operator for topology-aware gang scheduling (NVL72)Places workloads optimally across racks, hosts, and NUMA nodes
AISimulatePredicts serving behavior and searches deployment configurations offlineFinds a strong serving configuration without bringing up a GPU cluster
Fault ToleranceCanary health checks + in-flight request migrationWorkers fail; user requests don't
New in 1.0
  • Zero-config deploy (DGDR) (beta): Specify model, HW, and SLA in one YAML — AISimulate performance models estimate candidate configurations, Planner optimizes the topology, and Dynamo deploys
  • Agentic inference: Per-request hints for priority, expected output length, and speculative prefill, plus session metadata for tracing and SGLang subagent KV isolation. LangChain + NeMo Agent Toolkit integrations
  • Multimodal E/P/D: Disaggregated encode/prefill/decode with embedding cache — 30% faster TTFT on image workloads
  • Video generation: Native FastVideo + SGLang Diffusion support — real-time 1080p on single B200
  • K8s Inference Gateway plugin: KV-aware routing inside the standard Kubernetes gateway
  • Storage-tier KV offload: S3/Azure blob support + global KV events for cluster-wide cache visibility

Request Routing Topologies

Dynamo can expose traffic through two Kubernetes request routing topologies. Both expose an OpenAI-compatible API and support the same backends, disaggregated serving, and KV-aware routing.

TopologyWhat it isWhen to use
Dynamo-native Frontend routingThe Dynamo Frontend serves HTTP and the integrated Dynamo Router makes worker-selection decisions. No external gateway is required.Local development, single-cluster deployments, and environments where Dynamo should own the request entry point end to end.
Gateway API routing with GAIEA Kubernetes Gateway API Inference Extension gateway calls the Dynamo Endpoint Picker Plugin (EPP) before forwarding to the selected worker's Frontend sidecar in --router-mode direct.Kubernetes platforms that standardize on Gateway API, or deployments where gateway-level policy, auth, rate limiting, and observability should sit at the cluster edge.

Request flow for the Dynamo-native path is client → Frontend → Router → workers. Request flow for the Gateway API path is client → Gateway → EPP → Frontend sidecar (direct) → workers.

See the Gateway API Inference Extension (GAIE) guide for the Gateway API setup, supported features, and configuration.

Quick Start

This repo ships agent skills: if you work with an AI coding agent (Claude Code, Codex, Cursor), clone the repo and ask it to deploy, troubleshoot, benchmark, or optimize a Dynamo deployment. The skills activate automatically; no setup required.

Option A: Container (fastest)

Choose either vLLM or SGLang:

vLLM
# Pull a prebuilt container
docker run --gpus all --network host --rm -it nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.6.0

# Inside the container — start frontend and worker
python3 -m dynamo.frontend --http-port 8000 --discovery-backend file > /dev/null 2>&1 &
python3 -m dynamo.vllm --model Qwen/Qwen3-0.6B --discovery-backend file &

# Once the worker is ready, send a request
curl -s localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
  "model": "Qwen/Qwen3-0.6B",
  "messages": [{"role": "user", "content": "Hello!"}],
  "max_tokens": 100
}' | jq
SGLang
# Pull a prebuilt container
docker run --gpus all --network host --rm -it nvcr.io/nvidia/ai-dynamo/sglang-runtime:1.6.0

# Inside the container — start frontend and worker
python3 -m dynamo.frontend --http-port 8000 --discovery-backend file > /dev/null 2>&1 &
python3 -m dynamo.sglang --model-path Qwen/Qwen3-0.6B --discovery-backend file &

# Once the worker is ready, send a request
curl -s localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
  "model": "Qwen/Qwen3-0.6B",
  "messages": [{"role": "user", "content": "Hello!"}],
  "max_tokens": 100
}' | jq

Also available: tensorrtllm-runtime:1.6.0.

Option B: Install from PyPI

Install uv (curl -LsSf https://astral.sh/uv/install.sh | sh), then choose your backend:

vLLM
uv pip install --prerelease=allow "ai-dynamo[vllm]"
SGLang
uv pip install --prerelease=allow "ai-dynamo[sglang]"

Note: TensorRT-LLM requires pip with --extra-index-url https://pypi.nvidia.com. See the install guide for TRT-LLM-specific instructions.

Then start the frontend and the matching worker as shown above. See the full installation guide for system dependencies and backend-specific notes.

Option C: Kubernetes (recommended)

For production multi-node clusters, install the Dynamo Platform and deploy with a single manifest:

# Zero-config deploy: specify model + SLA, Dynamo handles the rest
apiVersion: nvidia.com/v1beta1
kind: DynamoGraphDeploymentRequest
metadata:
  name: my-model
spec:
  model: Qwen/Qwen3-0.6B
  backend: vllm
  sla:
    ttft: 200.0   # ms
    itl: 20.0     # ms
  autoApply: true

Pre-built recipes for common models:

ModelFrameworkModeRecipe
Qwen3-32B-FP8TensorRT-LLMAggregatedView
DeepSeek-R1SGLangDisaggregatedView
Kimi-K3vLLMAggregatedView

See recipes/ for the full list. Cloud-specific guides: AWS EKS · Google GKE · Azure AKS · Amazon ECS

Building from Source

For contributors who want to build and develop locally. See the full build guide for details.

# Install system deps (Ubuntu 24.04)
sudo apt install -y build-essential libhwloc-dev libudev-dev pkg-config libclang-dev protobuf-compiler python3-dev cmake

# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh && source $HOME/.cargo/env

# Create venv and build
uv venv dynamo && source dynamo/bin/activate
uv pip install pip 'maturin[patchelf]'
cd lib/bindings/python && maturin develop --uv && cd $PROJECT_ROOT
uv pip install -e lib/gpu_memory_service
uv pip install -e .

VSCode/Cursor users: see the .devcontainer for a pre-configured dev environment.

Community and Contributing

Dynamo is built in the open with an OSS-first development model. We welcome contributions of all kinds.

Latest News

Older news

Dynamo provides comprehensive benchmarking tools:

Frontend OpenAPI Specification

The OpenAI-compatible frontend exposes an OpenAPI 3 spec at /openapi.json. To generate without running the server:

cargo run -p dynamo-llm --bin generate-frontend-openapi

This writes to docs/reference/api/openapi.json.

Service Discovery and Messaging

Dynamo uses TCP for inter-component communication. On Kubernetes, native resources (CRDs + EndpointSlices) handle service discovery. External services are optional for most deployments:

DeploymentetcdNATSNotes
Local Development❌ Not required❌ Not requiredPass --discovery-backend file; vLLM also needs --kv-events-config '{"enable_kv_cache_events": false}'
Kubernetes❌ Not required❌ Not requiredK8s-native discovery; TCP request plane

Note: KV-aware routing does not require NATS. Enable KV events when you need event-backed cache-state tracking, or use --no-router-kv-events for prediction-based routing without external event infrastructure.

For Slurm or other distributed deployments that choose etcd or NATS JetStream-backed modes:

  • etcd can be run directly as ./etcd.
  • nats needs JetStream enabled: nats-server -js.

To quickly setup both: docker compose -f dev/docker-compose.yml up -d

More News

Reference

Runs on
CUDA
What shows it
  • CUDA: dynamo-llm feature cuda (dependency cudarc), dynamo-memory dependency cudarc, kvbm-engine feature nccl (dependency cudarc), kvbm-kernels dependency cudarc, kvbm-physical dependency cudarc
Native code
Required
  • Binds native code: k8s-openapi, nixl-sys, pcre2-sys, ring, zmq-sys and 2 more
Python bindings
No Python binding crate found
License
Apache-2.0

Compare with similar projects

Order: strongest tier first, then most downloads, then name, with unmeasured values last. A library counts downloads over 30 days. An app counts binary downloads per release. An app with none counts its crate downloads over 30 days. ML Rust runs this catalogue, so its closest project always gets a row.

dynamo beside the projects that share a topic with it
ProjectDownloadsDependentsStarsLatest releaseRuns on (GPU)Native codeLicense
dynamo This page App Listed

A Datacenter Scale Distributed Inference Serving Framework

6,860 downloads over 30 days Not applicable 8,457 1.6.2 CUDA Binds native code: k8s-openapi, nixl-sys, pcre2-sys, ring, zmq-sys and 2 more Apache-2.0
mistralrs App Featured

Fast, flexible LLM inference.

Python bindings

Also in Build LLM apps and agents.

1,498 binary downloads per release Not applicable 7,819 0.8.1 CUDA, Metal Binds native code: accelerate-src (feature accelerate-src), intel-mkl-src (feature intel-mkl-src) MIT
llama-gguf Listed

A high-performance Rust implementation of llama.cpp - LLM inference engine with full GGUF support

Also in Build LLM apps and agents.

1,787 downloads over 30 days 3 21 0.14.0 CUDA, Metal, Vulkan Binds native code: hailort-sys (feature hailo), libsqlite3-sys (feature rag-sqlite) Apache-2.0 OR MIT
candle-vllm App Listed

Efficent platform for inference and serving local LLMs including an OpenAI compatible API server.

Also in Build LLM apps and agents.

138 binary downloads per release Not applicable 739 Not measured Not measured MIT
cake Listed

Distributed LLM inference for mobile, desktop and server.

Also in Run and serve models.

22 downloads over 30 days 0 3,131 0.1.0 CUDA, Metal No native code found GPL-3.0
blazr App Listed

Inference server for LLMs, speech and embeddings: OpenAI-compatible routes with streaming, plus speech synthesis (TTS) and transcription (ASR). Serves Llama, Mistral, Qwen, Mamba2, MLA+MoE and hybrid models from SafeTensors, AWQ, GPTQ and GGUF.

Also in Build LLM apps and agents.

8 binary downloads per release Not applicable 7 0.7.1 CUDA, WebGPU Binds native code: ring (feature distributed) Apache-2.0
mosec App Listed

A high-performance ML model serving framework, offers dynamic batching and CPU/GPU pipelines to fully exploit your compute machine

Also in Run and serve models.

1 downloads over 30 days Not applicable 903 0.9.0 GPU support unknown No native code found Apache-2.0
Why ListedNo archive, New or Featured rule places it, so it is Listed.

What it lacks for Featured

  • The check holds no value for Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days. A gate that lacks its signal does not pass.

What else the check found

  • The last activity is on 8 Nov 2026, 1 day ago. The rules expect an update within 365 days. Dormancy rule

Not measured: Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days.

Exact rules: Listed, Featured app. The check on applied thresholds version 9.

Every rule outcome, as the check records it
  • expected-interval: app: E = 365 days
  • dormancy: last activity 2026-11-08, 1 days ago, E = 365: active
  • featured: not featured: unknown homebrew_on_request_365d, repology_families, docker_pull_growth_90d
  • listed: listed: no archive, new or featured rule applies
Crates26 crates

Measurements and sources

Each signal row shows the raw value, its source and the fetch date. The Sources list gathers every distinct source on this page. Movement needs more history.

Sources6 sources
Adoption0 binary downloads per release4 not measured
Adoption measurements
SignalValueSourceFetchedCounts
Active dependentsNot measuredYes
New dependents (365 days)Not measuredYes
Peak active dependentsNot measuredYes
Active dependents as a share of the peakNot measuredYes
Binary downloads per release0GitHub releasesYes
MaintenanceLatest human commit: 1 day ago4 not measured
Maintenance measurements
SignalValueSourceFetchedCounts
Latest human commit2026-11-08GitHub repositoryYes
Latest release2026-11-06GitHub releasesYes
First release2025-03-12crates.io database dumpYes
Latest version1.6.2crates.io database dumpNo
Days the oldest outside issue waits for a reply4GitHub repositoryYes
Maintainer replies over 365 days34GitHub repositoryYes
Repository archivedfalseGitHub repositoryYes
Repository gonefalseGitHub repositoryYes
Release commit or manifest in the repotruecrates.io packageNo
Published docsNot measuredYes
Latest release fails cargo checkNot measuredYes
Build check dateNot measuredYes
Build check toolchainNot measuredYes
SecurityNot measured
Security measurements
SignalValueSourceFetchedCounts
Unpatched vulnerabilities past the grace windowNot measuredYes
RustSec unmaintained advisoryNot measuredYes
Deprecation noticeNot measuredYes
Deprecated requirementNot measuredYes
Distribution9 releases, 6,860 downloads over 30 days6 not measured
Distribution measurements
SignalValueSourceFetchedCounts
Releases9crates.io database dumpNo
Downloads over 30 days6860crates.io database dumpNo
Binary downloads over the last 3 releases0GitHub releasesYes
Homebrew installs on request over 365 daysNot measuredYes
Repology repository familiesNot measuredYes
Docker pull growth over 90 daysNot measuredYes
Docker pulls at the growth baselineNot measuredYes
Every version a prereleasefalsecrates.io database dumpYes
Every version 0.0.xfalsecrates.io database dumpYes
Every version yankedNot measuredYes
Crate deleted from crates.ioNot measuredYes
Repository8,457 stars, 1,829 forks, 429 contributors, 8,510 commits. Stars alone never qualify a project.
Repository measurements
SignalValueSourceFetchedCounts
GitHub stars8457GitHub repositoryYes — one part of the repository route
GitHub forks1829GitHub repositoryYes — one part of the repository route
Contributors with a GitHub account429GitHub contributorsYes — one part of the repository route
Commits on the default branch8510GitHub repositoryNo
Repository's main crate left out of the entrynonecrates.io database dumpYes
Facts that never count
Facts that never count measurements
SignalValueSourceFetchedCounts
LicenseApache-2.0crates.io database dumpNo
Runs on, from listed crates and their direct dependenciesCUDAcrates.io database dumpNo
What shows each backendCUDA: dynamo-llm feature cuda (dependency cudarc), dynamo-memory dependency cudarc, kvbm-engine feature nccl (dependency cudarc), kvbm-kernels dependency cudarc, kvbm-physical dependency cudarccrates.io database dumpNo
Native code, from listed crates and their dependenciesBinds native code: k8s-openapi, nixl-sys, pcre2-sys, ring, zmq-sys and 2 morecrates.io database dumpNo
Python bindings, from direct dependencies of listed cratesNo Python binding crate foundcrates.io database dumpNo
Crates that depend on a listed crate directlyNot measuredNo

Corrections and review history

Report a correction

No correction applies to this entry.

Judgments

A judgment enters only through an approved issue and a merged pull request.

No judgment applies to this entry.