vLLM Deployment Templates

Ready-to-apply DynamoGraphDeployment manifests for serving vLLM with Dynamo on Kubernetes.

View as Markdown

Copy-paste deployment templates for the vLLM backend, grouped by topology. Each template includes a DynamoGraphDeployment that uses nvidia.com/v1beta1; XPU templates also include resource.k8s.io/v1 Dynamic Resource Allocation resources. 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
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2# SPDX-License-Identifier: Apache-2.0
3
4apiVersion: nvidia.com/v1beta1
5kind: DynamoGraphDeployment
6metadata:
7 name: vllm-agg
8spec:
9 components:
10 - name: Frontend
11 podTemplate:
12 spec:
13 containers:
14 - envFrom:
15 - secretRef:
16 name: hf-token-secret
17 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
18 name: main
19 replicas: 1
20 type: frontend
21 - name: VllmDecodeWorker
22 podTemplate:
23 spec:
24 containers:
25 - args:
26 - --model
27 - Qwen/Qwen3-0.6B
28 command:
29 - python3
30 - -m
31 - dynamo.vllm
32 envFrom:
33 - secretRef:
34 name: hf-token-secret
35 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
36 name: main
37 resources:
38 limits:
39 nvidia.com/gpu: "1"
40 requests:
41 # Increase this value for larger models.
42 ephemeral-storage: 2Gi
43 workingDir: /workspace/examples/backends/vllm
44 replicas: 1
45 type: worker
agg_router.yaml
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2# SPDX-License-Identifier: Apache-2.0
3
4apiVersion: nvidia.com/v1beta1
5kind: DynamoGraphDeployment
6metadata:
7 name: vllm-agg-router
8spec:
9 components:
10 - name: Frontend
11 podTemplate:
12 spec:
13 containers:
14 - env:
15 - name: DYN_ROUTER_MODE
16 value: kv
17 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
18 name: main
19 replicas: 1
20 type: frontend
21 - name: VllmDecodeWorker
22 podTemplate:
23 spec:
24 containers:
25 - args:
26 - --model
27 - Qwen/Qwen3-0.6B
28 - --kv-events-config
29 - '{"publisher":"zmq","topic":"kv-events","endpoint":"tcp://*:20080","enable_kv_cache_events":true}'
30 command:
31 - python3
32 - -m
33 - dynamo.vllm
34 envFrom:
35 - secretRef:
36 name: hf-token-secret
37 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
38 name: main
39 resources:
40 limits:
41 nvidia.com/gpu: "1"
42 requests:
43 # Increase this value for larger models.
44 ephemeral-storage: 2Gi
45 workingDir: /workspace/examples/backends/vllm
46 replicas: 2
47 type: worker
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.
8apiVersion: nvidia.com/v1beta1
9kind: DynamoGraphDeployment
10metadata:
11 name: vllm-agg-router-kv-approx
12spec:
13 components:
14 - name: Frontend
15 podTemplate:
16 spec:
17 containers:
18 - args:
19 - -m
20 - dynamo.frontend
21 - --router-mode
22 - kv
23 - --no-kv-events
24 command:
25 - python3
26 env:
27 - name: DYN_ROUTER_MODE
28 value: kv
29 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
30 name: main
31 replicas: 1
32 type: frontend
33 - name: VllmDecodeWorker
34 podTemplate:
35 spec:
36 containers:
37 - args:
38 - --model
39 - Qwen/Qwen3-0.6B
40 - --kv-events-config
41 - '{"enable_kv_cache_events": false}'
42 command:
43 - python3
44 - -m
45 - dynamo.vllm
46 envFrom:
47 - secretRef:
48 name: hf-token-secret
49 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
50 name: main
51 resources:
52 limits:
53 nvidia.com/gpu: "1"
54 workingDir: /workspace/examples/backends/vllm
55 replicas: 2
56 type: worker
agg_kvbm.yaml
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2# SPDX-License-Identifier: Apache-2.0
3
4apiVersion: nvidia.com/v1beta1
5kind: DynamoGraphDeployment
6metadata:
7 name: vllm-agg-kvbm
8spec:
9 components:
10 - name: Frontend
11 podTemplate:
12 spec:
13 containers:
14 - image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
15 name: main
16 replicas: 1
17 type: frontend
18 - name: VllmDecodeWorker
19 podTemplate:
20 spec:
21 containers:
22 - args:
23 - --model
24 - Qwen/Qwen3-8B
25 - --max-model-len
26 - "32000"
27 - --enforce-eager
28 - --kv-transfer-config
29 - '{"kv_connector":"DynamoConnector","kv_connector_module_path":"kvbm.vllm_integration.connector","kv_role":"kv_both"}'
30 command:
31 - python3
32 - -m
33 - dynamo.vllm
34 env:
35 - name: DYN_KVBM_CPU_CACHE_GB
36 value: "100"
37 envFrom:
38 - secretRef:
39 name: hf-token-secret
40 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
41 name: main
42 resources:
43 limits:
44 memory: 250Gi
45 nvidia.com/gpu: "1"
46 requests:
47 memory: 200Gi
48 nvidia.com/gpu: "1"
49 workingDir: /workspace/examples/backends/vllm
50 replicas: 1
51 type: worker
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
13apiVersion: nvidia.com/v1beta1
14kind: DynamoGraphDeployment
15metadata:
16 name: vllm-agg-gms
17spec:
18 components:
19 - name: Frontend
20 podTemplate:
21 spec:
22 containers:
23 - envFrom:
24 - secretRef:
25 name: hf-token-secret
26 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
27 name: main
28 replicas: 1
29 type: frontend
30 - experimental:
31 gpuMemoryService: {}
32 name: VllmWorker
33 podTemplate:
34 spec:
35 containers:
36 - args:
37 - --model
38 - Qwen/Qwen3-0.6B
39 - --load-format
40 - gms
41 command:
42 - python3
43 - -m
44 - dynamo.vllm
45 envFrom:
46 - secretRef:
47 name: hf-token-secret
48 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
49 name: main
50 resources:
51 limits:
52 nvidia.com/gpu: "1"
53 requests:
54 ephemeral-storage: 2Gi
55 workingDir: /workspace/examples/backends/vllm
56 replicas: 1
57 type: worker
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# - experimental.gpuMemoryService: {} (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
15apiVersion: nvidia.com/v1beta1
16kind: DynamoGraphDeployment
17metadata:
18 annotations:
19 nvidia.com/dynamo-kube-discovery-mode: container
20 name: vllm-agg-failover
21spec:
22 components:
23 - name: Frontend
24 podTemplate:
25 spec:
26 containers:
27 - envFrom:
28 - secretRef:
29 name: hf-token-secret
30 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
31 name: main
32 replicas: 1
33 type: frontend
34 - experimental:
35 failover: {}
36 gpuMemoryService: {}
37 name: VllmWorker
38 podTemplate:
39 spec:
40 containers:
41 - args:
42 - --model
43 - Qwen/Qwen3-0.6B
44 - --tensor-parallel-size
45 - "2"
46 - --load-format
47 - gms
48 command:
49 - python3
50 - -m
51 - dynamo.vllm
52 envFrom:
53 - secretRef:
54 name: hf-token-secret
55 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
56 name: main
57 resources:
58 limits:
59 nvidia.com/gpu: "2"
60 requests:
61 ephemeral-storage: 2Gi
62 workingDir: /workspace/examples/backends/vllm
63 replicas: 1
64 type: worker
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
8apiVersion: nvidia.com/v1beta1
9kind: DynamoGraphDeployment
10metadata:
11 name: vllm-agg-tracing
12spec:
13 components:
14 - name: Frontend
15 podTemplate:
16 spec:
17 containers:
18 - env:
19 - name: OTEL_SERVICE_NAME
20 value: dynamo-frontend
21 envFrom:
22 - secretRef:
23 name: hf-token-secret
24 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
25 name: main
26 replicas: 1
27 type: frontend
28 - name: VllmDecodeWorker
29 podTemplate:
30 spec:
31 containers:
32 - args:
33 - --model
34 - Qwen/Qwen3-0.6B
35 command:
36 - python3
37 - -m
38 - dynamo.vllm
39 env:
40 - name: OTEL_SERVICE_NAME
41 value: dynamo-worker-vllm
42 envFrom:
43 - secretRef:
44 name: hf-token-secret
45 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
46 name: main
47 resources:
48 limits:
49 nvidia.com/gpu: "1"
50 requests:
51 # Increase this value for larger models.
52 ephemeral-storage: 2Gi
53 workingDir: /workspace/examples/backends/vllm
54 replicas: 1
55 type: worker
56 env:
57 - name: DYN_LOGGING_JSONL
58 value: "true"
59 - name: OTEL_EXPORT_ENABLED
60 value: "true"
61 - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
62 value: http://tempo.observability.svc.cluster.local:4317
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
4apiVersion: resource.k8s.io/v1
5kind: ResourceClaimTemplate
6metadata:
7 name: gpu-template
8spec:
9 spec:
10 devices:
11 requests:
12 - name: gpu
13 exactly:
14 deviceClassName: gpu.intel.com
15 count: 1
16---
17apiVersion: nvidia.com/v1beta1
18kind: DynamoGraphDeployment
19metadata:
20 name: vllm-agg-xpu-dra
21spec:
22 components:
23 - name: Frontend
24 podTemplate:
25 spec:
26 containers:
27 - envFrom:
28 - secretRef:
29 name: hf-token-secret
30 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
31 name: main
32 replicas: 1
33 type: frontend
34 - name: VllmDecodeWorker
35 podTemplate:
36 spec:
37 containers:
38 - args:
39 - --model
40 - Qwen/Qwen3-0.6B
41 - --block-size
42 - "64"
43 command:
44 - python3
45 - -m
46 - dynamo.vllm
47 env:
48 - name: VLLM_TARGET_DEVICE
49 value: xpu
50 envFrom:
51 - secretRef:
52 name: hf-token-secret
53 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime-xpu:my-tag
54 name: main
55 resources:
56 claims:
57 - name: gpu
58 requests:
59 # Increase this value for larger models.
60 ephemeral-storage: 2Gi
61 workingDir: /workspace/examples/backends/vllm
62 resourceClaims:
63 - name: gpu
64 resourceClaimTemplateName: gpu-template
65 # NOTE: Uncomment if your environment requires specific group access
66 # securityContext:
67 # runAsUser: 1000
68 # runAsGroup: 1000
69 # supplementalGroups:
70 # - 44 # render group
71 # - 991 # video group
72 replicas: 1
73 type: worker

Disaggregated

disagg.yaml
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2# SPDX-License-Identifier: Apache-2.0
3
4apiVersion: nvidia.com/v1beta1
5kind: DynamoGraphDeployment
6metadata:
7 name: vllm-disagg
8spec:
9 components:
10 - name: Frontend
11 podTemplate:
12 spec:
13 containers:
14 - image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
15 name: main
16 replicas: 1
17 type: frontend
18 - name: VllmDecodeWorker
19 podTemplate:
20 spec:
21 containers:
22 - args:
23 - --model
24 - Qwen/Qwen3-0.6B
25 - --disaggregation-mode
26 - decode
27 - --kv-transfer-config
28 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
29 command:
30 - python3
31 - -m
32 - dynamo.vllm
33 envFrom:
34 - secretRef:
35 name: hf-token-secret
36 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
37 name: main
38 resources:
39 limits:
40 nvidia.com/gpu: "1"
41 requests:
42 # Increase this value for larger models.
43 ephemeral-storage: 2Gi
44 workingDir: /workspace/examples/backends/vllm
45 replicas: 1
46 type: decode
47 - name: VllmPrefillWorker
48 podTemplate:
49 spec:
50 containers:
51 - args:
52 - --model
53 - Qwen/Qwen3-0.6B
54 - --disaggregation-mode
55 - prefill
56 - --kv-transfer-config
57 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
58 command:
59 - python3
60 - -m
61 - dynamo.vllm
62 envFrom:
63 - secretRef:
64 name: hf-token-secret
65 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
66 name: main
67 resources:
68 limits:
69 nvidia.com/gpu: "1"
70 requests:
71 # Increase this value for larger models.
72 ephemeral-storage: 2Gi
73 workingDir: /workspace/examples/backends/vllm
74 replicas: 1
75 type: prefill
disagg_router.yaml
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2# SPDX-License-Identifier: Apache-2.0
3
4apiVersion: nvidia.com/v1beta1
5kind: DynamoGraphDeployment
6metadata:
7 name: vllm-v1-disagg-router
8spec:
9 components:
10 - name: Frontend
11 podTemplate:
12 spec:
13 containers:
14 - env:
15 - name: DYN_ROUTER_MODE
16 value: kv
17 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
18 name: main
19 replicas: 1
20 type: frontend
21 - name: VllmDecodeWorker
22 podTemplate:
23 spec:
24 containers:
25 - args:
26 - --model
27 - Qwen/Qwen3-0.6B
28 - --disaggregation-mode
29 - decode
30 - --kv-transfer-config
31 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
32 command:
33 - python3
34 - -m
35 - dynamo.vllm
36 envFrom:
37 - secretRef:
38 name: hf-token-secret
39 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
40 name: main
41 resources:
42 limits:
43 nvidia.com/gpu: "1"
44 requests:
45 # Increase this value for larger models.
46 ephemeral-storage: 2Gi
47 workingDir: /workspace/examples/backends/vllm
48 replicas: 2
49 type: decode
50 - name: VllmPrefillWorker
51 podTemplate:
52 spec:
53 containers:
54 - args:
55 - --model
56 - Qwen/Qwen3-0.6B
57 - --disaggregation-mode
58 - prefill
59 - --kv-transfer-config
60 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
61 - --kv-events-config
62 - '{"publisher":"zmq","topic":"kv-events","endpoint":"tcp://*:20080","enable_kv_cache_events":true}'
63 command:
64 - python3
65 - -m
66 - dynamo.vllm
67 envFrom:
68 - secretRef:
69 name: hf-token-secret
70 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
71 name: main
72 resources:
73 limits:
74 nvidia.com/gpu: "1"
75 requests:
76 # Increase this value for larger models.
77 ephemeral-storage: 2Gi
78 workingDir: /workspace/examples/backends/vllm
79 replicas: 2
80 type: prefill
disagg_planner.yaml
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2# SPDX-License-Identifier: Apache-2.0
3
4apiVersion: nvidia.com/v1beta1
5kind: DynamoGraphDeployment
6metadata:
7 name: vllm-disagg-planner
8spec:
9 components:
10 - name: Frontend
11 podTemplate:
12 spec:
13 containers:
14 - image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
15 name: main
16 replicas: 1
17 type: frontend
18 - name: Planner
19 podTemplate:
20 spec:
21 containers:
22 - args:
23 - --config
24 - '{"environment": "kubernetes", "backend": "vllm", "optimization_target": "sla",
25 "enable_throughput_scaling": true, "enable_load_scaling": true, "pre_deployment_sweeping_mode":
26 "none", "throughput_adjustment_interval_seconds": 60, "load_adjustment_interval_seconds": 5}'
27 command:
28 - python3
29 - -m
30 - dynamo.planner
31 # Planner image selection:
32 # Dynamo >= 1.1.0: use the dedicated planner image
33 # nvcr.io/nvidia/ai-dynamo/dynamo-planner:<version>
34 # (backend runtime images no longer ship planner runtime deps
35 # such as kubernetes_asyncio, pmdarima, prophet, aiconfigurator).
36 # Dynamo < 1.1.0: use the backend runtime image
37 # nvcr.io/nvidia/ai-dynamo/vllm-runtime:<version>.
38 image: nvcr.io/nvidia/ai-dynamo/dynamo-planner:my-tag
39 name: main
40 replicas: 1
41 type: planner
42 - name: VllmDecodeWorker
43 podTemplate:
44 spec:
45 containers:
46 - args:
47 - -m
48 - dynamo.vllm
49 - --model
50 - Qwen/Qwen3-0.6B
51 - --disaggregation-mode
52 - decode
53 - --kv-transfer-config
54 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
55 command:
56 - python3
57 envFrom:
58 - secretRef:
59 name: hf-token-secret
60 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
61 name: main
62 resources:
63 limits:
64 nvidia.com/gpu: "1"
65 workingDir: /workspace/examples/backends/vllm
66 replicas: 1
67 type: decode
68 - name: VllmPrefillWorker
69 podTemplate:
70 spec:
71 containers:
72 - args:
73 - -m
74 - dynamo.vllm
75 - --model
76 - Qwen/Qwen3-0.6B
77 - --disaggregation-mode
78 - prefill
79 - --kv-transfer-config
80 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
81 command:
82 - python3
83 envFrom:
84 - secretRef:
85 name: hf-token-secret
86 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
87 name: main
88 resources:
89 limits:
90 nvidia.com/gpu: "1"
91 workingDir: /workspace/examples/backends/vllm
92 replicas: 1
93 type: prefill
disagg_kvbm.yaml
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2# SPDX-License-Identifier: Apache-2.0
3
4apiVersion: nvidia.com/v1beta1
5kind: DynamoGraphDeployment
6metadata:
7 name: vllm-disagg-kvbm
8spec:
9 components:
10 - name: Frontend
11 podTemplate:
12 spec:
13 containers:
14 - image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
15 name: main
16 replicas: 1
17 type: frontend
18 - name: VllmDecodeWorker
19 podTemplate:
20 spec:
21 containers:
22 - args:
23 - --model
24 - Qwen/Qwen3-8B
25 - --disaggregation-mode
26 - decode
27 - --disable-hybrid-kv-cache-manager
28 - --kv-transfer-config
29 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
30 - --max-model-len
31 - "32000"
32 - --enforce-eager
33 command:
34 - python3
35 - -m
36 - dynamo.vllm
37 envFrom:
38 - secretRef:
39 name: hf-token-secret
40 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
41 name: main
42 resources:
43 limits:
44 nvidia.com/gpu: "1"
45 workingDir: /workspace/examples/backends/vllm
46 replicas: 1
47 type: decode
48 - name: VllmPrefillWorker
49 podTemplate:
50 spec:
51 containers:
52 - args:
53 - --model
54 - Qwen/Qwen3-8B
55 - --disaggregation-mode
56 - prefill
57 - --disable-hybrid-kv-cache-manager
58 - --max-model-len
59 - "32000"
60 - --enforce-eager
61 - --kv-transfer-config
62 - '{"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"}'
63 command:
64 - python3
65 - -m
66 - dynamo.vllm
67 env:
68 - name: DYN_KVBM_CPU_CACHE_GB
69 value: "100"
70 envFrom:
71 - secretRef:
72 name: hf-token-secret
73 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
74 name: main
75 resources:
76 limits:
77 memory: 250Gi
78 nvidia.com/gpu: "1"
79 requests:
80 memory: 200Gi
81 nvidia.com/gpu: "1"
82 workingDir: /workspace/examples/backends/vllm
83 replicas: 1
84 type: prefill
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
4apiVersion: nvidia.com/v1beta1
5kind: DynamoGraphDeployment
6metadata:
7 name: vllm-disagg-kvbm-tp2
8spec:
9 components:
10 - name: Frontend
11 podTemplate:
12 spec:
13 containers:
14 - image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
15 name: main
16 replicas: 1
17 type: frontend
18 - name: VllmDecodeWorker
19 podTemplate:
20 spec:
21 containers:
22 - args:
23 - --model
24 - Qwen/Qwen3-8B
25 - --disaggregation-mode
26 - decode
27 - --disable-hybrid-kv-cache-manager
28 - --kv-transfer-config
29 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
30 - --gpu-memory-utilization
31 - "0.23"
32 - --max-model-len
33 - "32000"
34 - --enforce-eager
35 - --tensor-parallel-size
36 - "2"
37 command:
38 - python3
39 - -m
40 - dynamo.vllm
41 envFrom:
42 - secretRef:
43 name: hf-token-secret
44 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
45 name: main
46 resources:
47 limits:
48 nvidia.com/gpu: "2"
49 requests:
50 nvidia.com/gpu: "2"
51 workingDir: /workspace/examples/backends/vllm
52 replicas: 1
53 type: decode
54 - name: VllmPrefillWorker
55 podTemplate:
56 spec:
57 containers:
58 - args:
59 - --model
60 - Qwen/Qwen3-8B
61 - --disaggregation-mode
62 - prefill
63 - --disable-hybrid-kv-cache-manager
64 - --gpu-memory-utilization
65 - "0.23"
66 - --max-model-len
67 - "32000"
68 - --enforce-eager
69 - --kv-transfer-config
70 - '{"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"}'
71 - --tensor-parallel-size
72 - "2"
73 command:
74 - python3
75 - -m
76 - dynamo.vllm
77 env:
78 - name: DYN_KVBM_CPU_CACHE_GB
79 value: "100"
80 envFrom:
81 - secretRef:
82 name: hf-token-secret
83 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
84 name: main
85 resources:
86 limits:
87 memory: 250Gi
88 nvidia.com/gpu: "2"
89 requests:
90 memory: 200Gi
91 nvidia.com/gpu: "2"
92 workingDir: /workspace/examples/backends/vllm
93 replicas: 1
94 type: prefill
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
4apiVersion: nvidia.com/v1beta1
5kind: DynamoGraphDeployment
6metadata:
7 name: vllm-disagg-kvbm-2p2d
8spec:
9 components:
10 - name: Frontend
11 podTemplate:
12 spec:
13 containers:
14 - image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
15 name: main
16 replicas: 1
17 type: frontend
18 - name: VllmDecodeWorker
19 podTemplate:
20 spec:
21 containers:
22 - args:
23 - --model
24 - Qwen/Qwen3-8B
25 - --disaggregation-mode
26 - decode
27 - --disable-hybrid-kv-cache-manager
28 - --kv-transfer-config
29 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
30 - --max-model-len
31 - "32000"
32 - --enforce-eager
33 command:
34 - python3
35 - -m
36 - dynamo.vllm
37 envFrom:
38 - secretRef:
39 name: hf-token-secret
40 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
41 name: main
42 resources:
43 limits:
44 nvidia.com/gpu: "1"
45 workingDir: /workspace/examples/backends/vllm
46 replicas: 2
47 type: decode
48 - name: VllmPrefillWorker
49 podTemplate:
50 spec:
51 containers:
52 - args:
53 - --model
54 - Qwen/Qwen3-8B
55 - --disaggregation-mode
56 - prefill
57 - --disable-hybrid-kv-cache-manager
58 - --max-model-len
59 - "32000"
60 - --enforce-eager
61 - --kv-transfer-config
62 - '{"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"}'
63 command:
64 - python3
65 - -m
66 - dynamo.vllm
67 env:
68 - name: DYN_KVBM_CPU_CACHE_GB
69 value: "100"
70 envFrom:
71 - secretRef:
72 name: hf-token-secret
73 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
74 name: main
75 resources:
76 limits:
77 memory: 250Gi
78 nvidia.com/gpu: "1"
79 requests:
80 memory: 200Gi
81 nvidia.com/gpu: "1"
82 workingDir: /workspace/examples/backends/vllm
83 replicas: 2
84 type: prefill
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
8apiVersion: nvidia.com/v1beta1
9kind: DynamoGraphDeployment
10metadata:
11 name: vllm-disagg-tracing
12spec:
13 components:
14 - name: Frontend
15 podTemplate:
16 spec:
17 containers:
18 - env:
19 - name: OTEL_SERVICE_NAME
20 value: dynamo-frontend
21 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
22 name: main
23 replicas: 1
24 type: frontend
25 - name: VllmDecodeWorker
26 podTemplate:
27 spec:
28 containers:
29 - args:
30 - --model
31 - Qwen/Qwen3-0.6B
32 - --disaggregation-mode
33 - decode
34 - --kv-transfer-config
35 - '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'
36 command:
37 - python3
38 - -m
39 - dynamo.vllm
40 env:
41 - name: OTEL_SERVICE_NAME
42 value: dynamo-worker-decode
43 envFrom:
44 - secretRef:
45 name: hf-token-secret
46 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
47 name: main
48 resources:
49 limits:
50 nvidia.com/gpu: "1"
51 requests:
52 # Increase this value for larger models.
53 ephemeral-storage: 2Gi
54 workingDir: /workspace/examples/backends/vllm
55 replicas: 1
56 type: decode
57 - name: VllmPrefillWorker
58 podTemplate:
59 spec:
60 containers:
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"}'
68 command:
69 - python3
70 - -m
71 - dynamo.vllm
72 env:
73 - name: OTEL_SERVICE_NAME
74 value: dynamo-worker-prefill
75 envFrom:
76 - secretRef:
77 name: hf-token-secret
78 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
79 name: main
80 resources:
81 limits:
82 nvidia.com/gpu: "1"
83 requests:
84 # Increase this value for larger models.
85 ephemeral-storage: 2Gi
86 workingDir: /workspace/examples/backends/vllm
87 replicas: 1
88 type: prefill
89 env:
90 - name: DYN_LOGGING_JSONL
91 value: "true"
92 - name: OTEL_EXPORT_ENABLED
93 value: "true"
94 - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
95 value: http://tempo.observability.svc.cluster.local:4317
disagg-multinode.yaml
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2# SPDX-License-Identifier: Apache-2.0
3
4apiVersion: nvidia.com/v1beta1
5kind: DynamoGraphDeployment
6metadata:
7 name: vllm-disagg
8spec:
9 components:
10 - name: Frontend
11 podTemplate:
12 spec:
13 containers:
14 - args:
15 - --http-port
16 - "8000"
17 command:
18 - python3
19 - -m
20 - dynamo.frontend
21 image: my-registry/vllm-runtime:my-tag
22 name: main
23 workingDir: /workspace/examples/backends/vllm
24 replicas: 1
25 type: frontend
26 - multinode:
27 nodeCount: 2
28 name: decode
29 podTemplate:
30 spec:
31 containers:
32 - args:
33 - --model
34 - Qwen/Qwen3-0.6B
35 - --tensor-parallel-size
36 - "2"
37 - --disaggregation-mode
38 - decode
39 - --kv-transfer-config
40 - '{"kv_connector": "NixlConnector", "kv_role": "kv_both", "engine_id":
41 "vllm-disagg-decode-engine-0abc123"}'
42 command:
43 - python3
44 - -m
45 - dynamo.vllm
46 envFrom:
47 - secretRef:
48 name: hf-token-secret
49 image: my-registry/vllm-runtime:my-tag
50 name: main
51 resources:
52 limits:
53 nvidia.com/gpu: "1"
54 workingDir: /workspace/examples/backends/vllm
55 replicas: 1
56 type: decode
57 - multinode:
58 nodeCount: 2
59 name: prefill
60 podTemplate:
61 spec:
62 containers:
63 - args:
64 - --model
65 - Qwen/Qwen3-0.6B
66 - --tensor-parallel-size
67 - "2"
68 - --disaggregation-mode
69 - prefill
70 - --kv-transfer-config
71 - '{"kv_connector": "NixlConnector", "kv_role": "kv_both", "engine_id":
72 "vllm-disagg-prefill-engine-0abc123"}'
73 command:
74 - python3
75 - -m
76 - dynamo.vllm
77 envFrom:
78 - secretRef:
79 name: hf-token-secret
80 image: my-registry/vllm-runtime:my-tag
81 name: main
82 resources:
83 limits:
84 nvidia.com/gpu: "1"
85 workingDir: /workspace/examples/backends/vllm
86 replicas: 1
87 type: prefill
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
4apiVersion: resource.k8s.io/v1
5kind: ResourceClaimTemplate
6metadata:
7 name: gpu-template
8spec:
9 spec:
10 devices:
11 requests:
12 - name: gpu
13 exactly:
14 deviceClassName: gpu.intel.com
15 count: 1
16---
17apiVersion: nvidia.com/v1beta1
18kind: DynamoGraphDeployment
19metadata:
20 name: vllm-disagg-xpu-dra
21spec:
22 components:
23 - name: Frontend
24 podTemplate:
25 spec:
26 containers:
27 - envFrom:
28 - secretRef:
29 name: hf-token-secret
30 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tag
31 name: main
32 replicas: 1
33 type: frontend
34 - name: VllmDecodeWorker
35 podTemplate:
36 spec:
37 containers:
38 - args:
39 - --model
40 - Qwen/Qwen3-0.6B
41 - --disaggregation-mode
42 - decode
43 - --kv-transfer-config
44 - '{"kv_connector":"NixlConnector","kv_role":"kv_consumer","kv_buffer_device":"xpu"}'
45 - --block-size
46 - "64"
47 command:
48 - python3
49 - -m
50 - dynamo.vllm
51 env:
52 - name: VLLM_TARGET_DEVICE
53 value: xpu
54 envFrom:
55 - secretRef:
56 name: hf-token-secret
57 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime-xpu:my-tag
58 name: main
59 resources:
60 claims:
61 - name: gpu
62 requests:
63 # Increase this value for larger models.
64 ephemeral-storage: 2Gi
65 workingDir: /workspace/examples/backends/vllm
66 resourceClaims:
67 - name: gpu
68 resourceClaimTemplateName: gpu-template
69 # NOTE: Uncomment if your environment requires specific group access
70 # securityContext:
71 # runAsUser: 1000
72 # runAsGroup: 1000
73 # supplementalGroups:
74 # - 44 # render group
75 # - 991 # video group
76 replicas: 1
77 type: decode
78 - name: VllmPrefillWorker
79 podTemplate:
80 spec:
81 containers:
82 - args:
83 - --model
84 - Qwen/Qwen3-0.6B
85 - --disaggregation-mode
86 - prefill
87 - --kv-transfer-config
88 - '{"kv_connector":"NixlConnector","kv_role":"kv_both","kv_buffer_device":"xpu"}'
89 - --block-size
90 - "64"
91 command:
92 - python3
93 - -m
94 - dynamo.vllm
95 env:
96 - name: VLLM_TARGET_DEVICE
97 value: xpu
98 envFrom:
99 - secretRef:
100 name: hf-token-secret
101 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime-xpu:my-tag
102 name: main
103 resources:
104 claims:
105 - name: gpu
106 requests:
107 # Increase this value for larger models.
108 ephemeral-storage: 2Gi
109 workingDir: /workspace/examples/backends/vllm
110 resourceClaims:
111 - name: gpu
112 resourceClaimTemplateName: gpu-template
113 # NOTE: Uncomment if your environment requires specific group access
114 # securityContext:
115 # runAsUser: 1000
116 # runAsGroup: 1000
117 # supplementalGroups:
118 # - 44 # render group
119 # - 991 # video group
120 replicas: 1
121 type: prefill

Other

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 variants you can use under .spec.components:
14#
15# Single-node GMS:
16# Creates per PCSG replica:
17# - 1 GMS weight-server pod (<component>-gms-0)
18# - numShadows + 1 engine pods (<component>, replicas = numShadows + 1)
19# All engine pods + the GMS pod share the same GPUs via DRA ResourceClaims.
20# component.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 (<component>-gms-<rank>)
26# - numShadows + 1 engine pods per rank
27# rank 0: <component>-ldr (leader, replicas = numShadows + 1)
28# rank R: <component>-wkr-R (worker R, replicas = numShadows + 1)
29# Each rank's GMS + engine pods share GPUs via DRA within that node.
30# component.replicas controls horizontal PCSG replicas.
31apiVersion: nvidia.com/v1beta1
32kind: DynamoGraphDeployment
33metadata:
34 annotations:
35 nvidia.com/dynamo-kube-discovery-mode: container
36 name: llm-serving-mn
37spec:
38 backendFramework: vllm
39 components:
40 # --- Single-node GMS failover ---
41 - experimental:
42 failover:
43 mode: InterPod
44 numShadows: 1 # 1 primary + 1 shadow = 2 engine pods per PCSG replica
45 gpuMemoryService:
46 mode: InterPod
47 name: agg
48 podTemplate:
49 spec:
50 containers:
51 - args:
52 - --model
53 - Qwen/Qwen3-0.6B
54 - --tensor-parallel-size
55 - "1"
56 - --enforce-eager
57 - --gpu-memory-utilization
58 - "0.85"
59 command:
60 - python3
61 - -m
62 - dynamo.vllm
63 envFrom:
64 - secretRef:
65 name: hf-token-secret
66 image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:latest
67 name: main
68 resources:
69 limits:
70 nvidia.com/gpu: "1"
71 replicas: 1
72 # sharedMemorySize: 16Gi
73 type: worker
74
75 # --- Multinode GMS failover (2 nodes) ---
76 # - experimental:
77 # failover:
78 # mode: InterPod
79 # numShadows: 1 # 1 primary + 1 shadow = 2 engine pods per rank
80 # gpuMemoryService:
81 # mode: InterPod
82 # multinode:
83 # nodeCount: 2
84 # name: agg
85 # podTemplate:
86 # spec:
87 # containers:
88 # - args:
89 # # args: ["--model", "Qwen/Qwen3-235B-A22B", "--tensor-parallel-size", "8", "--enforce-eager", "--gpu-memory-utilization", "0.85"]
90 # - --model
91 # - Qwen/Qwen3-0.6B
92 # - --tensor-parallel-size
93 # - "2"
94 # - --enforce-eager
95 # - --gpu-memory-utilization
96 # - "0.85"
97 # command:
98 # - python3
99 # - -m
100 # - dynamo.vllm
101 # envFrom:
102 # - secretRef:
103 # name: hf-token-secret
104 # image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:latest
105 # name: main
106 # resources:
107 # limits:
108 # nvidia.com/gpu: "1"
109 # replicas: 1
110 # # sharedMemorySize: 16Gi
111 # type: worker
112
113 # --- Regular frontend (no failover) ---
114 - name: frontend
115 podTemplate:
116 spec:
117 containers:
118 - image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:latest
119 # command: ["python3", "-m", "dynamo.frontend"]
120 name: main
121 replicas: 1
122 type: frontend

Source

All templates live in examples/backends/vllm/deploy/. For local launch commands, see vLLM Local Deployment Examples.