如何使用CUDA刷新GPU内存(物理重置不可用)

时间:2013-03-04 08:22:42

标签: cuda gpgpu remote-access

我的CUDA程序在执行期间崩溃,然后刷新内存。结果,设备内存仍然被占用。

我正在使用GTX 580,但不支持nvidia-smi --gpu-reset

在程序开头放置cudaDeviceReset()只会影响进程创建的当前上下文,并且不会刷新在它之前分配的内存。

我正在远程访问具有该GPU的Fedora服务器,因此物理重置非常复杂。

所以,问题是 - 在这种情况下有没有办法刷新设备内存?

7 个答案:

答案 0 :(得分:45)

使用

检查GPU内存的使用情况
sudo fuser -v /dev/nvidia*

您的输出将如下所示:

                     USER        PID  ACCESS COMMAND
/dev/nvidia0:        root       1256  F...m  Xorg
                     username   2057  F...m  compiz
                     username   2759  F...m  chrome
                     username   2777  F...m  chrome
                     username   20450 F...m  python
                     username   20699 F...m  python

然后在htop

中删除不再需要的PID
sudo kill -9 PID.

在上面的例子中,Pycharm吃了大量的内存,所以我杀了20450和20699。

答案 1 :(得分:9)

虽然除了特殊情况之外的其他任何操作都应该是必要的,但在linux主机上执行此操作的建议方法是通过执行

来卸载nvidia驱动程序
$ rmmod nvidia 

具有合适的root权限,然后使用

重新加载
$ modprobe nvidia

如果机器正在运行X11,您需要事先手动停止,然后重新启动它。驱动程序初始化过程应该消除设备上的任何先前状态。

此答案已从评论中汇总并作为社区维基发布,以便将此问题从CUDA标记的未答复列表中删除

答案 2 :(得分:5)

我也有同样的问题,我在quora中看到了一个很好的解决方案,使用

sudo kill -9 PID.

请参阅https://www.quora.com/How-do-I-kill-all-the-computer-processes-shown-in-nvidia-smi

答案 3 :(得分:5)

第一类

nvidia-smi

然后选择要杀死的PID

sudo kill -9 PID

答案 4 :(得分:4)

macOS (/ OS X)上,如果其他人在操作系统出现问题时显然会泄漏内存:

  • https://github.com/phvu/cuda-smi对于快速检查空闲内存非常有用
  • 退出应用程序似乎释放了他们使用的内存。退出您不需要的所有内容,或逐个退出应用程序以查看它们使用了多少内存。
  • 如果不能减少它(退出大约10个应用程序,对我来说释放大约500MB / 15%),目前最大的消费者是WindowServer。您可以强制退出它,这也将终止您运行的所有应用程序并将其注销。但它比重启快一点,让我回到了cuda设备的90%可用内存。

答案 5 :(得分:2)

对于使用python的用户:

import torch, gc
gc.collect()
torch.cuda.empty_cache()

答案 6 :(得分:2)

一个人也可以使用nvtop,它提供的界面与htop非常相似,但是用漂亮的图形显示GPU的使用情况。 您也可以直接从此处终止进程。

这里是其Github的链接:https://github.com/Syllo/nvtop

NVTOP interface