From 0a66cc09f58ca29076173709dcca45124833e083 Mon Sep 17 00:00:00 2001 From: Adekunle Onaopepo Date: Tue, 14 Jan 2025 14:11:12 +0100 Subject: [PATCH] Create template-gpu-jupyterlab.yml --- .../templates/template-gpu-jupyterlab.yml | 208 ++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 applications/templates/template-gpu-jupyterlab.yml diff --git a/applications/templates/template-gpu-jupyterlab.yml b/applications/templates/template-gpu-jupyterlab.yml new file mode 100644 index 000000000..1be8b0ec3 --- /dev/null +++ b/applications/templates/template-gpu-jupyterlab.yml @@ -0,0 +1,208 @@ +--- +apiVersion: template.openshift.io/v1 +kind: Template +labels: + template: gpu-jupyterlab +metadata: + annotations: + description: |- + Start JupyterLab to run CUDA, Tensorflow, or PyTorch using GPUs + with the root user. + + By default the GPU will not be enabled, so you can start + this workspace to prepare your code and data.nOnce your the GPU has been enabled + in your project, you can enable the GPU in your workspace with this command + (replace jupyterlab-gpu with the name of your deployment) + + oc patch dc/jupyterlab-gpu + --type=json -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/resources", + "value": {"requests": {"nvidia.com/gpu": 1}, "limits": {"nvidia.com/gpu": 1}}}]'U + + 📦 We recommend you to use `mamba install` to install new packages, but you can + also use `pip install` or `apt-get install` + + 📂 Use the `/workspace/persistent` folder (workspace of the JupyterLab UI) to store your data in the persistent + storage + + 🐳 You can directly use the following Docker images to work on GPU: + - CUDA build, based on https://ngc.nvidia.com/catalog/containers/nvidia:cudanghcr.io/maastrichtu-ids/jupyterlab:cuda + - Tensorflow build, based on https://ngc.nvidia.com/catalog/containers/nvidia:tensorflownghcr.io/maastrichtu-ids/jupyterlab:tensorflow + - PyTorch build, based on https://ngc.nvidia.com/catalog/containers/nvidia:pytorchnghcr.io/maastrichtu-ids/jupyterlab:pytorch + - FSL, built with NeuroDocker and CUDA:ghcr.io/maastrichtu-ids/jupyterlab:fsl-gpu + + Feel free to check how the GPU images are built and to customize them for your project: + https://github.com/MaastrichtU-IDS/jupyterlabnnU0001F4CB️ You can find some + examples for Tensorflow and PyTorch in the following repositories:nhttps://gitlab.maastrichtuniversity.nl/dsri-examples/dsri-tensorflow-workspacenhttps://gitlab.maastrichtuniversity.nl/dsri-examples/dsri-pytorch-workspacennU0001F5D1️ + Use this command with your application name to delete completely your application + and its persistent volumes:noc delete all,pvc,secret,configmaps,serviceaccount,rolebinding + --selector app=$APPLICATION_NAME' + iconClass: icon-python + openshift.io/display-name: JupyterLab on GPU + openshift.io/documentation-url: https://maastrichtu-ids.github.io/dsri-documentation/docs/deploy-on-gpu + openshift.io/provider-display-name: Institute of Data Science, UM + openshift.io/support-url: https://maastrichtu-ids.github.io/dsri-documentation/help + tags: python,jupyter,gpu + name: gpu-jupyterlab + namespace: openshift +objects: +- apiVersion: v1 + kind: Secret + metadata: + annotations: + template.openshift.io/expose-password: "{.data['application-password']}" + labels: + app: "${APPLICATION_NAME}" + name: "${APPLICATION_NAME}" + stringData: + application-password: "${JUPYTER_TOKEN}" +- apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + labels: + app: "${APPLICATION_NAME}" + name: "${APPLICATION_NAME}" + spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: "${STORAGE_SIZE}" +- apiVersion: apps.openshift.io/v1 + kind: DeploymentConfig + metadata: + labels: + app: "${APPLICATION_NAME}" + name: "${APPLICATION_NAME}" + spec: + replicas: 1 + selector: + app: "${APPLICATION_NAME}" + deploymentconfig: "${APPLICATION_NAME}" + strategy: + type: Rolling + template: + metadata: + labels: + app: "${APPLICATION_NAME}" + deploymentconfig: "${APPLICATION_NAME}" + spec: + containers: + - env: + - name: JUPYTER_TOKEN + valueFrom: + secretKeyRef: + key: application-password + name: "${APPLICATION_NAME}" + - name: GIT_NAME + value: "${GIT_NAME}" + - name: GIT_EMAIL + value: "${GIT_EMAIL}" + - name: WORKSPACE + value: "/workspace" + - name: PERSISTENT_FOLDER + value: "/workspace/persistent" + image: "${IMAGE_NAME}" + imagePullPolicy: "${IMAGE_PULL_POLICY}" + name: "${APPLICATION_NAME}" + ports: + - containerPort: 8888 + protocol: TCP + - containerPort: 6006 + protocol: TCP + resources: + limits: + cpu: '64' + memory: 256Gi + requests: + cpu: '2' + memory: 8Gi + volumeMounts: + - mountPath: "/dev/shm" + name: dshm + - mountPath: "/workspace/persistent" + name: data + serviceAccountName: anyuid + volumes: + - emptyDir: + medium: Memory + name: dshm + - name: data + persistentVolumeClaim: + claimName: "${APPLICATION_NAME}" + test: false + triggers: + - type: ConfigChange +- apiVersion: v1 + kind: Service + metadata: + labels: + app: "${APPLICATION_NAME}" + name: "${APPLICATION_NAME}" + spec: + ports: + - name: 8888-tcp + port: 8888 + protocol: TCP + targetPort: 8888 + - name: 6006-tcp + port: 6006 + protocol: TCP + targetPort: 6006 + selector: + app: "${APPLICATION_NAME}" + deploymentconfig: "${APPLICATION_NAME}" +- apiVersion: route.openshift.io/v1 + kind: Route + metadata: + labels: + app: "${APPLICATION_NAME}" + name: "${APPLICATION_NAME}" + spec: + host: '' + port: + targetPort: 8888-tcp + tls: + insecureEdgeTerminationPolicy: Redirect + termination: edge + to: + kind: Service + name: "${APPLICATION_NAME}" + weight: 100 +parameters: +- description: Must be unique in the project. It will be used to generate the application + URL. + displayName: Application name + name: APPLICATION_NAME + required: true + value: jupyterlab-gpu +- description: Check the description on the right for more details about available + images + displayName: Docker image used + name: IMAGE_NAME + required: true + value: ghcr.io/maastrichtu-ids/jupyterlab:tensorflow +- description: The password, aka. token, to access the notebook + displayName: Notebook password + name: JUPYTER_TOKEN + required: true +- description: Size of the storage allocated to the notebook persistent storage in + `/workspace/persistent`. + displayName: Storage size + name: STORAGE_SIZE + required: true + value: 20Gi +- description: Email used to automatically define git config --global user.name + displayName: Git name + name: GIT_NAME + required: true + value: default +- description: Email used to automatically define git config --global user.email + displayName: Git email + name: GIT_EMAIL + required: true + value: default@maastrichtuniversity.nl +- description: Use Always to make sure the new image is pulled when you update it + displayName: Image pull policy + name: IMAGE_PULL_POLICY + required: true + value: IfNotPresent