![在挂起计算机之前忘记清理资源后,CUDA 驱动程序状态异常](https://linux22.com/image/1164777/%E5%9C%A8%E6%8C%82%E8%B5%B7%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B9%8B%E5%89%8D%E5%BF%98%E8%AE%B0%E6%B8%85%E7%90%86%E8%B5%84%E6%BA%90%E5%90%8E%EF%BC%8CCUDA%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E7%8A%B6%E6%80%81%E5%BC%82%E5%B8%B8.png)
我已经在 Ubuntu 18.04、内核 4.15.0-46-generic、Nvidia 驱动程序 410.48 和 GeForce GTX 1060 卡上进行了 CUDA 开发。
有时我无法再使用 JCuda 包装器在 Clojure REPL 上进行 CUDA 开发,除非我重新启动计算机,否则只会收到“CUDA_ERROR_UNKNOWN”错误。我怀疑如果我总是记得在挂起计算机之前在 REPL 上释放我的 CUDA 资源,这种情况就不会发生,但我似乎一直在重复这个错误 :(
奇怪的是,该nvidia-smi
命令有效,但是当我尝试运行nvidia-docker run --rm nvidia/cuda:9.0-base nvidia-smi
它时,它会打印出此错误消息并退出:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:344:
starting container process caused "process_linux.go:424: container init caused \"process_linux.go:407:
running prestart hook 1 caused \\\"error running hook: exit status 1,
stdout: , stderr: exec command: [/usr/bin/nvidia-container-cli --load-kmods configure
--ldconfig=@/sbin/ldconfig.real --device=all --compute --utility --require=cuda>=9.0
--pid=3265 /var/lib/docker/aufs/mnt/a6ddd30bf9b16f4affe5024840625747cf56a7ebee10e5940a90a16770c20190]
\\\\nnvidia-container-cli: initialization error: cuda error: unknown error\\\\n\\\"\"": unknown.
nvidia-smi 输出:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.48 Driver Version: 410.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 106... Off | 00000000:01:00.0 On | N/A |
| 0% 36C P0 27W / 150W | 894MiB / 6075MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 6042 G /usr/lib/xorg/Xorg 566MiB |
...
您有什么技巧可以“重置”驱动程序状态(无论什么原因导致此问题)而无需重启?登录和退出似乎无法解决问题,而且这样做几乎和完全重启一样不方便。我不想重新打开所有应用程序。
答案1
在 nvidia 论坛上,有人建议重新加载驱动程序可能会不需要重新启动。
以下是他们提到的步骤(我还没有测试过):
- 停止所有使用该驱动程序的程序(特别是 X11)
lsmod | grep nvidia
以及rmmod
使用次数为零的模块。您应该按依赖顺序执行此操作(右侧的列显示此驱动程序所依赖的模块)- 重复此操作,直到没有 Nvidia 内核模块被加载。
modprobe nvidia
重新加载驱动程序。- 重新启动 X11 或任何使用 GPU 的程序
请注意,由于步骤 1,您可能会丢失所有打开的应用程序(依赖于 X11)。但是,如果您将 X11 设置为不是使用 NVidia 显卡,但使用英特尔集成显卡,那么您应该能够以最小的影响重新加载驱动程序。
如果有效的话请告诉我们!
答案2
Ciprian 答案的简化版本始终适用于nvidia-驱动程序-5xx, 至少:
- 停止所有使用该驱动程序的程序(特别是 X11)
sudo rmmod nvidia_uvm
sudo modprobe nvidia_uvm
- 重启 X11
这使得我能够在绕过重启的同时再次运行 CUDA 应用程序。
init 3
对于步骤 1,使用或[1-6]进入 shellctrl+F
并重新启动显示管理器[0] 对我来说一直有效。
[0]
sudo systemctl restart display-manager
或
sudo service gdm restart
相关答案和问题
- https://askubuntu.com/a/1326229/941887
- https://askubuntu.com/a/1043538/941887
- 笔记本电脑从睡眠状态恢复后 CUDA 无法工作
- 如何修复 CUDA 暂停后中断的问题?
我的环境
22.04,X11,GNOME 版本 42.9,nvidia-驱动程序-535,CUDA 工具包 12.2