第四范式vgpu插件

葛阳
2023-12-01

4paradigm/k8s-vgpu-scheduler

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

 类似资料: