71

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

我在nvidia-smi --gpu-reset不支持的 GTX 580 上运行。

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

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

所以,问题是 - 在这种情况下有什么方法可以刷新设备内存?

4

8 回答 8

138

检查什么正在使用您的 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

然后杀死你不再需要的htopPID

sudo kill -9 PID.

在上面的例子中,Pycharm 吃掉了很多内存,所以我杀死了 20450 和 20699。

于 2017-10-06T02:07:10.920 回答
43

第一类

nvidia-smi

然后选择要杀死的PID

sudo kill -9 PID
于 2018-12-14T08:24:45.630 回答
16

尽管在特殊情况下没有必要这样做,但在 linux 主机上执行此操作的推荐方法是通过以下方式卸载 nvidia 驱动程序

$ rmmod nvidia 

具有适当的root权限,然后重新加载它

$ modprobe nvidia

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

此答案已从评论中收集并发布为社区 wiki,以将此问题从 CUDA 标签的未回答列表中删除

于 2014-05-18T12:18:14.923 回答
12

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

sudo kill -9 PID.

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

于 2017-07-19T13:26:21.887 回答
7

对于使用 python 的人:

import torch, gc
gc.collect()
torch.cuda.empty_cache()
于 2020-03-31T09:34:31.487 回答
6

也可以使用nvtop,它提供了一个与 非常相似的界面htop,但显示了您的 GPU 使用情况,并带有漂亮的图表。您也可以直接从这里终止进程。

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

NVTOP 接口

于 2020-04-10T09:57:26.327 回答
5

macOS (/ OS X) 上,如果其他人遇到操作系统明显泄漏内存的问题:

  • https://github.com/phvu/cuda-smi对于快速检查空闲内存很有用
  • 退出应用程序似乎释放了它们使用的内存。退出您不需要的所有内容,或逐个退出应用程序以查看它们使用了多少内存。
  • 如果这还不能解决(退出大约 10 个应用程序为我释放了大约 500MB / 15%),那么迄今为止最大的消费者是 WindowServer。您可以强制退出它,这也会杀死您正在运行的所有应用程序并将您注销。但它比重新启动要快一点,让我回到 cuda 设备上 90% 的可用内存。
于 2016-10-12T21:54:07.323 回答
1

对于操作系统:UBUNTU 20.04 在终端类型中

nvtop

如果直接杀死消耗活动不起作用,则查找并记下 GPU 使用率最高的活动 PID 的确切数量。

sudo kill PID -number
于 2021-12-01T05:01:30.117 回答