搭建K8S集群并配置GPU共享完整流程

1、安装docker和nvidia-docker2

安装Docker,直接执行官方安装脚本安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

编辑/etc/docker/daemon.json配置

{
    
    
    "runtimes": {
    
    
        "nvidia": {
    
    
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia",
    "exec-opts": ["native.cgroupdriver=systemd"]
}

其中:runtimes参数是定义运行时,这里定义了一个名为nvidia的运行时环境,default-runtime表示指定默认的运行时为刚刚定义的nvidia。

最后一句"exec-opts": ["native.cgroupdriver=systemd"]的作用是,因为K8S的文件驱动为cgroupfs,而docker的文件驱动为systemd,两者不同会导致镜像无法启动,因此需要将K8S文件驱动也指定为systemd。

2、GPU Sharing部署

我们从github上获取scheduler-policy-config.json,放到主机/etc/kubernetes/ssl/下,如果有多个master节点,则每个master节点都需要执行:

cd /etc/kubernetes/ssl/
curl -O https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/config/scheduler-policy-config.json

部署GPU共享调度插件gpushare-schd-extender:

cd /tmp/
curl -O https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/config/gpushare-schd-extender.yaml
# 因为是使用单节点,因此需要能够在master上进行调度,所以需要在gpushare-schd-extender.yaml中将
# nodeSelector:
#    node-role.kubernetes.io/master: ""
# 这两句删除,使k8s能够在master上进行调度
kubectl create -f gpushare-schd-extender.yaml

部署设备插件gpushare-device-plugin

如果你的集群不是新搭建的,之前如果已经安装了nvidia-device-plugin,需要将其删除,rancher版本的k8s可以使用kubectl get pods看到nvidia-device-plugin相应的pod,删除即可。然后部署设备插件gpushare-device-plugin:

cd /tmp/
wget https://raw.githubusercontent.com/AliyunContainerService/gpushare-device-plugin/master/device-plugin-rbac.yaml
kubectl create -f device-plugin-rbac.yaml
wget https://raw.githubusercontent.com/AliyunContainerService/gpushare-device-plugin/master/device-plugin-ds.yaml
# 默认情况下,GPU显存以GiB为单位,若需要使用MiB为单位,需要在这个文件中,将--memory-unit=GiB修改为--memory-unit=MiB
kubectl create -f device-plugin-ds.yaml

为了将GPU程序调度到带有GPU的服务器,需要给服务打标签gpushare=true:

# 查看所有节点
kubectl get nodes
# 选取GPU节点打标
kubectl label node <target_node> gpushare=true
# 例如我这里主机名为master,则打标语句为:
# kubectl label node master gpushare=true

下载管理gpu的命令

wget https://github.com/AliyunContainerService/gpushare-device-plugin/releases/download/v0.3.0/kubectl-inspect-gpushare
chmod u+x kubectl-inspect-gpushare
mv kubectl-inspect-gpushare /usr/local/bin

image

出现问题

.....
       containers:
         -name: xxx
          image: http://xxxx:xx
          resources:
           limit:
              aliyun.com/gpu-mem: 1
          env:
            - name: NVIDIA_VISIBLE_DEVICES
              value: all
			 
posted @ 2024-09-12 15:26  EJW  阅读(373)  评论(0编辑  收藏  举报