日常在一些程序中进行GPU调用,这些cuda程序异常崩溃的时候,有时会遇到掉卡掉驱动、没有进程但是显存被占用的情况,这个时候我们可以通过以下命令来尝试进行处理。
如果是掉卡的话可以使用lspci查看下主板上还能否检测到GPU卡
lspci | grep -i nvidia 00:03.0 VGA compatible controller: NVIDIA Corporation Device 1f03 (rev a1) 00:03.1 Audio device: NVIDIA Corporation TU106 High Definition Audio Controller (rev a1)
如果不是掉卡,掉驱动和显存被占用可以查看以下几种方式进行对应处理
1.重启GPU卡
nvidia-smi --gpu-reset # 指定卡添加参数-i <index>
上述命令如果是在多卡的机器上,会重启所有GPU卡,如果需要指定GPU卡则需要添加参数-i,后面跟GPU的的index
如果是重启所有GPU卡,可以使用简化命令
nvidia-smi -r
2.重载内核驱动模块
先使用lsmod命令查看当前内核是否加载nvidia相关驱动模块
lsmod | grep -i nvidia
也可以使用modprobe命令重载内核驱动
modprobe nvidia
也可以删除nvidia驱动内核模块,进行重新加载,可以尝试以下命令进行内核驱动模块的加载
rmmod nvidia lsmod nvidia
一般在使用rmmod的情况下会返回以下报错
rmmod: ERROR: Module nvidia is in use by: nvidia_modeset nvidia_uvm
rmmod和modprobe命令都会退出GPU卡上的任何调用,在节点执行这些命令实际和重启gpu卡没有区别。
3.杀掉占用设备的进程
如果没有查看到GPU进程,但是显存被占用,可以使用fuser命令查看当前GPU设备是否还在占用中
fuser -uv /dev/nvidia*
可以尝试kill掉占用的进程
4.重启操作系统
这个也是终极大法。