-
Notifications
You must be signed in to change notification settings - Fork 647
gpu机器加入集群
首先需要找运维同学安装机器gpu卡对应的驱动,然后需要让你的docker能识别并应用gpu驱动。
-
如果你的docker是19.03及以后的版本,并且只在docker中使用而不在k8s中使用,可以只安装nvidia-container-runtime 或者 只安装nvidia-container-toolkit,然后重启docker,就可以在docker run时通过添加参数--gpus 来应用gpu卡了。
-
如果你的docker是19.03以前的版本,或者19.03以后的版本并需要在k8s中使用gpu,那需要安装nvidia docker2,因为k8s还没有支持docker的--gpu参数。安装nvidia docker2以后,修改docker 默认runtime。重启docker,这样就能在docker或者k8s中使用gpu了。
cat /etc/docker/daemon.json
{
"insecure-registries":["docker.oa.com:8080"],
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
总结下:
1、找运维同学在机器上安装gpu驱动
2、安装nvidia docker2(k8s没有支持新版本docker的--gpu)
3、修改docker配置文件
加入k8s集群后为机器添加标签,标签只是用户管理和选择机型设备。
gpu=true 用于表示 gpu设备
vgpu=true 用于表示 vgpu设备
gpu-type=V100 用于表示gpu型号,或者gpu-type=T4
train=true 用于训练
service=true 用于推理
notebook=true 用于开发
gpu/nvidia-device-plugin.yml
daemonset kube-system/nvidia-device-plugin.会在机器上部署pod,用于scheduler识别改机器可用gpu算力。
kubectl get node -o yaml
status:
capacity:
cpu: '20'
ephemeral-storage: 51473868Ki
hugepages-1Gi: '0'
hugepages-2Mi: '0'
memory: 81846828Ki
nvidia.com/gpu: '1' # 英伟达gpu的资源占用
pods: '61'
tencent.com/vcuda-core: '0' # 虚拟化gpu的可占用
tencent.com/vcuda-memory: '0' # 虚拟化gpu的可占用
如果不存在可占用gpu,那可能是因为机器上非k8s之外存在占用。需要先关停机器上的gpu占用进程,然后重启kubelet。 rancher重启kubelet的方法是 docker restart kubelet
daemonset monitoring/dcgm-exporter.会在机器上部署pod,用于监控gpu上的使用率
配置文件config.py中添加上面的gpu资源在k8s中的资源名。
直接写占用卡数目,对于异构gpu环境,也可以选择占用的卡型。比如1(T4),2(V100),1(VGPU)