第四范式vgpu插件

4paradigm/k8s-device-plugin

github地址:https://github.com/4paradigm/k8s-device-plugin/blob/master/README_cn.md

vGPU device plugin 基于NVIDIA官方插件(NVIDIA/k8s-device-plugin),在保留官方功能的基础上,实现了对物理GPU进行切分,并对显存和计算单元进行限制,从而模拟出多张小的vGPU卡。

部署

docker pull 4pdosc/k8s-device-plugin:latest

(注意v1.8镜像使用有问题,拉最新的镜像验证没问题)
kubectl apply -f nvidia-device-plugin.yml

参数

--device-split-count=3
整数类型,预设值是2。NVIDIA装置的分割数。对于一个总共包含N张NVIDIA GPU的Kubernetes集群,如果我们将device-split-count参数配置为K,这个Kubernetes集群将有K * N个可分配的vGPU资源
--device-memory-scaling=3
浮点数类型,预设值是1。NVIDIA装置显存使用比例,可以大于1(启用虚拟显存,实验功能)。对于有M​显存大小的NVIDIA GPU,如果我们配置device-memory-scaling参数为S,在部署了我们装置插件的Kubenetes集群中,这张GPU分出的vGPU将总共包含 S * M显存。张vGPU的显存大小也受device-split-count参数影响。在先前的例子中,如果device-split-count参数配置为K,那每一张vGPU最后会取得 S * M / K 大小的显存。

验证

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

    nvidia.com/gpu: 3

    nvidia.com/gpu: 3

    nvidia.com/gpu 0 0

产品限制

分配到节点上任务所需要的vGPU数量,不能大于节点实际GPU数量,你可以使用vGPU调度器来避免这个限制

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 -n vgpu vgpu-charts/vgpu --set scheduler.kubeScheduler.imageTag=v1.17.17 --set devicePlugin.deviceMemoryScaling=1 --set devicePlugin.deviceSplitCount=3 --namespace kube-system

卸载:

helm uninstall vgpu --namespace kube-system

helm del --purge vgpu

你可能感兴趣的:(gpu,k8s,kubernetes,docker,容器)