vLLM Deployment Templates
Ready-to-apply DynamoGraphDeployment manifests for serving vLLM with Dynamo on Kubernetes.
Copy-paste DynamoGraphDeployment (nvidia.com/v1alpha1) manifests for the vLLM backend, grouped by
topology. Each manifest is embedded from
examples/backends/vllm/deploy/
— open an entry, use the copy button, then set your image tag and hf-token-secret before applying.
Apply any template with:
$ kubectl apply -f agg.yaml
A few templates bundle a second resource (a ResourceClaimTemplate for Dynamic Resource Allocation).
Apply the whole file — both documents are part of the example.
Aggregated
agg.yaml · Baseline aggregated serving
agg.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: nvidia.com/v1alpha1 5 kind: DynamoGraphDeployment 6 metadata: 7 name: vllm-agg 8 spec: 9 services: 10 Frontend: 11 envFromSecret: hf-token-secret 12 componentType: frontend 13 replicas: 1 14 extraPodSpec: 15 mainContainer: 16 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 17 VllmDecodeWorker: 18 envFromSecret: hf-token-secret 19 componentType: worker 20 replicas: 1 21 resources: 22 limits: 23 gpu: "1" 24 requests: 25 custom: 26 # Increase this value for larger models 27 ephemeral-storage: "2Gi" 28 extraPodSpec: 29 mainContainer: 30 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 31 workingDir: /workspace/examples/backends/vllm 32 command: 33 - python3 34 - -m 35 - dynamo.vllm 36 args: 37 - --model 38 - Qwen/Qwen3-0.6B
agg_router.yaml · Aggregated with KV-aware routing
agg_router.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: nvidia.com/v1alpha1 5 kind: DynamoGraphDeployment 6 metadata: 7 name: vllm-agg-router 8 spec: 9 services: 10 Frontend: 11 componentType: frontend 12 replicas: 1 13 extraPodSpec: 14 mainContainer: 15 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 16 envs: 17 - name: DYN_ROUTER_MODE 18 value: kv 19 VllmDecodeWorker: 20 envFromSecret: hf-token-secret 21 componentType: worker 22 replicas: 2 23 resources: 24 limits: 25 gpu: "1" 26 requests: 27 custom: 28 # Increase this value for larger models 29 ephemeral-storage: "2Gi" 30 extraPodSpec: 31 mainContainer: 32 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 33 workingDir: /workspace/examples/backends/vllm 34 command: 35 - python3 36 - -m 37 - dynamo.vllm 38 args: 39 - --model 40 - Qwen/Qwen3-0.6B 41 - --kv-events-config 42 - '{"publisher":"zmq","topic":"kv-events","endpoint":"tcp://*:20080","enable_kv_cache_events":true}'
agg_router_kv_approx.yaml · KV routing with approximate cache tracking (no NATS/KV events)
agg_router_kv_approx.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 ## This example demonstrates KV-aware routing with the --no-kv-events flag. 5 ## Instead of receiving KV events from workers, the router predicts cache state 6 ## locally based on routing decisions with TTL-based expiration and pruning. 7 ## Note: This mode does not require NATS during Dynamo platform deployment. 8 apiVersion: nvidia.com/v1alpha1 9 kind: DynamoGraphDeployment 10 metadata: 11 name: vllm-agg-router-kv-approx 12 spec: 13 services: 14 Frontend: 15 componentType: frontend 16 replicas: 1 17 extraPodSpec: 18 mainContainer: 19 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 20 command: 21 - python3 22 args: 23 - -m 24 - dynamo.frontend 25 - --router-mode 26 - kv 27 - --no-kv-events 28 envs: 29 - name: DYN_ROUTER_MODE 30 value: kv 31 VllmDecodeWorker: 32 envFromSecret: hf-token-secret 33 componentType: worker 34 replicas: 2 35 resources: 36 limits: 37 gpu: "1" 38 extraPodSpec: 39 mainContainer: 40 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 41 workingDir: /workspace/examples/backends/vllm 42 command: 43 - python3 44 - -m 45 - dynamo.vllm 46 args: 47 - --model 48 - Qwen/Qwen3-0.6B 49 - --kv-events-config 50 - '{"enable_kv_cache_events": false}'
agg_kvbm.yaml · Aggregated with KV Block Manager offloading
agg_kvbm.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: nvidia.com/v1alpha1 5 kind: DynamoGraphDeployment 6 metadata: 7 name: vllm-agg-kvbm 8 spec: 9 services: 10 Frontend: 11 componentType: frontend 12 replicas: 1 13 extraPodSpec: 14 mainContainer: 15 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 16 VllmDecodeWorker: 17 envFromSecret: hf-token-secret 18 componentType: worker 19 replicas: 1 20 resources: 21 requests: 22 gpu: "1" 23 memory: "200Gi" 24 limits: 25 gpu: "1" 26 memory: "250Gi" 27 envs: 28 - name: DYN_KVBM_CPU_CACHE_GB 29 value: "100" 30 extraPodSpec: 31 mainContainer: 32 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 33 workingDir: /workspace/examples/backends/vllm 34 command: 35 - python3 36 - -m 37 - dynamo.vllm 38 args: 39 - --model 40 - Qwen/Qwen3-8B 41 - --max-model-len 42 - "32000" 43 - --enforce-eager 44 - --kv-transfer-config 45 - '{"kv_connector":"DynamoConnector","kv_connector_module_path":"kvbm.vllm_integration.connector","kv_role":"kv_both"}'
agg_gms.yaml · Aggregated with GPU Memory Service sidecar
agg_gms.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 # 4 # GPU Memory Service (GMS) sidecar example. 5 # 6 # The operator injects a GMS sidecar init container that provides shared GPU 7 # memory access via DRA (Dynamic Resource Allocation). The sidecar runs two GMS 8 # processes per GPU (weights + kv_cache) and communicates with the main container 9 # over UDS sockets on a shared emptyDir volume. 10 # 11 # Requires Kubernetes 1.34+ with DRA v1 enabled and the NVIDIA GPU DRA driver installed. 12 13 apiVersion: nvidia.com/v1alpha1 14 kind: DynamoGraphDeployment 15 metadata: 16 name: vllm-agg-gms 17 spec: 18 services: 19 Frontend: 20 envFromSecret: hf-token-secret 21 componentType: frontend 22 replicas: 1 23 extraPodSpec: 24 mainContainer: 25 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 26 VllmWorker: 27 envFromSecret: hf-token-secret 28 componentType: worker 29 replicas: 1 30 resources: 31 limits: 32 gpu: "1" 33 requests: 34 custom: 35 ephemeral-storage: "2Gi" 36 gpuMemoryService: 37 enabled: true 38 extraPodSpec: 39 mainContainer: 40 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 41 workingDir: /workspace/examples/backends/vllm 42 command: 43 - python3 44 - -m 45 - dynamo.vllm 46 args: 47 - --model 48 - Qwen/Qwen3-0.6B 49 - --load-format 50 - gms
agg_failover.yaml · Active-passive GPU failover
agg_failover.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 # 4 # Active-passive GPU failover example. 5 # 6 # The operator clones the worker's main container into two engine containers 7 # (engine-0 active, engine-1 standby) sharing GPUs via DRA and the GMS sidecar. 8 # When the active engine fails, the standby acquires the flock and takes over. 9 # 10 # Requires: 11 # - gpuMemoryService.enabled: true (GMS sidecar + DRA) 12 # - nvidia.com/dynamo-kube-discovery-mode: container (per-container K8s discovery) 13 # - Kubernetes 1.34+ with DRA v1 enabled and the NVIDIA GPU DRA driver installed 14 15 apiVersion: nvidia.com/v1alpha1 16 kind: DynamoGraphDeployment 17 metadata: 18 name: vllm-agg-failover 19 annotations: 20 nvidia.com/dynamo-kube-discovery-mode: container 21 spec: 22 services: 23 Frontend: 24 envFromSecret: hf-token-secret 25 componentType: frontend 26 replicas: 1 27 extraPodSpec: 28 mainContainer: 29 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 30 VllmWorker: 31 envFromSecret: hf-token-secret 32 componentType: worker 33 replicas: 1 34 resources: 35 limits: 36 gpu: "2" 37 requests: 38 custom: 39 ephemeral-storage: "2Gi" 40 gpuMemoryService: 41 enabled: true 42 failover: 43 enabled: true 44 extraPodSpec: 45 mainContainer: 46 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 47 workingDir: /workspace/examples/backends/vllm 48 command: 49 - python3 50 - -m 51 - dynamo.vllm 52 args: 53 - --model 54 - Qwen/Qwen3-0.6B 55 - --tensor-parallel-size 56 - "2" 57 - --load-format 58 - gms
agg_tracing.yaml · Aggregated with OpenTelemetry tracing
agg_tracing.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 # Aggregated vLLM deployment with OpenTelemetry tracing enabled. 5 # Base deployment: agg.yaml 6 # See docs/observability/tracing.md for setup instructions. 7 8 apiVersion: nvidia.com/v1alpha1 9 kind: DynamoGraphDeployment 10 metadata: 11 name: vllm-agg-tracing 12 spec: 13 envs: 14 - name: DYN_LOGGING_JSONL 15 value: "true" 16 - name: OTEL_EXPORT_ENABLED 17 value: "true" 18 - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT 19 value: "http://tempo.observability.svc.cluster.local:4317" 20 services: 21 Frontend: 22 envFromSecret: hf-token-secret 23 componentType: frontend 24 replicas: 1 25 extraPodSpec: 26 mainContainer: 27 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 28 env: 29 - name: OTEL_SERVICE_NAME 30 value: "dynamo-frontend" 31 VllmDecodeWorker: 32 envFromSecret: hf-token-secret 33 componentType: worker 34 replicas: 1 35 resources: 36 limits: 37 gpu: "1" 38 requests: 39 custom: 40 # Increase this value for larger models 41 ephemeral-storage: "2Gi" 42 extraPodSpec: 43 mainContainer: 44 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 45 workingDir: /workspace/examples/backends/vllm 46 command: 47 - python3 48 - -m 49 - dynamo.vllm 50 args: 51 - --model 52 - Qwen/Qwen3-0.6B 53 env: 54 - name: OTEL_SERVICE_NAME 55 value: "dynamo-worker-vllm"
agg_xpu_dra.yaml · Aggregated with Dynamic Resource Allocation (bundles a ResourceClaimTemplate)
agg_xpu_dra.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: resource.k8s.io/v1 5 kind: ResourceClaimTemplate 6 metadata: 7 name: gpu-template 8 spec: 9 spec: 10 devices: 11 requests: 12 - name: gpu 13 exactly: 14 deviceClassName: gpu.intel.com 15 count: 1 16 --- 17 apiVersion: nvidia.com/v1alpha1 18 kind: DynamoGraphDeployment 19 metadata: 20 name: vllm-agg-xpu-dra 21 spec: 22 services: 23 Frontend: 24 envFromSecret: hf-token-secret 25 componentType: frontend 26 replicas: 1 27 extraPodSpec: 28 mainContainer: 29 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 30 VllmDecodeWorker: 31 envFromSecret: hf-token-secret 32 componentType: worker 33 replicas: 1 34 resources: 35 requests: 36 custom: 37 # Increase this value for larger models 38 ephemeral-storage: "2Gi" 39 extraPodSpec: 40 resourceClaims: 41 - name: gpu 42 resourceClaimTemplateName: gpu-template 43 # NOTE: Uncomment if your environment requires specific group access 44 # securityContext: 45 # runAsUser: 1000 46 # runAsGroup: 1000 47 # supplementalGroups: 48 # - 44 # render group 49 # - 991 # video group 50 mainContainer: 51 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime-xpu:my-tag 52 resources: 53 claims: 54 - name: gpu 55 env: 56 - name: VLLM_TARGET_DEVICE 57 value: xpu 58 workingDir: /workspace/examples/backends/vllm 59 command: 60 - python3 61 - -m 62 - dynamo.vllm 63 args: 64 - --model 65 - Qwen/Qwen3-0.6B 66 - --block-size 67 - "64"
Disaggregated
disagg.yaml · Baseline disaggregated prefill/decode
disagg.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: nvidia.com/v1alpha1 5 kind: DynamoGraphDeployment 6 metadata: 7 name: vllm-disagg 8 spec: 9 services: 10 Frontend: 11 componentType: frontend 12 replicas: 1 13 extraPodSpec: 14 mainContainer: 15 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 16 VllmDecodeWorker: 17 envFromSecret: hf-token-secret 18 componentType: worker 19 subComponentType: decode 20 replicas: 1 21 resources: 22 limits: 23 gpu: "1" 24 requests: 25 custom: 26 # Increase this value for larger models 27 ephemeral-storage: "2Gi" 28 extraPodSpec: 29 mainContainer: 30 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 31 workingDir: /workspace/examples/backends/vllm 32 command: 33 - python3 34 - -m 35 - dynamo.vllm 36 args: 37 - --model 38 - Qwen/Qwen3-0.6B 39 - --disaggregation-mode 40 - decode 41 VllmPrefillWorker: 42 envFromSecret: hf-token-secret 43 componentType: worker 44 subComponentType: prefill 45 replicas: 1 46 resources: 47 limits: 48 gpu: "1" 49 requests: 50 custom: 51 # Increase this value for larger models 52 ephemeral-storage: "2Gi" 53 extraPodSpec: 54 mainContainer: 55 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 56 workingDir: /workspace/examples/backends/vllm 57 command: 58 - python3 59 - -m 60 - dynamo.vllm 61 args: 62 - --model 63 - Qwen/Qwen3-0.6B 64 - --disaggregation-mode 65 - prefill 66 - --kv-transfer-config 67 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
disagg_router.yaml · Disaggregated with KV-aware routing
disagg_router.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: nvidia.com/v1alpha1 5 kind: DynamoGraphDeployment 6 metadata: 7 name: vllm-v1-disagg-router 8 spec: 9 services: 10 Frontend: 11 componentType: frontend 12 replicas: 1 13 extraPodSpec: 14 mainContainer: 15 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 16 envs: 17 - name: DYN_ROUTER_MODE 18 value: kv 19 VllmDecodeWorker: 20 envFromSecret: hf-token-secret 21 componentType: worker 22 replicas: 2 23 resources: 24 limits: 25 gpu: "1" 26 requests: 27 custom: 28 # Increase this value for larger models 29 ephemeral-storage: "2Gi" 30 extraPodSpec: 31 mainContainer: 32 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 33 workingDir: /workspace/examples/backends/vllm 34 command: 35 - python3 36 - -m 37 - dynamo.vllm 38 args: 39 - --model 40 - Qwen/Qwen3-0.6B 41 - --disaggregation-mode 42 - decode 43 VllmPrefillWorker: 44 envFromSecret: hf-token-secret 45 componentType: worker 46 replicas: 2 47 resources: 48 limits: 49 gpu: "1" 50 requests: 51 custom: 52 # Increase this value for larger models 53 ephemeral-storage: "2Gi" 54 extraPodSpec: 55 mainContainer: 56 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 57 workingDir: /workspace/examples/backends/vllm 58 command: 59 - python3 60 - -m 61 - dynamo.vllm 62 args: 63 - --model 64 - Qwen/Qwen3-0.6B 65 - --disaggregation-mode 66 - prefill 67 - --kv-transfer-config 68 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}' 69 - --kv-events-config 70 - '{"publisher":"zmq","topic":"kv-events","endpoint":"tcp://*:20080","enable_kv_cache_events":true}'
disagg_planner.yaml · Disaggregated with Dynamo Planner autoscaling
disagg_planner.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: nvidia.com/v1alpha1 5 kind: DynamoGraphDeployment 6 metadata: 7 name: vllm-disagg-planner 8 spec: 9 services: 10 Frontend: 11 componentType: frontend 12 replicas: 1 13 extraPodSpec: 14 mainContainer: 15 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 16 Planner: 17 componentType: planner 18 replicas: 1 19 extraPodSpec: 20 mainContainer: 21 # Planner image selection: 22 # Dynamo >= 1.1.0: use the dedicated planner image 23 # nvcr.io/nvidia/ai-dynamo/dynamo-planner:<version> 24 # (backend runtime images no longer ship planner runtime deps 25 # such as kubernetes_asyncio, pmdarima, prophet, aiconfigurator). 26 # Dynamo < 1.1.0: use the backend runtime image 27 # nvcr.io/nvidia/ai-dynamo/vllm-runtime:<version>. 28 image: nvcr.io/nvidia/ai-dynamo/dynamo-planner:my-tag 29 command: 30 - python3 31 - -m 32 - dynamo.planner 33 args: 34 - --config 35 - '{"environment": "kubernetes", "backend": "vllm", "optimization_target": "sla", "enable_throughput_scaling": true, "enable_load_scaling": true, "pre_deployment_sweeping_mode": "none", "throughput_adjustment_interval_seconds": 60, "load_adjustment_interval_seconds": 5}' 36 VllmDecodeWorker: 37 envFromSecret: hf-token-secret 38 componentType: worker 39 subComponentType: decode 40 replicas: 1 41 resources: 42 limits: 43 gpu: "1" 44 extraPodSpec: 45 mainContainer: 46 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 47 workingDir: /workspace/examples/backends/vllm 48 command: 49 - python3 50 args: 51 - -m 52 - dynamo.vllm 53 - --model 54 - Qwen/Qwen3-0.6B 55 VllmPrefillWorker: 56 envFromSecret: hf-token-secret 57 componentType: worker 58 subComponentType: prefill 59 replicas: 1 60 resources: 61 limits: 62 gpu: "1" 63 extraPodSpec: 64 mainContainer: 65 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 66 workingDir: /workspace/examples/backends/vllm 67 command: 68 - python3 69 args: 70 - -m 71 - dynamo.vllm 72 - --model 73 - Qwen/Qwen3-0.6B 74 - --disaggregation-mode 75 - prefill 76 - --kv-transfer-config 77 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
disagg_kvbm.yaml · Disaggregated with KV Block Manager offloading
disagg_kvbm.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: nvidia.com/v1alpha1 5 kind: DynamoGraphDeployment 6 metadata: 7 name: vllm-disagg-kvbm 8 spec: 9 services: 10 Frontend: 11 componentType: frontend 12 replicas: 1 13 extraPodSpec: 14 mainContainer: 15 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 16 VllmDecodeWorker: 17 envFromSecret: hf-token-secret 18 componentType: worker 19 replicas: 1 20 resources: 21 limits: 22 gpu: "1" 23 extraPodSpec: 24 mainContainer: 25 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 26 workingDir: /workspace/examples/backends/vllm 27 command: 28 - python3 29 - -m 30 - dynamo.vllm 31 args: 32 - --model 33 - Qwen/Qwen3-8B 34 - --disaggregation-mode 35 - decode 36 - --kv-transfer-config 37 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}' 38 - --max-model-len 39 - "32000" 40 - --enforce-eager 41 VllmPrefillWorker: 42 envFromSecret: hf-token-secret 43 componentType: worker 44 replicas: 1 45 resources: 46 requests: 47 gpu: "1" 48 memory: "200Gi" 49 limits: 50 gpu: "1" 51 memory: "250Gi" 52 envs: 53 - name: DYN_KVBM_CPU_CACHE_GB 54 value: "100" 55 extraPodSpec: 56 mainContainer: 57 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 58 workingDir: /workspace/examples/backends/vllm 59 command: 60 - python3 61 - -m 62 - dynamo.vllm 63 args: 64 - --model 65 - Qwen/Qwen3-8B 66 - --disaggregation-mode 67 - prefill 68 - --max-model-len 69 - "32000" 70 - --enforce-eager 71 - --kv-transfer-config 72 - '{"kv_connector":"PdConnector","kv_role":"kv_both","kv_connector_extra_config":{"connectors":[{"kv_connector":"DynamoConnector","kv_connector_module_path":"kvbm.vllm_integration.connector","kv_role":"kv_both"},{"kv_connector":"NixlConnector","kv_role":"kv_both"}]},"kv_connector_module_path":"kvbm.vllm_integration.connector"}'
disagg_kvbm_tp2.yaml · Disaggregated KVBM, tensor-parallel 2
disagg_kvbm_tp2.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: nvidia.com/v1alpha1 5 kind: DynamoGraphDeployment 6 metadata: 7 name: vllm-disagg-kvbm-tp2 8 spec: 9 services: 10 Frontend: 11 componentType: frontend 12 replicas: 1 13 extraPodSpec: 14 mainContainer: 15 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 16 VllmDecodeWorker: 17 envFromSecret: hf-token-secret 18 componentType: worker 19 replicas: 1 20 resources: 21 requests: 22 gpu: "2" 23 limits: 24 gpu: "2" 25 extraPodSpec: 26 mainContainer: 27 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 28 workingDir: /workspace/examples/backends/vllm 29 command: 30 - python3 31 - -m 32 - dynamo.vllm 33 args: 34 - --model 35 - Qwen/Qwen3-8B 36 - --disaggregation-mode 37 - decode 38 - --kv-transfer-config 39 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}' 40 - --gpu-memory-utilization 41 - "0.23" 42 - --max-model-len 43 - "32000" 44 - --enforce-eager 45 - --tensor-parallel-size 46 - "2" 47 VllmPrefillWorker: 48 envFromSecret: hf-token-secret 49 componentType: worker 50 replicas: 1 51 resources: 52 requests: 53 gpu: "2" 54 memory: "200Gi" 55 limits: 56 gpu: "2" 57 memory: "250Gi" 58 envs: 59 - name: DYN_KVBM_CPU_CACHE_GB 60 value: "100" 61 extraPodSpec: 62 mainContainer: 63 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 64 workingDir: /workspace/examples/backends/vllm 65 command: 66 - python3 67 - -m 68 - dynamo.vllm 69 args: 70 - --model 71 - Qwen/Qwen3-8B 72 - --disaggregation-mode 73 - prefill 74 - --gpu-memory-utilization 75 - "0.23" 76 - --max-model-len 77 - "32000" 78 - --enforce-eager 79 - --kv-transfer-config 80 - '{"kv_connector":"PdConnector","kv_role":"kv_both","kv_connector_extra_config":{"connectors":[{"kv_connector":"DynamoConnector","kv_connector_module_path":"kvbm.vllm_integration.connector","kv_role":"kv_both"},{"kv_connector":"NixlConnector","kv_role":"kv_both"}]},"kv_connector_module_path":"kvbm.vllm_integration.connector"}' 81 - --tensor-parallel-size 82 - "2"
disagg_kvbm_2p2d.yaml · Disaggregated KVBM, 2 prefill + 2 decode workers
disagg_kvbm_2p2d.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: nvidia.com/v1alpha1 5 kind: DynamoGraphDeployment 6 metadata: 7 name: vllm-disagg-kvbm-2p2d 8 spec: 9 services: 10 Frontend: 11 componentType: frontend 12 replicas: 1 13 extraPodSpec: 14 mainContainer: 15 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 16 VllmDecodeWorker: 17 envFromSecret: hf-token-secret 18 componentType: worker 19 replicas: 2 20 resources: 21 limits: 22 gpu: "1" 23 extraPodSpec: 24 mainContainer: 25 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 26 workingDir: /workspace/examples/backends/vllm 27 command: 28 - python3 29 - -m 30 - dynamo.vllm 31 args: 32 - --model 33 - Qwen/Qwen3-8B 34 - --disaggregation-mode 35 - decode 36 - --kv-transfer-config 37 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}' 38 - --max-model-len 39 - "32000" 40 - --enforce-eager 41 VllmPrefillWorker: 42 envFromSecret: hf-token-secret 43 componentType: worker 44 replicas: 2 45 resources: 46 requests: 47 gpu: "1" 48 memory: "200Gi" 49 limits: 50 gpu: "1" 51 memory: "250Gi" 52 envs: 53 - name: DYN_KVBM_CPU_CACHE_GB 54 value: "100" 55 extraPodSpec: 56 mainContainer: 57 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 58 workingDir: /workspace/examples/backends/vllm 59 command: 60 - python3 61 - -m 62 - dynamo.vllm 63 args: 64 - --model 65 - Qwen/Qwen3-8B 66 - --disaggregation-mode 67 - prefill 68 - --max-model-len 69 - "32000" 70 - --enforce-eager 71 - --kv-transfer-config 72 - '{"kv_connector":"PdConnector","kv_role":"kv_both","kv_connector_extra_config":{"connectors":[{"kv_connector":"DynamoConnector","kv_connector_module_path":"kvbm.vllm_integration.connector","kv_role":"kv_both"},{"kv_connector":"NixlConnector","kv_role":"kv_both"}]},"kv_connector_module_path":"kvbm.vllm_integration.connector"}'
disagg_tracing.yaml · Disaggregated with OpenTelemetry tracing
disagg_tracing.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 # Disaggregated vLLM deployment with OpenTelemetry tracing enabled. 5 # Base deployment: disagg.yaml 6 # See docs/observability/tracing.md for setup instructions. 7 8 apiVersion: nvidia.com/v1alpha1 9 kind: DynamoGraphDeployment 10 metadata: 11 name: vllm-disagg-tracing 12 spec: 13 envs: 14 - name: DYN_LOGGING_JSONL 15 value: "true" 16 - name: OTEL_EXPORT_ENABLED 17 value: "true" 18 - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT 19 value: "http://tempo.observability.svc.cluster.local:4317" 20 services: 21 Frontend: 22 componentType: frontend 23 replicas: 1 24 extraPodSpec: 25 mainContainer: 26 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 27 env: 28 - name: OTEL_SERVICE_NAME 29 value: "dynamo-frontend" 30 VllmDecodeWorker: 31 envFromSecret: hf-token-secret 32 componentType: worker 33 subComponentType: decode 34 replicas: 1 35 resources: 36 limits: 37 gpu: "1" 38 requests: 39 custom: 40 # Increase this value for larger models 41 ephemeral-storage: "2Gi" 42 extraPodSpec: 43 mainContainer: 44 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 45 workingDir: /workspace/examples/backends/vllm 46 command: 47 - python3 48 - -m 49 - dynamo.vllm 50 args: 51 - --model 52 - Qwen/Qwen3-0.6B 53 - --disaggregation-mode 54 - decode 55 env: 56 - name: OTEL_SERVICE_NAME 57 value: "dynamo-worker-decode" 58 VllmPrefillWorker: 59 envFromSecret: hf-token-secret 60 componentType: worker 61 subComponentType: prefill 62 replicas: 1 63 resources: 64 limits: 65 gpu: "1" 66 requests: 67 custom: 68 # Increase this value for larger models 69 ephemeral-storage: "2Gi" 70 extraPodSpec: 71 mainContainer: 72 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 73 workingDir: /workspace/examples/backends/vllm 74 command: 75 - python3 76 - -m 77 - dynamo.vllm 78 args: 79 - --model 80 - Qwen/Qwen3-0.6B 81 - --disaggregation-mode 82 - prefill 83 - --kv-transfer-config 84 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}' 85 env: 86 - name: OTEL_SERVICE_NAME 87 value: "dynamo-worker-prefill"
disagg-multinode.yaml · Disaggregated across multiple nodes
disagg-multinode.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: nvidia.com/v1alpha1 5 kind: DynamoGraphDeployment 6 metadata: 7 name: vllm-disagg 8 spec: 9 services: 10 Frontend: 11 componentType: frontend 12 replicas: 1 13 extraPodSpec: 14 mainContainer: 15 image: my-registry/vllm-runtime:my-tag 16 workingDir: /workspace/examples/backends/vllm 17 command: 18 - python3 19 - -m 20 - dynamo.frontend 21 args: 22 - --http-port 23 - "8000" 24 decode: 25 envFromSecret: hf-token-secret 26 componentType: worker 27 replicas: 1 28 multinode: 29 nodeCount: 2 30 resources: 31 limits: 32 gpu: "1" 33 extraPodSpec: 34 mainContainer: 35 image: my-registry/vllm-runtime:my-tag 36 workingDir: /workspace/examples/backends/vllm 37 command: 38 - python3 39 - -m 40 - dynamo.vllm 41 args: 42 - --model 43 - Qwen/Qwen3-0.6B 44 - --tensor-parallel-size 45 - "2" 46 - --disaggregation-mode 47 - decode 48 - --kv-transfer-config 49 - '{"kv_connector": "NixlConnector", "kv_role": "kv_both", "engine_id": 50 "vllm-disagg-decode-engine-0abc123"}' 51 prefill: 52 envFromSecret: hf-token-secret 53 componentType: worker 54 replicas: 1 55 multinode: 56 nodeCount: 2 57 resources: 58 limits: 59 gpu: "1" 60 extraPodSpec: 61 mainContainer: 62 image: my-registry/vllm-runtime:my-tag 63 workingDir: /workspace/examples/backends/vllm 64 command: 65 - python3 66 - -m 67 - dynamo.vllm 68 args: 69 - --model 70 - Qwen/Qwen3-0.6B 71 - --tensor-parallel-size 72 - "2" 73 - --disaggregation-mode 74 - prefill 75 - --kv-transfer-config 76 - '{"kv_connector": "NixlConnector", "kv_role": "kv_both", "engine_id": 77 "vllm-disagg-prefill-engine-0abc123"}'
disagg_xpu_dra.yaml · Disaggregated with Dynamic Resource Allocation (bundles a ResourceClaimTemplate)
disagg_xpu_dra.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 apiVersion: resource.k8s.io/v1 5 kind: ResourceClaimTemplate 6 metadata: 7 name: gpu-template 8 spec: 9 spec: 10 devices: 11 requests: 12 - name: gpu 13 exactly: 14 deviceClassName: gpu.intel.com 15 count: 1 16 --- 17 apiVersion: nvidia.com/v1alpha1 18 kind: DynamoGraphDeployment 19 metadata: 20 name: vllm-disagg-xpu-dra 21 spec: 22 services: 23 Frontend: 24 envFromSecret: hf-token-secret 25 componentType: frontend 26 replicas: 1 27 extraPodSpec: 28 mainContainer: 29 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag 30 VllmDecodeWorker: 31 envFromSecret: hf-token-secret 32 componentType: worker 33 subComponentType: decode 34 replicas: 1 35 resources: 36 requests: 37 custom: 38 # Increase this value for larger models 39 ephemeral-storage: "2Gi" 40 extraPodSpec: 41 resourceClaims: 42 - name: gpu 43 resourceClaimTemplateName: gpu-template 44 # NOTE: Uncomment if your environment requires specific group access 45 # securityContext: 46 # runAsUser: 1000 47 # runAsGroup: 1000 48 # supplementalGroups: 49 # - 44 # render group 50 # - 991 # video group 51 mainContainer: 52 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime-xpu:my-tag 53 resources: 54 claims: 55 - name: gpu 56 env: 57 - name: VLLM_TARGET_DEVICE 58 value: xpu 59 workingDir: /workspace/examples/backends/vllm 60 command: 61 - python3 62 - -m 63 - dynamo.vllm 64 args: 65 - --model 66 - Qwen/Qwen3-0.6B 67 - --disaggregation-mode 68 - decode 69 - --kv-transfer-config 70 - '{"kv_connector":"NixlConnector","kv_role":"kv_consumer","kv_buffer_device":"xpu"}' 71 - --block-size 72 - "64" 73 VllmPrefillWorker: 74 envFromSecret: hf-token-secret 75 componentType: worker 76 subComponentType: prefill 77 replicas: 1 78 resources: 79 requests: 80 custom: 81 # Increase this value for larger models 82 ephemeral-storage: "2Gi" 83 extraPodSpec: 84 resourceClaims: 85 - name: gpu 86 resourceClaimTemplateName: gpu-template 87 # NOTE: Uncomment if your environment requires specific group access 88 # securityContext: 89 # runAsUser: 1000 90 # runAsGroup: 1000 91 # supplementalGroups: 92 # - 44 # render group 93 # - 991 # video group 94 mainContainer: 95 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime-xpu:my-tag 96 resources: 97 claims: 98 - name: gpu 99 env: 100 - name: VLLM_TARGET_DEVICE 101 value: xpu 102 workingDir: /workspace/examples/backends/vllm 103 command: 104 - python3 105 - -m 106 - dynamo.vllm 107 args: 108 - --model 109 - Qwen/Qwen3-0.6B 110 - --disaggregation-mode 111 - prefill 112 - --kv-transfer-config 113 - '{"kv_connector":"NixlConnector","kv_role":"kv_both","kv_buffer_device":"xpu"}' 114 - --block-size 115 - "64"
Other
gms-failover.yaml · Multinode GPU Memory Service with failover (bundles a ResourceClaimTemplate)
gms-failover.yaml
1 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 # SPDX-License-Identifier: Apache-2.0 3 4 # Example: DynamoGraphDeployment with inter-pod GMS (GPU Memory Service) 5 # failover on vLLM. 6 # 7 # Inter-pod GMS failover splits the traditional single-engine pod into: 8 # * a dedicated GMS weight-server pod (per rank) that owns the model weights 9 # and exposes them over a shared-GPU UDS, and 10 # * N engine pods (per rank) that attach to the same GPUs via DRA and race 11 # for a flock; the winner becomes primary, the others are hot shadows. 12 # 13 # This file contains two commented-out variants you can copy into .spec.services: 14 # 15 # Single-node GMS: 16 # Creates per PCSG replica: 17 # - 1 GMS weight-server pod (<service>-gms-0) 18 # - numShadows + 1 engine pods (<service>, replicas = numShadows + 1) 19 # All engine pods + the GMS pod share the same GPUs via DRA ResourceClaims. 20 # service.replicas controls how many PCSG replicas are created 21 # (horizontal scale). 22 # 23 # Multinode GMS (N nodes): 24 # Creates per PCSG replica: 25 # - 1 GMS weight-server pod per rank (<service>-gms-<rank>) 26 # - numShadows + 1 engine pods per rank 27 # rank 0: <service>-ldr (leader, replicas = numShadows + 1) 28 # rank R: <service>-wkr-R (worker R, replicas = numShadows + 1) 29 # Each rank's GMS + engine pods share GPUs via DRA within that node. 30 # service.replicas controls horizontal PCSG replicas. 31 apiVersion: nvidia.com/v1alpha1 32 kind: DynamoGraphDeployment 33 metadata: 34 name: llm-serving-mn 35 spec: 36 backendFramework: vllm 37 services: 38 # ─── Single-node GMS failover ─── 39 agg: 40 componentType: worker 41 replicas: 1 42 resources: 43 limits: 44 gpu: "1" 45 gpuMemoryService: 46 enabled: true 47 mode: interPod 48 failover: 49 enabled: true 50 mode: interPod 51 numShadows: 1 # 1 primary + 1 shadow = 2 engine pods per PCSG replica 52 extraPodSpec: 53 mainContainer: 54 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:latest 55 command: ["python3", "-m", "dynamo.vllm"] 56 args: ["--model", "Qwen/Qwen3-0.6B", "--tensor-parallel-size", "1", "--enforce-eager", "--gpu-memory-utilization", "0.85"] 57 # sharedMemory: 58 # size: 16Gi 59 60 # ─── Multinode GMS failover (2 nodes) ─── 61 # agg: 62 # envFromSecret: hf-token-secret 63 # componentType: worker 64 # replicas: 1 65 # multinode: 66 # nodeCount: 2 67 # resources: 68 # limits: 69 # gpu: "1" 70 # gpuMemoryService: 71 # enabled: true 72 # mode: interPod 73 # failover: 74 # enabled: true 75 # mode: interPod 76 # numShadows: 1 # 1 primary + 1 shadow = 2 engine pods per rank 77 # extraPodSpec: 78 # mainContainer: 79 # image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:latest 80 # command: ["python3", "-m", "dynamo.vllm"] 81 # # args: ["--model", "Qwen/Qwen3-235B-A22B", "--tensor-parallel-size", "8", "--enforce-eager", "--gpu-memory-utilization", "0.85"] 82 # args: ["--model", "Qwen/Qwen3-0.6B", "--tensor-parallel-size", "2", "--enforce-eager", "--gpu-memory-utilization", "0.85"] 83 84 # sharedMemory: 85 # size: 16Gi 86 87 # ─── Regular frontend (no failover) ─── 88 frontend: 89 envFromSecret: hf-token-secret 90 componentType: frontend 91 replicas: 1 92 extraPodSpec: 93 mainContainer: 94 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:latest 95 # command: ["python3", "-m", "dynamo.frontend"]
Source
All templates live in
examples/backends/vllm/deploy/.
For local launch commands, see vLLM Local Deployment Examples.