vLLM Deployment Templates
Ready-to-apply DynamoGraphDeployment manifests for serving vLLM with Dynamo on Kubernetes.
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 · Baseline aggregated serving
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-aggspec:components:- name: FrontendpodTemplate:spec:containers:- envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: workerpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6Bcommand:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"requests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 1type: worker
agg_router.yaml · Aggregated with KV-aware routing
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-agg-routerspec:components:- name: FrontendpodTemplate:spec:containers:- env:- name: DYN_ROUTER_MODEvalue: kvimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: workerpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --kv-events-config- '{"publisher":"zmq","topic":"kv-events","endpoint":"tcp://*:20080","enable_kv_cache_events":true}'command:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"requests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 2type: worker
agg_router_kv_approx.yaml · KV routing with approximate cache tracking (no NATS/KV events)
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0## This example demonstrates KV-aware routing with the --no-kv-events flag.## Instead of receiving KV events from workers, the router predicts cache state## locally based on routing decisions with TTL-based expiration and pruning.## Note: This mode does not require NATS during Dynamo platform deployment.apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-agg-router-kv-approxspec:components:- name: FrontendpodTemplate:spec:containers:- args:- -m- dynamo.frontend- --router-mode- kv- --no-kv-eventscommand:- python3env:- name: DYN_ROUTER_MODEvalue: kvimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: workerpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --kv-events-config- '{"enable_kv_cache_events": false}'command:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"workingDir: /workspace/examples/backends/vllmreplicas: 2type: worker
agg_kvbm.yaml · Aggregated with KV Block Manager offloading
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-agg-kvbmspec:components:- name: FrontendpodTemplate:spec:containers:- image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: workerpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-8B- --max-model-len- "32000"- --enforce-eager- --kv-transfer-config- '{"kv_connector":"DynamoConnector","kv_connector_module_path":"kvbm.vllm_integration.connector","kv_role":"kv_both"}'command:- python3- -m- dynamo.vllmenv:- name: DYN_KVBM_CPU_CACHE_GBvalue: "100"envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:memory: 250Ginvidia.com/gpu: "1"requests:memory: 200Ginvidia.com/gpu: "1"workingDir: /workspace/examples/backends/vllmreplicas: 1type: worker
agg_gms.yaml · Aggregated with GPU Memory Service sidecar
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0## GPU Memory Service (GMS) sidecar example.## The operator injects a GMS sidecar init container that provides shared GPU# memory access via DRA (Dynamic Resource Allocation). The sidecar runs two GMS# processes per GPU (weights + kv_cache) and communicates with the main container# over UDS sockets on a shared emptyDir volume.## Requires Kubernetes 1.34+ with DRA v1 enabled and the NVIDIA GPU DRA driver installed.apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-agg-gmsspec:components:- name: FrontendpodTemplate:spec:containers:- envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- experimental:gpuMemoryService: {}name: workerpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --load-format- gmscommand:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"requests:ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 1type: worker
agg_failover.yaml · Active-passive GPU failover
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0## Active-passive GPU failover example.## The operator clones the worker's main container into two engine containers# (engine-0 active, engine-1 standby) sharing GPUs via DRA and the GMS sidecar.# When the active engine fails, the standby acquires the flock and takes over.## Requires:# - experimental.gpuMemoryService: {} (GMS sidecar + DRA)# - nvidia.com/dynamo-kube-discovery-mode: container (per-container K8s discovery)# - Kubernetes 1.34+ with DRA v1 enabled and the NVIDIA GPU DRA driver installedapiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:annotations:nvidia.com/dynamo-kube-discovery-mode: containername: vllm-agg-failoverspec:components:- name: FrontendpodTemplate:spec:containers:- envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- experimental:failover: {}gpuMemoryService: {}name: workerpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --tensor-parallel-size- "2"- --load-format- gmscommand:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "2"requests:ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 1type: worker
agg_tracing.yaml · Aggregated with OpenTelemetry tracing
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0# Aggregated vLLM deployment with OpenTelemetry tracing enabled.# Base deployment: agg.yaml# See docs/observability/tracing.md for setup instructions.apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-agg-tracingspec:components:- name: FrontendpodTemplate:spec:containers:- env:- name: OTEL_SERVICE_NAMEvalue: dynamo-frontendenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: workerpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6Bcommand:- python3- -m- dynamo.vllmenv:- name: OTEL_SERVICE_NAMEvalue: dynamo-worker-vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"requests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 1type: workerenv:- name: DYN_LOGGING_JSONLvalue: "true"- name: OTEL_EXPORT_ENABLEDvalue: "true"- name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINTvalue: http://tempo.observability.svc.cluster.local:4317
agg_xpu_dra.yaml · Aggregated with Dynamic Resource Allocation (bundles a ResourceClaimTemplate)
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: resource.k8s.io/v1kind: ResourceClaimTemplatemetadata:name: gpu-templatespec:spec:devices:requests:- name: gpuexactly:deviceClassName: gpu.intel.comcount: 1---apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-agg-xpu-draspec:components:- name: FrontendpodTemplate:spec:containers:- envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: workerpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --block-size- "64"command:- python3- -m- dynamo.vllmenv:- name: VLLM_TARGET_DEVICEvalue: xpuenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime-xpu:my-tagname: mainresources:claims:- name: gpurequests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmresourceClaims:- name: gpuresourceClaimTemplateName: gpu-template# NOTE: Uncomment if your environment requires specific group access# securityContext:# runAsUser: 1000# runAsGroup: 1000# supplementalGroups:# - 44 # render group# - 991 # video groupreplicas: 1type: worker
Disaggregated
disagg.yaml · Baseline disaggregated prefill/decode
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-disaggspec:components:- name: FrontendpodTemplate:spec:containers:- image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: decodepodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --disaggregation-mode- decode- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'command:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"requests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 1type: decode- name: prefillpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --disaggregation-mode- prefill- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'command:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"requests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 1type: prefill
disagg_router.yaml · Disaggregated with KV-aware routing
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-v1-disagg-routerspec:components:- name: FrontendpodTemplate:spec:containers:- env:- name: DYN_ROUTER_MODEvalue: kvimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: decodepodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --disaggregation-mode- decode- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'command:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"requests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 2type: decode- name: prefillpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --disaggregation-mode- prefill- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'- --kv-events-config- '{"publisher":"zmq","topic":"kv-events","endpoint":"tcp://*:20080","enable_kv_cache_events":true}'command:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"requests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 2type: prefill
disagg_planner.yaml · Disaggregated with Dynamo Planner autoscaling
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-disagg-plannerspec:components:- name: FrontendpodTemplate:spec:containers:- image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: PlannerpodTemplate:spec:containers:- args:- --config- '{"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}'command:- python3- -m- dynamo.planner# Planner image selection:# Dynamo >= 1.1.0: use the dedicated planner image# nvcr.io/nvidia/ai-dynamo/dynamo-planner:<version># (backend runtime images no longer ship planner runtime deps# such as kubernetes_asyncio, pmdarima, prophet, aiconfigurator).# Dynamo < 1.1.0: use the backend runtime image# nvcr.io/nvidia/ai-dynamo/vllm-runtime:<version>.image: nvcr.io/nvidia/ai-dynamo/dynamo-planner:my-tagname: mainreplicas: 1type: planner- name: decodepodTemplate:spec:containers:- args:- -m- dynamo.vllm- --model- Qwen/Qwen3-0.6B- --disaggregation-mode- decode- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'command:- python3envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"workingDir: /workspace/examples/backends/vllmreplicas: 1type: decode- name: prefillpodTemplate:spec:containers:- args:- -m- dynamo.vllm- --model- Qwen/Qwen3-0.6B- --disaggregation-mode- prefill- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'command:- python3envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"workingDir: /workspace/examples/backends/vllmreplicas: 1type: prefill
disagg_kvbm.yaml · Disaggregated with KV Block Manager offloading
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-disagg-kvbmspec:components:- name: FrontendpodTemplate:spec:containers:- image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: decodepodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-8B- --disaggregation-mode- decode- --disable-hybrid-kv-cache-manager- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'- --max-model-len- "32000"- --enforce-eagercommand:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"workingDir: /workspace/examples/backends/vllmreplicas: 1type: decode- name: prefillpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-8B- --disaggregation-mode- prefill- --disable-hybrid-kv-cache-manager- --max-model-len- "32000"- --enforce-eager- --kv-transfer-config- '{"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"}'command:- python3- -m- dynamo.vllmenv:- name: DYN_KVBM_CPU_CACHE_GBvalue: "100"envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:memory: 250Ginvidia.com/gpu: "1"requests:memory: 200Ginvidia.com/gpu: "1"workingDir: /workspace/examples/backends/vllmreplicas: 1type: prefill
disagg_kvbm_tp2.yaml · Disaggregated KVBM, tensor-parallel 2
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-disagg-kvbm-tp2spec:components:- name: FrontendpodTemplate:spec:containers:- image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: decodepodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-8B- --disaggregation-mode- decode- --disable-hybrid-kv-cache-manager- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'- --gpu-memory-utilization- "0.23"- --max-model-len- "32000"- --enforce-eager- --tensor-parallel-size- "2"command:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "2"requests:nvidia.com/gpu: "2"workingDir: /workspace/examples/backends/vllmreplicas: 1type: decode- name: prefillpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-8B- --disaggregation-mode- prefill- --disable-hybrid-kv-cache-manager- --gpu-memory-utilization- "0.23"- --max-model-len- "32000"- --enforce-eager- --kv-transfer-config- '{"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"}'- --tensor-parallel-size- "2"command:- python3- -m- dynamo.vllmenv:- name: DYN_KVBM_CPU_CACHE_GBvalue: "100"envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:memory: 250Ginvidia.com/gpu: "2"requests:memory: 200Ginvidia.com/gpu: "2"workingDir: /workspace/examples/backends/vllmreplicas: 1type: prefill
disagg_kvbm_2p2d.yaml · Disaggregated KVBM, 2 prefill + 2 decode workers
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-disagg-kvbm-2p2dspec:components:- name: FrontendpodTemplate:spec:containers:- image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: decodepodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-8B- --disaggregation-mode- decode- --disable-hybrid-kv-cache-manager- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'- --max-model-len- "32000"- --enforce-eagercommand:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"workingDir: /workspace/examples/backends/vllmreplicas: 2type: decode- name: prefillpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-8B- --disaggregation-mode- prefill- --disable-hybrid-kv-cache-manager- --max-model-len- "32000"- --enforce-eager- --kv-transfer-config- '{"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"}'command:- python3- -m- dynamo.vllmenv:- name: DYN_KVBM_CPU_CACHE_GBvalue: "100"envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:memory: 250Ginvidia.com/gpu: "1"requests:memory: 200Ginvidia.com/gpu: "1"workingDir: /workspace/examples/backends/vllmreplicas: 2type: prefill
disagg_tracing.yaml · Disaggregated with OpenTelemetry tracing
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0# Disaggregated vLLM deployment with OpenTelemetry tracing enabled.# Base deployment: disagg.yaml# See docs/observability/tracing.md for setup instructions.apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-disagg-tracingspec:components:- name: FrontendpodTemplate:spec:containers:- env:- name: OTEL_SERVICE_NAMEvalue: dynamo-frontendimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: decodepodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --disaggregation-mode- decode- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'command:- python3- -m- dynamo.vllmenv:- name: OTEL_SERVICE_NAMEvalue: dynamo-worker-decodeenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"requests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 1type: decode- name: prefillpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --disaggregation-mode- prefill- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both"}'command:- python3- -m- dynamo.vllmenv:- name: OTEL_SERVICE_NAMEvalue: dynamo-worker-prefillenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"requests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmreplicas: 1type: prefillenv:- name: DYN_LOGGING_JSONLvalue: "true"- name: OTEL_EXPORT_ENABLEDvalue: "true"- name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINTvalue: http://tempo.observability.svc.cluster.local:4317
disagg-multinode.yaml · Disaggregated across multiple nodes
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-disaggspec:components:- name: FrontendpodTemplate:spec:containers:- args:- --http-port- "8000"command:- python3- -m- dynamo.frontendimage: my-registry/vllm-runtime:my-tagname: mainworkingDir: /workspace/examples/backends/vllmreplicas: 1type: frontend- multinode:nodeCount: 2name: decodepodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --tensor-parallel-size- "2"- --disaggregation-mode- decode- --kv-transfer-config- '{"kv_connector": "NixlConnector", "kv_role": "kv_both", "engine_id":"vllm-disagg-decode-engine-0abc123"}'command:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: my-registry/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"workingDir: /workspace/examples/backends/vllmreplicas: 1type: decode- multinode:nodeCount: 2name: prefillpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --tensor-parallel-size- "2"- --disaggregation-mode- prefill- --kv-transfer-config- '{"kv_connector": "NixlConnector", "kv_role": "kv_both", "engine_id":"vllm-disagg-prefill-engine-0abc123"}'command:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: my-registry/vllm-runtime:my-tagname: mainresources:limits:nvidia.com/gpu: "1"workingDir: /workspace/examples/backends/vllmreplicas: 1type: prefill
disagg_xpu_dra.yaml · Disaggregated with Dynamic Resource Allocation (bundles a ResourceClaimTemplate)
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0apiVersion: resource.k8s.io/v1kind: ResourceClaimTemplatemetadata:name: gpu-templatespec:spec:devices:requests:- name: gpuexactly:deviceClassName: gpu.intel.comcount: 1---apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:name: vllm-disagg-xpu-draspec:components:- name: FrontendpodTemplate:spec:containers:- envFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:my-tagname: mainreplicas: 1type: frontend- name: decodepodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --disaggregation-mode- decode- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_consumer","kv_buffer_device":"xpu"}'- --block-size- "64"command:- python3- -m- dynamo.vllmenv:- name: VLLM_TARGET_DEVICEvalue: xpuenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime-xpu:my-tagname: mainresources:claims:- name: gpurequests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmresourceClaims:- name: gpuresourceClaimTemplateName: gpu-template# NOTE: Uncomment if your environment requires specific group access# securityContext:# runAsUser: 1000# runAsGroup: 1000# supplementalGroups:# - 44 # render group# - 991 # video groupreplicas: 1type: decode- name: prefillpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --disaggregation-mode- prefill- --kv-transfer-config- '{"kv_connector":"NixlConnector","kv_role":"kv_both","kv_buffer_device":"xpu"}'- --block-size- "64"command:- python3- -m- dynamo.vllmenv:- name: VLLM_TARGET_DEVICEvalue: xpuenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime-xpu:my-tagname: mainresources:claims:- name: gpurequests:# Increase this value for larger models.ephemeral-storage: 2GiworkingDir: /workspace/examples/backends/vllmresourceClaims:- name: gpuresourceClaimTemplateName: gpu-template# NOTE: Uncomment if your environment requires specific group access# securityContext:# runAsUser: 1000# runAsGroup: 1000# supplementalGroups:# - 44 # render group# - 991 # video groupreplicas: 1type: prefill
Other
gms-failover.yaml · Multinode GPU Memory Service with failover (bundles a ResourceClaimTemplate)
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.# SPDX-License-Identifier: Apache-2.0# Example: DynamoGraphDeployment with inter-pod GMS (GPU Memory Service)# failover on vLLM.## Inter-pod GMS failover splits the traditional single-engine pod into:# * a dedicated GMS weight-server pod (per rank) that owns the model weights# and exposes them over a shared-GPU UDS, and# * N engine pods (per rank) that attach to the same GPUs via DRA and race# for a flock; the winner becomes primary, the others are hot shadows.## This file contains variants you can use under .spec.components:## Single-node GMS:# Creates per PCSG replica:# - 1 GMS weight-server pod (<component>-gms-0)# - numShadows + 1 engine pods (<component>, replicas = numShadows + 1)# All engine pods + the GMS pod share the same GPUs via DRA ResourceClaims.# component.replicas controls how many PCSG replicas are created# (horizontal scale).## Multinode GMS (N nodes):# Creates per PCSG replica:# - 1 GMS weight-server pod per rank (<component>-gms-<rank>)# - numShadows + 1 engine pods per rank# rank 0: <component>-ldr (leader, replicas = numShadows + 1)# rank R: <component>-wkr-R (worker R, replicas = numShadows + 1)# Each rank's GMS + engine pods share GPUs via DRA within that node.# component.replicas controls horizontal PCSG replicas.apiVersion: nvidia.com/v1beta1kind: DynamoGraphDeploymentmetadata:annotations:nvidia.com/dynamo-kube-discovery-mode: containername: llm-serving-mnspec:backendFramework: vllmcomponents:# --- Single-node GMS failover ---- experimental:failover:mode: InterPodnumShadows: 1 # 1 primary + 1 shadow = 2 engine pods per PCSG replicagpuMemoryService:mode: InterPodname: aggpodTemplate:spec:containers:- args:- --model- Qwen/Qwen3-0.6B- --tensor-parallel-size- "1"- --enforce-eager- --gpu-memory-utilization- "0.85"command:- python3- -m- dynamo.vllmenvFrom:- secretRef:name: hf-token-secretimage: nvcr.io/nvidia/ai-dynamo/vllm-runtime:latestname: mainresources:limits:nvidia.com/gpu: "1"replicas: 1# sharedMemorySize: 16Gitype: worker# --- Multinode GMS failover (2 nodes) ---# - experimental:# failover:# mode: InterPod# numShadows: 1 # 1 primary + 1 shadow = 2 engine pods per rank# gpuMemoryService:# mode: InterPod# multinode:# nodeCount: 2# name: agg# podTemplate:# spec:# containers:# - args:# # args: ["--model", "Qwen/Qwen3-235B-A22B", "--tensor-parallel-size", "8", "--enforce-eager", "--gpu-memory-utilization", "0.85"]# - --model# - Qwen/Qwen3-0.6B# - --tensor-parallel-size# - "2"# - --enforce-eager# - --gpu-memory-utilization# - "0.85"# command:# - python3# - -m# - dynamo.vllm# envFrom:# - secretRef:# name: hf-token-secret# image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:latest# name: main# resources:# limits:# nvidia.com/gpu: "1"# replicas: 1# # sharedMemorySize: 16Gi# type: worker# --- Regular frontend (no failover) ---- name: frontendpodTemplate:spec:containers:- image: nvcr.io/nvidia/ai-dynamo/vllm-runtime:latest# command: ["python3", "-m", "dynamo.frontend"]name: mainreplicas: 1type: frontend
Source
All templates live in
examples/backends/vllm/deploy/.
For local launch commands, see vLLM Local Deployment Examples.