|
| 1 | +# DP-aware sidecar validation rig: 1 prefill (engine only) + 1 decode |
| 2 | +# (sidecar:dp-aware + engine). Llama-8B TP=1, MultiConnector(NIXL + |
| 3 | +# Offloading p2p tier), generic_p2p overlay. No EPP labels - driven by |
| 4 | +# direct curls with x-prefiller-host-port / x-kv-cache-source-host-port. |
| 5 | +apiVersion: apps/v1 |
| 6 | +kind: Deployment |
| 7 | +metadata: {name: llama-pd-prefill, namespace: nilig-p2p, labels: {app: llama-pd, role: prefill}} |
| 8 | +spec: |
| 9 | + replicas: 1 |
| 10 | + selector: {matchLabels: {app: llama-pd, role: prefill}} |
| 11 | + template: |
| 12 | + metadata: {labels: {app: llama-pd, role: prefill}} |
| 13 | + spec: |
| 14 | + serviceAccountName: pd-disaggregation-nvidia-gpu-vllm-sa |
| 15 | + containers: |
| 16 | + - name: modelserver |
| 17 | + image: quay.io/niliguy/vllm-openai:nightly-2afa3f7e950264bb179d030c23a1ed1f46558fd9 |
| 18 | + imagePullPolicy: IfNotPresent |
| 19 | + command: ["sh","-c","rm -f /dev/shm/vllm_offload_*.mmap 2>/dev/null; exec vllm serve \"$@\"","sh"] |
| 20 | + args: |
| 21 | + - meta-llama/Llama-3.1-8B-Instruct |
| 22 | + - --port=8000 |
| 23 | + - --tensor-parallel-size=1 |
| 24 | + - --block-size=64 |
| 25 | + - --max-model-len=20000 |
| 26 | + - --gpu-memory-utilization=0.6 |
| 27 | + - --kv-events-config |
| 28 | + - '{"enable_kv_cache_events":true,"publisher":"zmq","endpoint":"tcp://*:5556","topic":"kv@$(POD_IP):8000@meta-llama/Llama-3.1-8B-Instruct"}' |
| 29 | + - --kv-transfer-config |
| 30 | + - '{"kv_connector":"MultiConnector","kv_role":"kv_both","kv_connector_extra_config":{"connectors":[{"kv_connector":"NixlConnector","kv_role":"kv_both"},{"kv_connector":"OffloadingConnector","kv_role":"kv_both","kv_connector_extra_config":{"spec_name":"TieringOffloadingSpec","cpu_bytes_to_use":17179869184,"offload_prompt_only":false,"secondary_tiers":[{"type":"p2p","host":"$(POD_IP)","port":7777}]}}]}}' |
| 31 | + env: |
| 32 | + - {name: HF_TOKEN, valueFrom: {secretKeyRef: {name: llm-d-hf-token, key: HF_TOKEN}}} |
| 33 | + - {name: POD_IP, valueFrom: {fieldRef: {apiVersion: v1, fieldPath: status.podIP}}} |
| 34 | + - {name: PYTHONHASHSEED, value: "0"} |
| 35 | + - {name: VLLM_NIXL_SIDE_CHANNEL_HOST, valueFrom: {fieldRef: {apiVersion: v1, fieldPath: status.podIP}}} |
| 36 | + - {name: VLLM_NIXL_SIDE_CHANNEL_PORT, value: "5600"} |
| 37 | + ports: [{containerPort: 8000}, {containerPort: 5600}, {containerPort: 7777}, {containerPort: 5556}] |
| 38 | + resources: {limits: {cpu: "8", memory: 48Gi, nvidia.com/gpu: "1", rdma/ib: "1"}, requests: {cpu: "8", memory: 48Gi, nvidia.com/gpu: "1", rdma/ib: "1"}} |
| 39 | + startupProbe: {httpGet: {path: /v1/models, port: 8000}, initialDelaySeconds: 10, periodSeconds: 15, failureThreshold: 60} |
| 40 | + readinessProbe: {httpGet: {path: /v1/models, port: 8000}, periodSeconds: 5, failureThreshold: 3} |
| 41 | + volumeMounts: |
| 42 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/envs.py, name: gp2p, subPath: envs.py} |
| 43 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/spec.py, name: gp2p, subPath: spec.py} |
| 44 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/manager.py, name: gp2p, subPath: tiering_manager.py} |
| 45 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/manager.py, name: gp2p, subPath: manager.py} |
| 46 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/data/base.py, name: gp2p, subPath: data_base.py} |
| 47 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/data/nixl.py, name: gp2p, subPath: data_nixl.py} |
| 48 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/session/client.py, name: gp2p, subPath: session_client.py} |
| 49 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/session/protocol.py, name: gp2p, subPath: session_protocol.py} |
| 50 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/session/server.py, name: gp2p, subPath: session_server.py} |
| 51 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/session/session.py, name: gp2p, subPath: session_session.py} |
| 52 | + - {mountPath: /dev/shm, name: shm} |
| 53 | + - {mountPath: /.cache, name: cache} |
| 54 | + - {mountPath: /.config, name: cfg} |
| 55 | + - {mountPath: /.triton, name: triton} |
| 56 | + volumes: |
| 57 | + - {name: shm, emptyDir: {medium: Memory, sizeLimit: 24Gi}} |
| 58 | + - {name: gp2p, configMap: {name: generic-p2p-src}} |
| 59 | + - {name: cache, emptyDir: {}} |
| 60 | + - {name: cfg, emptyDir: {}} |
| 61 | + - {name: triton, emptyDir: {}} |
| 62 | +--- |
| 63 | +apiVersion: apps/v1 |
| 64 | +kind: Deployment |
| 65 | +metadata: {name: llama-pd-decode, namespace: nilig-p2p, labels: {app: llama-pd, role: decode}} |
| 66 | +spec: |
| 67 | + replicas: 1 |
| 68 | + selector: {matchLabels: {app: llama-pd, role: decode}} |
| 69 | + template: |
| 70 | + metadata: {labels: {app: llama-pd, role: decode}} |
| 71 | + spec: |
| 72 | + serviceAccountName: pd-disaggregation-nvidia-gpu-vllm-sa |
| 73 | + initContainers: |
| 74 | + - name: routing-proxy |
| 75 | + image: quay.io/niliguy/llm-d-router-disagg-sidecar:dp-aware |
| 76 | + imagePullPolicy: Always |
| 77 | + restartPolicy: Always |
| 78 | + args: ["--port=8000","--vllm-port=8200","--kv-connector=nixlv2","--enable-p2p-pull","--zap-log-level=2","--secure-proxy=false"] |
| 79 | + env: |
| 80 | + - {name: POD_IP, valueFrom: {fieldRef: {apiVersion: v1, fieldPath: status.podIP}}} |
| 81 | + ports: [{containerPort: 8000}] |
| 82 | + containers: |
| 83 | + - name: modelserver |
| 84 | + image: quay.io/niliguy/vllm-openai:nightly-2afa3f7e950264bb179d030c23a1ed1f46558fd9 |
| 85 | + imagePullPolicy: IfNotPresent |
| 86 | + command: ["sh","-c","rm -f /dev/shm/vllm_offload_*.mmap 2>/dev/null; exec vllm serve \"$@\"","sh"] |
| 87 | + args: |
| 88 | + - meta-llama/Llama-3.1-8B-Instruct |
| 89 | + - --port=8200 |
| 90 | + - --tensor-parallel-size=1 |
| 91 | + - --block-size=64 |
| 92 | + - --max-model-len=20000 |
| 93 | + - --gpu-memory-utilization=0.6 |
| 94 | + - --kv-events-config |
| 95 | + - '{"enable_kv_cache_events":true,"publisher":"zmq","endpoint":"tcp://*:5556","topic":"kv@$(POD_IP):8000@meta-llama/Llama-3.1-8B-Instruct"}' |
| 96 | + - --kv-transfer-config |
| 97 | + - '{"kv_connector":"MultiConnector","kv_role":"kv_both","kv_connector_extra_config":{"connectors":[{"kv_connector":"NixlConnector","kv_role":"kv_both"},{"kv_connector":"OffloadingConnector","kv_role":"kv_both","kv_connector_extra_config":{"spec_name":"TieringOffloadingSpec","cpu_bytes_to_use":17179869184,"offload_prompt_only":false,"secondary_tiers":[{"type":"p2p","host":"$(POD_IP)","port":7777}]}}]}}' |
| 98 | + env: |
| 99 | + - {name: HF_TOKEN, valueFrom: {secretKeyRef: {name: llm-d-hf-token, key: HF_TOKEN}}} |
| 100 | + - {name: POD_IP, valueFrom: {fieldRef: {apiVersion: v1, fieldPath: status.podIP}}} |
| 101 | + - {name: PYTHONHASHSEED, value: "0"} |
| 102 | + - {name: VLLM_NIXL_SIDE_CHANNEL_HOST, valueFrom: {fieldRef: {apiVersion: v1, fieldPath: status.podIP}}} |
| 103 | + - {name: VLLM_NIXL_SIDE_CHANNEL_PORT, value: "5600"} |
| 104 | + ports: [{containerPort: 8200}, {containerPort: 5600}, {containerPort: 7777}, {containerPort: 5556}] |
| 105 | + resources: {limits: {cpu: "8", memory: 48Gi, nvidia.com/gpu: "1", rdma/ib: "1"}, requests: {cpu: "8", memory: 48Gi, nvidia.com/gpu: "1", rdma/ib: "1"}} |
| 106 | + startupProbe: {httpGet: {path: /v1/models, port: 8200}, initialDelaySeconds: 10, periodSeconds: 15, failureThreshold: 60} |
| 107 | + readinessProbe: {httpGet: {path: /v1/models, port: 8200}, periodSeconds: 5, failureThreshold: 3} |
| 108 | + volumeMounts: |
| 109 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/envs.py, name: gp2p, subPath: envs.py} |
| 110 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/spec.py, name: gp2p, subPath: spec.py} |
| 111 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/manager.py, name: gp2p, subPath: tiering_manager.py} |
| 112 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/manager.py, name: gp2p, subPath: manager.py} |
| 113 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/data/base.py, name: gp2p, subPath: data_base.py} |
| 114 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/data/nixl.py, name: gp2p, subPath: data_nixl.py} |
| 115 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/session/client.py, name: gp2p, subPath: session_client.py} |
| 116 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/session/protocol.py, name: gp2p, subPath: session_protocol.py} |
| 117 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/session/server.py, name: gp2p, subPath: session_server.py} |
| 118 | + - {mountPath: /usr/local/lib/python3.12/dist-packages/vllm/v1/kv_offload/tiering/p2p/session/session.py, name: gp2p, subPath: session_session.py} |
| 119 | + - {mountPath: /dev/shm, name: shm} |
| 120 | + - {mountPath: /.cache, name: cache} |
| 121 | + - {mountPath: /.config, name: cfg} |
| 122 | + - {mountPath: /.triton, name: triton} |
| 123 | + volumes: |
| 124 | + - {name: shm, emptyDir: {medium: Memory, sizeLimit: 24Gi}} |
| 125 | + - {name: gp2p, configMap: {name: generic-p2p-src}} |
| 126 | + - {name: cache, emptyDir: {}} |
| 127 | + - {name: cfg, emptyDir: {}} |
| 128 | + - {name: triton, emptyDir: {}} |
0 commit comments