搭建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
出现问题
.....
containers:
-name: xxx
image: http://xxxx:xx
resources:
limit:
aliyun.com/gpu-mem: 1
env:
- name: NVIDIA_VISIBLE_DEVICES
value: all
本文来自博客园,作者:EJW,转载请注明原文链接:https://www.cnblogs.com/ejjw/p/18410256