如果您使用的CUDA库需要匹配更高版本的NVIDIA驱动,请升级节点的NVIDIA驱动,即卸载旧版本驱动,然后安装新版本驱动
下线节点与排空节点
- 执行以下命令,将待升级驱动的GPU节点设置为不可调度状态
kubectl cordon <NODE_NAME>
其中<NODE_NAME>为节点名称。
预期输出:
node/<NODE_NAME> cordoned
- 执行以下命令,排空待升级驱动的GPU节点上的Pod。
kubectl drain <NODE_NAME> --grace-period=120 --ignore-daemonsets=true # 设置120秒钟的宽限期限,让任务优雅的关闭
预期输出:
There are pending nodes to be drained:
<NODE_NAME>
卸载GPU节点旧版本驱动
- 登录节点,执行以下命令,关闭节点上的kubelet和containerd服务(某些Daemonset服务使用GPU,但是kubectl drain并不能清除这些Daemonset,请在关闭kubelet和containerd后,再清除这些服务)
sudo systemctl stop kubelet containerd - 登录节点,执行以下fuser命令,确认是否还有进程在使用GPU。如果存在,则执行kill命令终止此进程(升级驱动过程中,不允许有进程使用GPU)
sudo fuser -v /dev/nvidia*
如果没有服务在使用GPU,那么该命令执行后不会有任何输出;如果有服务在使用GPU,那么执行该命令后,将会有输出,表示有进程在使用GPU。下方示例显示有两个进程(进程号21045、21464)在使用GPU资源
USER PID ACCESS COMMAND
/dev/nvidia0: root 21045 F… nvidia-device-p
root 21464 F… dcgm-exporter
/dev/nvidiactl: root 21045 F… nvidia-device-p
root 21464 F…m dcgm-exporter
通过进程号ID终止此进程:
sudo kill -9 21045 21464
再次执行fuser命令确认是否有进程在使用GPU,直到没有任何输出,否则继续使用kill命令终止进程。
3. 登录节点,卸载该GPU节点已安装的NVIDIA驱动
sudo /usr/bin/nvidia-uninstall
回车按到底。
GPU节点安装新版本驱动
- 从NVIDIA官方网站下载新版本驱动到节点上
如11.7 :
wget https://us.download.nvidia.com/tesla/515.105.01/NVIDIA-Linux-x86_64-515.105.01.run - 添加驱动脚本执行权限
sudo chmod +x NVIDIA-Linux-x86_64-515.105.01.run - 查看新驱动是否正常
sudo nvidia-smi - 启动kubelet和containerd服务
sudo systemctl restart containerd kubelet
上线节点
执行以下命令,上线节点。其中<NODE_NAME>为节点名称。
sudo kubectl uncordon <NODE_NAME>
来源云上问题小结:
问题: 在实例上启动gpu容器时无法正常启动 报错Error: failed to start container “app-center”: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #0:: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: requirement error: unsatisfied condition: cuda>=11.7, please update your driver to a newer version, or use an earlier cuda container: unknown
解决:
-
方案1. 可以手动升级下这个节点的GPU驱动https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/manually-upgrade-the-nvidia-driver-of-a-node
-
方案2. 将该节点移除集群再重新加回来https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/use-a-node-pool-to-update-the-nvidia-driver-for-an-existing-node
手动加入的话,数据盘和系统盘不格式化 数据不会丢失,可以提前做个快照备份,但是注意自动添加会重新格式化系统,数据会丢失方案2有如下限制:
升级NVIDIA驱动的方式本质上是将节点从原有节点池中移除,然后再将该节点添加至新创建的节点池中。除目标节点外,原有节点池中可能存在其它节点,故无法在原有节点池中完成目标节点的NVIDIA驱动升级。节点的NVIDIA驱动升级仅必须通过节点移除。在添加的过程中,会经历重装系统、安装指定NVIDIA驱动等。请务必在执行升级操作前,确认该节点没有正在运行的任务以及重要数据。为降低风险,建议您先升级一个节点,确认整个升级过程无误后再批量升级。