环境准备
阿里云创建GPU计算型,规格型号为GPU计算型GN5,对应NVIDA的GPU型号为Nvidia P100 GPU
先决条件
- 主机安装gcc
- bios禁用禁用secure boot,也就是设置为disable
- 如果没有禁用secure boot,会导致NVIDIA驱动安装失败,或者不正常。
- 禁用nouveau
打开编辑配置文件:1
2
3
4sudo gedit /etc/modprobe.d/blacklist.conf
在最后一行添加:
blacklist nouveau - 安装使用docker-ce:19.03
安装NVIDIA驱动
阿里云启动机器时也可以选择自动安装驱动,这里为了方便连接使用手动方式。
linux上安装NVIDIA驱动有两种方式
方式一:通过执行二进制脚本安装
方式二:通过安装cuda的rpm包的方式安装
查看GPU型号
1 | lspci|grep NV |
选择对应的型号下载gpu驱动
https://www.nvidia.cn/Download/index.aspx?lang=cn
安装gcc
1 | yum install gcc* -y |
下载驱动
1 | wget https://cn.download.nvidia.cn/tesla/440.64.00/nvidia-driver-local-repo-rhel7-440.64.00-1.0-1.x86_64.rpm |
若下载慢,也可以通过以下链接下载
1 | https://v2.fangcloud.com/share/cec9fca23cb2fe56b2d9d0732f |
1 | rpm -ihv nvidia-driver-local-repo-rhel7-440.64.00-1.0-1.x86_64.rpm |
1 | yum install cuda-driver -y |
重启节点
1 | reboot |
查看gpu
1 | nvidia-smi |
配置docker使用GPU
docker要使用GPU,需要将docker的runtime替换为NVIDIA的docker-runtime,替换方法如下
安装NVIDIA-docker2
1 | distribution=$(. /etc/os-release;echo $ID$VERSION_ID) |
更新yum源
1 |
|
安装NVIDIA-docker2
1 | sudo yum install nvidia-docker2 -y |
修改默认RUNTIME
安装后会自动替换原有的daemon.json文件,需要重新修改替换,将默认的runtime替换为NVIDIA-container-runtime
1 | tee /etc/docker/daemon.json << EOF |
重启docker
1 | systemctl daemon-reload && systemctl restart docker |
执行docker info检查
测试docker调用
使用一个简单的训练任务容器测试是否能正常通过docker调用GPU
1 | docker run -itd wanshaoyuan/pytorch:v1.0 |
查看GPU状态,有将正常进程调度到GPU上
1 | nvida-smi |
k8s配置对接
docker对接成功后就可以正常使用容器应用调用GPU资源了,但此时kubernetes还是无法发现GPU资源对象,需要在在kubernetes中安装k8s-device-plugin插件这样kubelet就能正常上报GPU资源信息
安装k8s-device-plugin
1 | kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta6/nvidia-device-plugin.yml |
安装完成后会在kube-system命名空间中以daemonset方式部署nvidia-device-plugin
此时通过kubectl查看节点上报资源信息可以看见GPU资源对象了
1 | kubectl describe node/xxx |
在kubernetes中运行训练任务进行测试
默认情况下采用独占模式,在资源配置中设置gpu资源对象
kubernetes会将workload自动调度到有GPU的节点上
在此查看GPU资源使用信息,调度成功。
参考文档:
https://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html#redhat-x86_64