https://github.com/4paradigm/k8s-vgpu-scheduler
k8s vGPU scheduler 在保留4pd-k8s-device-plugin(4paradigm/k8s-device-plugin)插件功能的基础上,添加了调度模块,以实现多个GPU节点间的负载均衡。k8s vGPU scheduler在原有显卡分配方式的基础上,可以进一步根据显存和算力来切分显卡。在k8s集群中,基于这些切分后的vGPU进行调度,使不同的容器可以安全的共享同一张物理GPU,提高GPU的利用率。此外,插件还可以对显存做虚拟化处理(使用到的显存可以超过物理上的显存),运行一些超大显存需求的任务,或提高共享的任务数,可参考性能测试报告。
你需要将所有要使用到的GPU节点打上gpu=on标签,否则该节点不会被调度到
kubectl label nodes {nodeid} gpu=on
使用helm添加我们的vgpu repo
helm repo add vgpu-charts https://4paradigm.github.io/k8s-vgpu-scheduler
helm repo update
helm install
根据集群服务端版本(上一条指令的结果)指定调度器镜像版本,例如集群服务端版本为v1.17.17,则可以使用如下指令进行安装
kubectl version
helm install -n vgpu vgpu-charts/vgpu --set scheduler.kubeScheduler.imageTag=v1.17.17 --namespace kube-system
或:你可以在安装过程中,通过-set来修改以下的客制化参数,例如:
helm install -n vgpu vgpu-charts/vgpu --set devicePlugin.deviceMemoryScaling=5 ...
如:
helm install vgpu vgpu-charts/vgpu --set scheduler.kubeScheduler.imageTag=v1.17.17 --set version=v2.2.12 --set devicePlugin.deviceMemoryScaling=2 --set devicePlugin.deviceSplitCount=2 --set scheduler.defaultMem=8192 --set scheduler.defaultCores=50 --namespace kube-system
https://github.com/4paradigm/k8s-vgpu-scheduler/blob/master/docs/config_cn.md
devicePlugin.deviceMemoryScaling:显存使用比例
devicePlugin.deviceSplitCount:GPU的分割数
scheduler.defaultMem:默认显存
scheduler.defaultCores:默认为每个任务预留的百分比算力
apiVersion: v1
kind: Pod
metadata:
name: test-gpu-4paradigm
spec:
restartPolicy: OnFailure
containers:
- name: cuda
image: nvidia/cuda:10.0-base
imagePullPolicy: IfNotPresent
tty: true
resources:
limits:
nvidia.com/gpu: 1
nodeName: node01
[root@master02 4paradigm]# kubectl describe node node01 | grep gpu
helm uninstall vgpu --namespace kube-system