gcloud-lab/infrastructure/gpus/base/vllm-servers/rtx6000-vllm.yaml
sirius0xdev d08bf5844a feat: optimize RTX6000 vLLM KEDA scaling
- Rename deployment to rtx6000-brain-vllm to match scaler target ref
- Set deployment replicas to 0 (KEDA controlled)
- Add pollingInterval: 10s and cooldownPeriod: 30s for faster response

This enables scale-to-zero when idle and quick scale-up on first request.

See https://github.com/sirius0xdev/gcloud-lab/tree/master/infrastructure%2Fgpus%2Fbase
2026-04-29 04:12:36 +00:00

141 lines
3.5 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
name: rtx6000-brain-vllm
namespace: customer1
labels:
app: rtx6000-brain
spec:
replicas: 0
selector:
matchLabels:
app: rtx6000-brain
template:
metadata:
labels:
app: rtx6000-brain
spec:
nodeSelector:
cloud.google.com/gke-accelerator: "nvidia-rtx-pro-6000"
tolerations:
- key: "nvidia.com/gpu-nvidia-rtx-pro-6000"
operator: "Equal"
value: "present"
effect: "NoSchedule"
containers:
- name: vllm-brain
image: vllm/vllm-openai:latest
command: ["python3", "-m", "vllm.entrypoints.openai.api_server"]
env:
- name: HF_TOKEN
value: ""
- name: TOKENIZER_MODE
value: "hf"
args:
- --model=Youssofal/Qwen3.6-27B-Abliterated-Heretic-Uncensored-BF16
- --host=0.0.0.0
- --port=8000
- --tensor-parallel-size=1
- --tokenizer-mode=hf
- --gpu-memory-utilization=0.95
- --kv-cache-dtype=fp8
- --max-model-len=131072
- --enable-auto-tool-choice
- --enable-chunked-prefill
- --max-num-batched-tokens=8192
- --max-num-seqs=4
- --trust-remote-code
- --dtype=auto
- --enable-prefix-caching
- --tool-call-parser=qwen3_xml
- --reasoning-parser=qwen3
- --disable-custom-all-reduce
ports:
- containerPort: 8000
resources:
limits:
nvidia.com/gpu: 1
memory: "100Gi"
requests:
nvidia.com/gpu: 1
memory: "80Gi"
cpu: "8"
startupProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 10
failureThreshold: 60
successThreshold: 1
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 180
periodSeconds: 15
failureThreshold: 5
successThreshold: 1
timeoutSeconds: 10
readinessProbe:
httpGet:
path: /v1/models
port: 8000
initialDelaySeconds: 120
periodSeconds: 10
timeoutSeconds: 15
failureThreshold: 8
successThreshold: 1
volumeMounts:
- name: model-cache
mountPath: /root/.cache/huggingface
volumes:
- name: model-cache
persistentVolumeClaim:
claimName: vllm-model-qwen3.6-27b-uncensored
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: hyperdisk-balanced
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: hyperdisk-balanced
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: vllm-model-qwen3.6-27b-uncensored
namespace: customer1
spec:
accessModes:
- ReadWriteOnce
storageClassName: hyperdisk-balanced
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Service
metadata:
name: rtx6000-brain-service
namespace: customer1
spec:
selector:
app: rtx6000-brain
ports:
- protocol: TCP
port: 8000
targetPort: 8000
type: ClusterIP