-
Notifications
You must be signed in to change notification settings - Fork 86
gpu机器加入集群
参考 install/kubernetes/rancher/install_gpu.md
参考
- install/kubernetes/rancher/init_node_gpu_ubuntu.sh
- install/kubernetes/rancher/init_node_gpu_centos.sh
首先需要找运维同学安装机器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": []
}
}
}
当从docker 切换到containerd后,也需要在containerd中适配nvidia-container 。
适配 containerd中的配置文件都在 /etc/containerd/config.toml 文件中,我们可以在config.toml中修改runtime插件的配置,首先切换到runtime v2。
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
将CRI配置中的runc binary改为 nvidia-container-runtime
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
BinaryName = "nvidia-container-runtime"
加入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'
如果不存在可占用gpu,那可能是因为机器上非k8s之外存在占用。需要先关停机器上的gpu占用进程,然后重启kubelet。 rancher重启kubelet的方法是 docker restart kubelet
daemonset monitoring/dcgm-exporter.会在机器上部署pod,用于监控gpu上的使用率
直接写占用卡数目,对于异构gpu环境,也可以选择占用的卡型。比如1(T4),2(V100),0.1
需要先将gpu指标采集到prometheus,然后再将prometheus指标转变为对象指标控制hpa。
prometheus/prometheus_adapter目录下会部署kube-system/kubeflow-prometheus-adapter用于将prometheus指标转变为对象指标
欢迎大家传播分享文章