# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 apiVersion: nvidia.com/v1alpha1 kind: DynamoGraphDeployment metadata: name: vllm-disagg-planner spec: envs: - name: DYNAMO_SERVICE_CONFIG value: '{"Prometheus":{"global":{"scrape_interval":"5s"},"scrape_configs":[{"job_name":"prometheus","static_configs":[{"targets":["localhost:9090"]}]},{"job_name":"frontend","static_configs":[{"targets":["vllm-disagg-planner-frontend:8000"]}]}]}}' - name: DYNAMO_PORT value: "8000" - name: DYNAMO_NAMESPACE value: "vllm-disagg-planner" services: Frontend: dynamoNamespace: vllm-disagg-planner componentType: main replicas: 1 livenessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 60 periodSeconds: 60 timeoutSeconds: 30 failureThreshold: 10 readinessProbe: exec: command: - /bin/sh - -c - 'curl -s http://localhost:8000/health | jq -e ".status == \"healthy\""' initialDelaySeconds: 60 periodSeconds: 60 timeoutSeconds: 30 failureThreshold: 10 resources: requests: cpu: "32" memory: "10Gi" limits: cpu: "32" memory: "10Gi" extraPodSpec: mainContainer: image: nvcr.io/nvidian/nim-llm-dev/vllm-runtime:dep-253.17 workingDir: /workspace/components/backends/vllm command: - /bin/sh - -c args: - "python3 -m dynamo.frontend --http-port 8000" Planner: dynamoNamespace: vllm-disagg-planner envFromSecret: hf-token-secret componentType: planner replicas: 1 livenessProbe: exec: command: - /bin/sh - -c - "exit 0" periodSeconds: 60 timeoutSeconds: 30 failureThreshold: 10 readinessProbe: exec: command: - /bin/sh - -c - "exit 0" initialDelaySeconds: 60 periodSeconds: 60 timeoutSeconds: 30 failureThreshold: 10 resources: requests: cpu: "2" memory: "2Gi" limits: cpu: "2" memory: "2Gi" pvc: create: false name: profiling-pvc # Must be pre-created before deployment and SLA profiler must have been run mountPoint: /workspace/profiling_results extraPodSpec: mainContainer: image: nvcr.io/nvidian/nim-llm-dev/vllm-runtime:dep-253.17 workingDir: /workspace/components/planner/src/dynamo/planner args: - python - -m - planner_sla - --environment=kubernetes - --backend=vllm - --adjustment-interval=60 - --profile-results-dir=/workspace/profiling_results Prometheus: dynamoNamespace: vllm-disagg-planner componentType: main replicas: 1 envs: - name: PYTHONPATH value: "/workspace/components/planner/src" livenessProbe: exec: command: - /bin/sh - -c - "exit 0" periodSeconds: 60 timeoutSeconds: 30 failureThreshold: 10 readinessProbe: exec: command: - /bin/sh - -c - "exit 0" initialDelaySeconds: 30 periodSeconds: 60 timeoutSeconds: 30 failureThreshold: 10 resources: requests: cpu: "2" memory: "2Gi" limits: cpu: "2" memory: "2Gi" extraPodSpec: mainContainer: image: nvcr.io/nvidian/nim-llm-dev/vllm-runtime:dep-253.17 workingDir: /workspace/components/backends/vllm command: - /bin/sh - -c args: - "python3 -m dynamo.planner.prometheus" VllmDecodeWorker: dynamoNamespace: vllm-disagg-planner envFromSecret: hf-token-secret componentType: worker replicas: 2 livenessProbe: httpGet: path: /live port: 9090 periodSeconds: 5 timeoutSeconds: 30 failureThreshold: 1 readinessProbe: httpGet: path: /health port: 9090 periodSeconds: 10 timeoutSeconds: 30 failureThreshold: 60 resources: requests: cpu: "8" memory: "16Gi" gpu: "1" limits: cpu: "8" memory: "16Gi" gpu: "1" envs: - name: DYN_SYSTEM_ENABLED value: "true" - name: DYN_SYSTEM_USE_ENDPOINT_HEALTH_STATUS value: "[\"generate\"]" - name: DYN_SYSTEM_PORT value: "9090" extraPodSpec: mainContainer: startupProbe: httpGet: path: /health port: 9090 periodSeconds: 10 failureThreshold: 60 image: nvcr.io/nvidian/nim-llm-dev/vllm-runtime:dep-253.17 workingDir: /workspace/components/backends/vllm command: - /bin/sh - -c args: - "python3 -m dynamo.vllm --model Qwen/Qwen3-0.6B 2>&1 | tee /tmp/vllm.log" VllmPrefillWorker: dynamoNamespace: vllm-disagg-planner envFromSecret: hf-token-secret componentType: worker replicas: 2 livenessProbe: httpGet: path: /health port: 9090 periodSeconds: 5 timeoutSeconds: 30 failureThreshold: 1 readinessProbe: httpGet: path: /health port: 9090 periodSeconds: 10 timeoutSeconds: 30 failureThreshold: 60 resources: requests: cpu: "8" memory: "16Gi" gpu: "1" limits: cpu: "8" memory: "16Gi" gpu: "1" envs: - name: DYN_SYSTEM_ENABLED value: "true" - name: DYN_SYSTEM_USE_ENDPOINT_HEALTH_STATUS value: "[\"generate\"]" - name: DYN_SYSTEM_PORT value: "9090" extraPodSpec: mainContainer: startupProbe: httpGet: path: /health port: 9090 periodSeconds: 10 failureThreshold: 60 image: nvcr.io/nvidian/nim-llm-dev/vllm-runtime:dep-253.17 workingDir: /workspace/components/backends/vllm command: - /bin/sh - -c args: - python3 -m dynamo.vllm --model Qwen/Qwen3-0.6B --is-prefill-worker 2>&1 | tee /tmp/vllm.log