vLLM

View as Markdown

Dynamo vLLM integrates vLLM engines into Dynamo’s distributed runtime, enabling disaggregated serving, KV-aware routing, and request cancellation while maintaining full compatibility with vLLM’s native engine arguments. Dynamo leverages vLLM’s native KV cache events, NIXL-based transfer mechanisms, and metric reporting to enable KV-aware routing and P/D disaggregation.

Experimental Sidecar

The experimental sidecar path runs the Dynamo worker outside vLLM and connects through vLLM’s native gRPC API. It keeps vLLM’s native server and argument surface while separating Dynamo and engine dependencies. See vLLM Sidecar for current readiness and launch examples.

Installation

Install Latest Release

We recommend using uv to install:

$uv venv --python 3.12 --seed
$uv pip install "ai-dynamo[vllm]"

This installs Dynamo with the compatible vLLM version.


Container

We have public images available on NGC Catalog:

$docker pull nvcr.io/nvidia/ai-dynamo/vllm-runtime:<version>
$./container/run.sh -it --framework VLLM --image nvcr.io/nvidia/ai-dynamo/vllm-runtime:<version>
$python container/render.py --framework vllm --output-short-filename
$docker build -f container/rendered.Dockerfile -t dynamo:latest-vllm .
$./container/run.sh -it --framework VLLM [--mount-workspace]

Development Setup

For development, use the devcontainer which has all dependencies pre-installed.

Feature Support Matrix

FeatureStatusNotes
Disaggregated ServingPrefill/decode separation with NIXL KV transfer
KV-Aware Routing
SLA-Based Planner
KVBM
LMCacheCUDA 12.9 and arm64/aarch64 containers may require building LMCache from source
FlexKVRequires a separate FlexKV build
Multimodal SupportVia vLLM-Omni integration
ObservabilityMetrics and monitoring
WideEPSupport for DeepEP
DP Rank RoutingHybrid load balancing via external DP rank control
LoRADynamic loading/unloading from S3-compatible storage
GB200 SupportContainer functional on main

Feature Interactions

vLLM offers the broadest feature coverage in Dynamo, with full support for disaggregated serving, KV-aware routing, KV block management, LoRA adapters, and multimodal inference including video and audio. The matrix below shows which feature pairs are validated to work together.

Legend: ✅ Supported  |  🚧 Work in Progress / Experimental / Limited

FeatureDisaggregated ServingKV-Aware RoutingSLA-Based PlannerKV Block ManagerMultimodalRequest MigrationRequest CancellationLoRATool CallingSpeculative Decoding
Disaggregated Serving
KV-Aware Routing
SLA-Based Planner
KV Block Manager
Multimodal1
Request Migration
Request Cancellation
LoRA2
Tool Calling
Speculative Decoding

Notes:

  1. Multimodal + KV-Aware Routing: Image-aware KV routing is supported in the documented vLLM paths. The default Rust frontend path supports model families handled by llm-multimodal; the Python chat-processor path delegates to vLLM’s multimodal processor. (Source)
  2. KV-Aware LoRA Routing: vLLM supports routing requests based on LoRA adapter affinity.
  3. Audio Support: vLLM supports audio models like Qwen2-Audio (experimental). (Source)
  4. Video Support: vLLM supports video input with frame sampling. (Source)
  5. Speculative Decoding: Eagle3 support documented. (Source)

Quick Start

Start infrastructure services for local development:

$docker compose -f dev/docker-compose.yml up -d

Launch an aggregated serving deployment:

$cd $DYNAMO_HOME/examples/backends/vllm
$bash launch/agg.sh

Running launch scripts standalone. The launch/*.sh scripts expect etcd and NATS to be reachable on localhost. Bring them up first (run from the repo root, or use the absolute path shown):

$docker compose -f "$DYNAMO_HOME/dev/docker-compose.yml" up -d

Then run the launch script. Without these, workers register but the frontend cannot discover them and requests hang.

Next Steps