在挂起计算机之前忘记清理资源后,CUDA 驱动程序状态异常

在挂起计算机之前忘记清理资源后,CUDA 驱动程序状态异常

我已经在 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 论坛上,有人建议重新加载驱动程序可能会不需要重新启动。

以下是他们提到的步骤(我还没有测试过):

  1. 停止所有使用该驱动程序的程序(特别是 X11)
  2. lsmod | grep nvidia以及rmmod使用次数为零的模块。您应该按依赖顺序执行此操作(右侧的列显示此驱动程序所依赖的模块)
  3. 重复此操作,直到没有 Nvidia 内核模块被加载。
  4. modprobe nvidia重新加载驱动程序。
  5. 重新启动 X11 或任何使用 GPU 的程序

请注意,由于步骤 1,您可能会丢失所有打开的应用程序(依赖于 X11)。但是,如果您将 X11 设置为不是使用 NVidia 显卡,但使用英特尔集成显卡,那么您应该能够以最小的影响重新加载驱动程序。

如果有效的话请告诉我们!

答案2

Ciprian 答案的简化版本始终适用于nvidia-驱动程序-5xx, 至少:

  1. 停止所有使用该驱动程序的程序(特别是 X11)
  2. sudo rmmod nvidia_uvm
  3. sudo modprobe nvidia_uvm
  4. 重启 X11

这使得我能够在绕过重启的同时再次运行 CUDA 应用程序。

init 3对于步骤 1,使用或[1-6]进入 shellctrl+F并重新启动显示管理器[0] 对我来说一直有效。

[0] sudo systemctl restart display-managersudo service gdm restart

相关答案和问题

我的环境

22.04X11GNOME 版本 42.9nvidia-驱动程序-535CUDA 工具包 12.2

相关内容