diff --git a/README.md b/README.md index 8ea7acf46..b293ed768 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ Now you can install the DRA driver's Helm chart into the Kubernetes cluster: Submit workload: ```console -kubectl apply -f ./demo/specs/quickstart/gpu-test2.yaml +kubectl apply -f ./demo/specs/quickstart/v1/gpu-test2.yaml ``` If you're curious, have a look at [the `ResourceClaimTemplate`](https://github.com/jgehrcke/k8s-dra-driver-gpu/blob/526130fbaa3c8f5b1f6dcfd9ef01c9bdd5c229fe/demo/specs/quickstart/gpu-test2.yaml#L12) definition in this spec, and how the corresponding _single_ `ResourceClaim` is [being referenced](https://github.com/jgehrcke/k8s-dra-driver-gpu/blob/526130fbaa3c8f5b1f6dcfd9ef01c9bdd5c229fe/demo/specs/quickstart/gpu-test2.yaml#L46) by both containers. diff --git a/demo/clusters/kind/scripts/common.sh b/demo/clusters/kind/scripts/common.sh index 85d6d49c8..12a21697c 100644 --- a/demo/clusters/kind/scripts/common.sh +++ b/demo/clusters/kind/scripts/common.sh @@ -40,7 +40,7 @@ DRIVER_IMAGE_VERSION=$(from_versions_mk "VERSION") # From https://github.com/kubernetes/kubernetes/tags # See also https://hub.docker.com/r/kindest/node/tags : ${KIND_K8S_REPO:="https://github.com/kubernetes/kubernetes.git"} -: ${KIND_K8S_TAG:="v1.32.0"} +: ${KIND_K8S_TAG:="v1.34.0"} # The name of the kind cluster to create : ${KIND_CLUSTER_NAME:="${DRIVER_NAME}-cluster"} diff --git a/demo/specs/quickstart/README.md b/demo/specs/quickstart/README.md index cc35e0ea2..501757c18 100644 --- a/demo/specs/quickstart/README.md +++ b/demo/specs/quickstart/README.md @@ -1,4 +1,6 @@ #### Apply the half-balanced mig-parted config + +To enable MIG mode on your GPUs, you can use [nvidia-mig-parted](https://github.com/NVIDIA/mig-parted). ```console sudo -E nvidia-mig-parted apply -f mig-parted-config.yaml -c half-balanced ``` @@ -15,6 +17,7 @@ kubectl get pod -A #### Deploy the 4 example apps discussed in the slides ```console +cd v1 kubectl apply --filename=gpu-test{1,2,3,4}.yaml ``` diff --git a/demo/specs/quickstart/v1/gpu-test-mps.yaml b/demo/specs/quickstart/v1/gpu-test-mps.yaml new file mode 100644 index 000000000..d5044a3eb --- /dev/null +++ b/demo/specs/quickstart/v1/gpu-test-mps.yaml @@ -0,0 +1,64 @@ +# One pod, 2 containers share GPU using MPS +--- +apiVersion: v1 +kind: Namespace +metadata: + name: gpu-test-mps +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + namespace: gpu-test-mps + name: shared-gpu +spec: + spec: + devices: + requests: + - name: mps-gpu + exactly: + deviceClassName: gpu.nvidia.com + config: + - requests: ["mps-gpu"] + opaque: + driver: gpu.nvidia.com + parameters: + apiVersion: resource.nvidia.com/v1beta1 + kind: GpuConfig + sharing: + strategy: MPS + mpsConfig: + defaultActiveThreadPercentage: 50 + defaultPinnedDeviceMemoryLimit: 10Gi +--- +apiVersion: v1 +kind: Pod +metadata: + namespace: gpu-test-mps + name: test-pod + labels: + app: pod +spec: + containers: + - name: mps-ctr0 + image: nvcr.io/nvidia/k8s/cuda-sample:nbody-cuda11.6.0-ubuntu18.04 + command: ["bash", "-c"] + args: ["trap 'exit 0' TERM; /tmp/sample --benchmark --numbodies=4226000 & wait"] + resources: + claims: + - name: shared-gpu + request: mps-gpu + - name: mps-ctr1 + image: nvcr.io/nvidia/k8s/cuda-sample:nbody-cuda11.6.0-ubuntu18.04 + command: ["bash", "-c"] + args: ["trap 'exit 0' TERM; /tmp/sample --benchmark --numbodies=4226000 & wait"] + resources: + claims: + - name: shared-gpu + request: mps-gpu + resourceClaims: + - name: shared-gpu + resourceClaimTemplateName: shared-gpu + tolerations: + - key: "nvidia.com/gpu" + operator: "Exists" + effect: "NoSchedule" diff --git a/demo/specs/quickstart/v1/gpu-test-vfiopci.yaml b/demo/specs/quickstart/v1/gpu-test-vfiopci.yaml new file mode 100644 index 000000000..99a4b6714 --- /dev/null +++ b/demo/specs/quickstart/v1/gpu-test-vfiopci.yaml @@ -0,0 +1,42 @@ +# One pod, one container asking for 1 distinct GPU + +--- +apiVersion: v1 +kind: Namespace +metadata: + name: gpu-test-vfio + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + namespace: gpu-test-vfio + name: single-gpu +spec: + spec: + devices: + requests: + - name: gpu + exactly: + deviceClassName: vfio.gpu.nvidia.com + +--- +apiVersion: v1 +kind: Pod +metadata: + namespace: gpu-test-vfiopci + name: pod1 + labels: + app: pod +spec: + containers: + - name: ctr + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["sleep 9999 & wait"] + resources: + claims: + - name: gpu + resourceClaims: + - name: gpu + resourceClaimTemplateName: single-gpu diff --git a/demo/specs/quickstart/v1/gpu-test1.yaml b/demo/specs/quickstart/v1/gpu-test1.yaml new file mode 100644 index 000000000..a32745058 --- /dev/null +++ b/demo/specs/quickstart/v1/gpu-test1.yaml @@ -0,0 +1,72 @@ +# Two pods, one container each +# Each container asking for 1 distinct GPU + +--- +apiVersion: v1 +kind: Namespace +metadata: + name: gpu-test1 + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + namespace: gpu-test1 + name: single-gpu +spec: + spec: + devices: + requests: + - name: gpu + exactly: + deviceClassName: gpu.nvidia.com + +--- +apiVersion: v1 +kind: Pod +metadata: + namespace: gpu-test1 + name: pod1 + labels: + app: pod +spec: + containers: + - name: ctr + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: gpu + resourceClaims: + - name: gpu + resourceClaimTemplateName: single-gpu + tolerations: + - key: "nvidia.com/gpu" + operator: "Exists" + effect: "NoSchedule" + +--- +apiVersion: v1 +kind: Pod +metadata: + namespace: gpu-test1 + name: pod2 + labels: + app: pod +spec: + containers: + - name: ctr + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: gpu + resourceClaims: + - name: gpu + resourceClaimTemplateName: single-gpu + tolerations: + - key: "nvidia.com/gpu" + operator: "Exists" + effect: "NoSchedule" diff --git a/demo/specs/quickstart/v1/gpu-test2.yaml b/demo/specs/quickstart/v1/gpu-test2.yaml new file mode 100644 index 000000000..e92dd1fa9 --- /dev/null +++ b/demo/specs/quickstart/v1/gpu-test2.yaml @@ -0,0 +1,54 @@ +# One pod, two containers +# Each asking for shared access to a single GPU + +--- +apiVersion: v1 +kind: Namespace +metadata: + name: gpu-test2 + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + namespace: gpu-test2 + name: single-gpu +spec: + spec: + devices: + requests: + - name: gpu + exactly: + deviceClassName: gpu.nvidia.com + +--- +apiVersion: v1 +kind: Pod +metadata: + namespace: gpu-test2 + name: pod + labels: + app: pod +spec: + containers: + - name: ctr0 + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: shared-gpu + - name: ctr1 + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: shared-gpu + resourceClaims: + - name: shared-gpu + resourceClaimTemplateName: single-gpu + tolerations: + - key: "nvidia.com/gpu" + operator: "Exists" + effect: "NoSchedule" diff --git a/demo/specs/quickstart/v1/gpu-test3.yaml b/demo/specs/quickstart/v1/gpu-test3.yaml new file mode 100644 index 000000000..325e4c1c6 --- /dev/null +++ b/demo/specs/quickstart/v1/gpu-test3.yaml @@ -0,0 +1,71 @@ +# One shared, global claim providing access to a GPU +# Two pods, each asking for access to the shared GPU + +--- +apiVersion: v1 +kind: Namespace +metadata: + name: gpu-test3 + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaim +metadata: + namespace: gpu-test3 + name: single-gpu +spec: + devices: + requests: + - name: gpu + exactly: + deviceClassName: gpu.nvidia.com + +--- +apiVersion: v1 +kind: Pod +metadata: + namespace: gpu-test3 + name: pod1 + labels: + app: pod +spec: + containers: + - name: ctr + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: shared-gpu + resourceClaims: + - name: shared-gpu + resourceClaimName: single-gpu + tolerations: + - key: "nvidia.com/gpu" + operator: "Exists" + effect: "NoSchedule" + +--- +apiVersion: v1 +kind: Pod +metadata: + namespace: gpu-test3 + name: pod2 + labels: + app: pod +spec: + containers: + - name: ctr + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: shared-gpu + resourceClaims: + - name: shared-gpu + resourceClaimName: single-gpu + tolerations: + - key: "nvidia.com/gpu" + operator: "Exists" + effect: "NoSchedule" diff --git a/demo/specs/quickstart/v1/gpu-test4.yaml b/demo/specs/quickstart/v1/gpu-test4.yaml new file mode 100644 index 000000000..b8c0637c3 --- /dev/null +++ b/demo/specs/quickstart/v1/gpu-test4.yaml @@ -0,0 +1,107 @@ +# One pod, 4 containers +# Each asking for a different MIG device on a shared mig-enabled GPU +# Run as deployment with 4 replicas + +--- +apiVersion: v1 +kind: Namespace +metadata: + name: gpu-test4 + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + namespace: gpu-test4 + name: mig-devices +spec: + spec: + devices: + requests: + - name: mig-1g-5gb-0 + exactly: + deviceClassName: mig.nvidia.com + selectors: + - cel: + expression: "device.attributes['gpu.nvidia.com'].profile == '1g.5gb'" + - name: mig-1g-5gb-1 + exactly: + deviceClassName: mig.nvidia.com + selectors: + - cel: + expression: "device.attributes['gpu.nvidia.com'].profile == '1g.5gb'" + - name: mig-2g-10gb + exactly: + deviceClassName: mig.nvidia.com + selectors: + - cel: + expression: "device.attributes['gpu.nvidia.com'].profile == '2g.10gb'" + - name: mig-3g-20gb + exactly: + deviceClassName: mig.nvidia.com + selectors: + - cel: + expression: "device.attributes['gpu.nvidia.com'].profile == '3g.20gb'" + + constraints: + - requests: [] + matchAttribute: "gpu.nvidia.com/parentUUID" + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: gpu-test4 + name: pod + labels: + app: gpu-test4-pod +spec: + replicas: 4 + selector: + matchLabels: + app: pod + template: + metadata: + labels: + app: pod + spec: + resourceClaims: + - name: mig-devices + resourceClaimTemplateName: mig-devices + containers: + - name: ctr0 + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: mig-devices + request: mig-1g-5gb-0 + - name: ctr1 + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: mig-devices + request: mig-1g-5gb-1 + - name: ctr2 + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: mig-devices + request: mig-2g-10gb + - name: ctr3 + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: mig-devices + request: mig-3g-20gb + tolerations: + - key: "nvidia.com/gpu" + operator: "Exists" + effect: "NoSchedule" diff --git a/demo/specs/quickstart/v1/gpu-test5.yaml b/demo/specs/quickstart/v1/gpu-test5.yaml new file mode 100644 index 000000000..e2b283294 --- /dev/null +++ b/demo/specs/quickstart/v1/gpu-test5.yaml @@ -0,0 +1,95 @@ +# One pod, 1 container +# Run as deployment with 1 replica + +--- +apiVersion: v1 +kind: Namespace +metadata: + name: gpu-test5 + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + namespace: gpu-test5 + name: multiple-gpus +spec: + spec: + devices: + requests: + - name: ts-gpu + exactly: + deviceClassName: gpu.nvidia.com + - name: mps-gpu + exactly: + deviceClassName: gpu.nvidia.com + config: + - requests: ["ts-gpu"] + opaque: + driver: gpu.nvidia.com + parameters: + apiVersion: resource.nvidia.com/v1beta1 + kind: GpuConfig + sharing: + strategy: TimeSlicing + timeSlicingConfig: + interval: Long + - requests: ["mps-gpu"] + opaque: + driver: gpu.nvidia.com + parameters: + apiVersion: resource.nvidia.com/v1beta1 + kind: GpuConfig + sharing: + strategy: MPS + mpsConfig: + defaultActiveThreadPercentage: 50 + defaultPinnedDeviceMemoryLimit: 10Gi + +--- +apiVersion: v1 +kind: Pod +metadata: + namespace: gpu-test5 + name: pod0 +spec: + containers: + - name: ts-ctr0 + image: nvcr.io/nvidia/k8s/cuda-sample:nbody-cuda11.6.0-ubuntu18.04 + command: ["bash", "-c"] + args: ["trap 'exit 0' TERM; /tmp/sample --benchmark --numbodies=4226000 & wait"] + resources: + claims: + - name: shared-gpus + request: ts-gpu + - name: ts-ctr1 + image: nvcr.io/nvidia/k8s/cuda-sample:nbody-cuda11.6.0-ubuntu18.04 + command: ["bash", "-c"] + args: ["trap 'exit 0' TERM; /tmp/sample --benchmark --numbodies=4226000 & wait"] + resources: + claims: + - name: shared-gpus + request: ts-gpu + - name: mps-ctr0 + image: nvcr.io/nvidia/k8s/cuda-sample:nbody-cuda11.6.0-ubuntu18.04 + command: ["bash", "-c"] + args: ["trap 'exit 0' TERM; /tmp/sample --benchmark --numbodies=4226000 & wait"] + resources: + claims: + - name: shared-gpus + request: mps-gpu + - name: mps-ctr1 + image: nvcr.io/nvidia/k8s/cuda-sample:nbody-cuda11.6.0-ubuntu18.04 + command: ["bash", "-c"] + args: ["trap 'exit 0' TERM; /tmp/sample --benchmark --numbodies=4226000 & wait"] + resources: + claims: + - name: shared-gpus + request: mps-gpu + resourceClaims: + - name: shared-gpus + resourceClaimTemplateName: multiple-gpus + tolerations: + - key: "nvidia.com/gpu" + operator: "Exists" + effect: "NoSchedule" diff --git a/demo/specs/quickstart/v1/gpu-test6.yaml b/demo/specs/quickstart/v1/gpu-test6.yaml new file mode 100644 index 000000000..8d514be6e --- /dev/null +++ b/demo/specs/quickstart/v1/gpu-test6.yaml @@ -0,0 +1,77 @@ +# One pod, 4 containers +# Each asking for a different MIG device on a shared mig-enabled GPU +# Run as deployment with 4 replicas + +--- +apiVersion: v1 +kind: Namespace +metadata: + name: gpu-test6 + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + namespace: gpu-test6 + name: a100 +spec: + spec: + devices: + requests: + - name: gpu + exactly: + deviceClassName: gpu.nvidia.com + selectors: + - cel: + expression: | + device.attributes['gpu.nvidia.com'].productName.lowerAscii().matches('^.*a100.*$') + && + (device.attributes['gpu.nvidia.com'].index == 0 || + device.attributes['gpu.nvidia.com'].index == 2 || + device.attributes['gpu.nvidia.com'].index == 4 || + device.attributes['gpu.nvidia.com'].index == 6) + config: + - requests: ["gpu"] + opaque: + driver: gpu.nvidia.com + parameters: + apiVersion: resource.nvidia.com/v1beta1 + kind: GpuConfig + sharing: + strategy: TimeSlicing + timeSlicingConfig: + interval: Long + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: gpu-test6 + name: pod + labels: + app: gpu-test6-pod +spec: + replicas: 4 + selector: + matchLabels: + app: pod + template: + metadata: + labels: + app: pod + spec: + containers: + - name: ctr + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["nvidia-smi -L; trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: a100 + resourceClaims: + - name: a100 + resourceClaimTemplateName: a100 + tolerations: + - key: "nvidia.com/gpu" + operator: "Exists" + effect: "NoSchedule" diff --git a/demo/specs/quickstart/v1/imex-test1.yaml b/demo/specs/quickstart/v1/imex-test1.yaml new file mode 100644 index 000000000..2de2279cd --- /dev/null +++ b/demo/specs/quickstart/v1/imex-test1.yaml @@ -0,0 +1,206 @@ +# One pod, 1 container +# Run as deployment with 1 replica + +--- +apiVersion: v1 +kind: Namespace +metadata: + name: imex-test1 + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaim +metadata: + namespace: imex-test1 + name: deployment0-imex-channel +spec: + devices: + requests: + - name: channel + exactly: + deviceClassName: imex.nvidia.com + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaim +metadata: + namespace: imex-test1 + name: deployment1-imex-channel +spec: + devices: + requests: + - name: channel + exactly: + deviceClassName: imex.nvidia.com + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaim +metadata: + namespace: imex-test1 + name: deployment2-imex-channel +spec: + devices: + requests: + - name: channel + exactly: + deviceClassName: imex.nvidia.com + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaim +metadata: + namespace: imex-test1 + name: deployment3-imex-channel +spec: + devices: + requests: + - name: channel + exactly: + deviceClassName: imex.nvidia.com + +--- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + namespace: imex-test1 + name: node-gpus +spec: + spec: + devices: + requests: + - name: gpu + exactly: + deviceClassName: gpu.nvidia.com + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: imex-test1 + name: deployment0 + labels: + app: imex-test1-deployment0 +spec: + replicas: 2 + selector: + matchLabels: + app: deployment0 + template: + metadata: + labels: + app: deployment0 + spec: + containers: + - name: ctr + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: gpus + - name: imex-channel + resourceClaims: + - name: gpus + resourceClaimTemplateName: node-gpus + - name: imex-channel + resourceClaimName: deployment0-imex-channel + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: imex-test1 + name: deployment1 + labels: + app: imex-test1-deployment1 +spec: + replicas: 2 + selector: + matchLabels: + app: deployment1 + template: + metadata: + labels: + app: deployment1 + spec: + containers: + - name: ctr + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: gpus + - name: imex-channel + resourceClaims: + - name: gpus + resourceClaimTemplateName: node-gpus + - name: imex-channel + resourceClaimName: deployment1-imex-channel + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: imex-test1 + name: deployment2 + labels: + app: imex-test1-deployment2 +spec: + replicas: 2 + selector: + matchLabels: + app: deployment2 + template: + metadata: + labels: + app: deployment2 + spec: + containers: + - name: ctr + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: gpus + - name: imex-channel + resourceClaims: + - name: gpus + resourceClaimTemplateName: node-gpus + - name: imex-channel + resourceClaimName: deployment2-imex-channel + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: imex-test1 + name: deployment3 + labels: + app: imex-test1-deployment3 +spec: + replicas: 2 + selector: + matchLabels: + app: deployment3 + template: + metadata: + labels: + app: deployment3 + spec: + containers: + - name: ctr + image: ubuntu:22.04 + command: ["bash", "-c"] + args: ["trap 'exit 0' TERM; sleep 9999 & wait"] + resources: + claims: + - name: gpus + - name: imex-channel + resourceClaims: + - name: gpus + resourceClaimTemplateName: node-gpus + - name: imex-channel + resourceClaimName: deployment3-imex-channel diff --git a/demo/specs/quickstart/gpu-test-mps.yaml b/demo/specs/quickstart/v1beta1/gpu-test-mps.yaml similarity index 100% rename from demo/specs/quickstart/gpu-test-mps.yaml rename to demo/specs/quickstart/v1beta1/gpu-test-mps.yaml diff --git a/demo/specs/quickstart/gpu-test-vfiopci.yaml b/demo/specs/quickstart/v1beta1/gpu-test-vfiopci.yaml similarity index 100% rename from demo/specs/quickstart/gpu-test-vfiopci.yaml rename to demo/specs/quickstart/v1beta1/gpu-test-vfiopci.yaml diff --git a/demo/specs/quickstart/gpu-test1.yaml b/demo/specs/quickstart/v1beta1/gpu-test1.yaml similarity index 100% rename from demo/specs/quickstart/gpu-test1.yaml rename to demo/specs/quickstart/v1beta1/gpu-test1.yaml diff --git a/demo/specs/quickstart/gpu-test2.yaml b/demo/specs/quickstart/v1beta1/gpu-test2.yaml similarity index 100% rename from demo/specs/quickstart/gpu-test2.yaml rename to demo/specs/quickstart/v1beta1/gpu-test2.yaml diff --git a/demo/specs/quickstart/gpu-test3.yaml b/demo/specs/quickstart/v1beta1/gpu-test3.yaml similarity index 100% rename from demo/specs/quickstart/gpu-test3.yaml rename to demo/specs/quickstart/v1beta1/gpu-test3.yaml diff --git a/demo/specs/quickstart/gpu-test4.yaml b/demo/specs/quickstart/v1beta1/gpu-test4.yaml similarity index 100% rename from demo/specs/quickstart/gpu-test4.yaml rename to demo/specs/quickstart/v1beta1/gpu-test4.yaml diff --git a/demo/specs/quickstart/gpu-test5.yaml b/demo/specs/quickstart/v1beta1/gpu-test5.yaml similarity index 100% rename from demo/specs/quickstart/gpu-test5.yaml rename to demo/specs/quickstart/v1beta1/gpu-test5.yaml diff --git a/demo/specs/quickstart/gpu-test6.yaml b/demo/specs/quickstart/v1beta1/gpu-test6.yaml similarity index 100% rename from demo/specs/quickstart/gpu-test6.yaml rename to demo/specs/quickstart/v1beta1/gpu-test6.yaml diff --git a/demo/specs/quickstart/imex-test1.yaml b/demo/specs/quickstart/v1beta1/imex-test1.yaml similarity index 100% rename from demo/specs/quickstart/imex-test1.yaml rename to demo/specs/quickstart/v1beta1/imex-test1.yaml