彭某的技术折腾笔记

彭某的技术折腾笔记

CUDA 设备休眠恢复后无法使用

2024-05-13

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. $1:用来指定是开始休眠还是从休眠状态恢复,分别对应的字符串 prepost
  2. $1:用来指明休眠的类型,分别为字符串 suspend(睡眠 RAM), hibernate(休眠 硬盘) 以及 hybrid-sleep(混合)

我们可以在此目录下新建一个文件 nvidia-reload

#!/bin.sh

case “$1” in
  post)
    rmmod nvidia_uvm
    modprobe nvidia_uvm
;;
esac

此脚本将在任何种类的挂起恢复后自动执行重载模块的命令。

  • 0