CUDA 设备休眠恢复后无法使用
CUDA 设备休眠恢复后无法使用
2024年5月13日
摘要
在 Linux 下使用 GPU 时,有时会经历系统睡眠或休眠然后唤醒的过程,而唤醒过后再次使用 CUDA 设备时偶尔会遇到 CUDA 设备不可用的报错,本文将给出两种解决方案。
报错信息
常见的报错信息如下:CUDA is installed, but device gpu is not available (error: Unable to get the number of gpus available: unknown error),懒得翻译了,就那么个意思。
解决方案
手动重载内核模块
使用命令:
sudo rmmod nvidia_uvm
sudo modprobe nvidia_uvm
即可重新加载 NVIDIA 显卡驱动的内核模块。
使用 Systemd 自动重载
现代 Linux 发行版中使用的 Systemd 提供了很方便的事务处理触发器,其中 system-sleep
子模块提供了关于休眠前后的事务自动处理。任务自动化脚本位于 /lib/systemd/system-sleep/
目录下,在系统休眠或从休眠状态下恢复时,Systemd 会自动调用此目录下的所有脚本,并传入两个参数:
$1
:用来指定是开始休眠还是从休眠状态恢复,分别对应的字符串pre
与post
$1
:用来指明休眠的类型,分别为字符串suspend
(睡眠 RAM),hibernate
(休眠 硬盘) 以及hybrid-sleep
(混合)
我们可以在此目录下新建一个文件 nvidia-reload
:
#!/bin.sh
case “$1” in
post)
rmmod nvidia_uvm
modprobe nvidia_uvm
;;
esac
此脚本将在任何种类的挂起恢复后自动执行重载模块的命令。
License:
CC BY 4.0