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

tim*_*dim 35 cuda gpgpu remote-access

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

我正在运行GTX 580,但nvidia-smi --gpu-reset不支持.

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

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

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

kso*_*all 62

检查使用GPU内存的是什么

sudo fuser -v /dev/nvidia*
Run Code Online (Sandbox Code Playgroud)

您的输出将如下所示:

                     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
Run Code Online (Sandbox Code Playgroud)

然后杀了,你不再需要在PID htop

sudo kill -9 PID.
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢!由于某种原因,我有一个进程占用了我的所有VRAM,没有显示在`nvidia-smi`上. (4认同)
  • 在不同的 jupyter 笔记本中运行深度学习时,我需要经常使用它。唯一的问题是确切地知道哪个 PID 是哪个。这方面有什么建议吗? (2认同)
  • @josh 我一次杀一个,记下命令。 (2认同)
  • @kRazzyR - 我假设它用于加速计算,用于渲染图形,但也许还有其他东西.当我安装Nvidia驱动程序,CUDA和cudnn时,这确实给我带来了很多问题.我不得不关掉它.见[这里](https://www.lifewire.com/hardware-acceleration-in-chrome-4125122). (2认同)

Ash*_*ran 13

First type

nvidia-smi
Run Code Online (Sandbox Code Playgroud)

then select the PID that you want to kill

sudo kill -9 PID
Run Code Online (Sandbox Code Playgroud)

  • 太棒了,这个确实对我有用。PID 应替换为使用 GPU 的进程的 PID 号(您可以通过 nvidia-smi 计算) (2认同)

Ant*_*lon 11

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

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

NVTOP接口


tal*_*ies 9

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

$ rmmod nvidia 
Run Code Online (Sandbox Code Playgroud)

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

$ modprobe nvidia
Run Code Online (Sandbox Code Playgroud)

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

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

  • 错误说,CUDA正在使用中,因此无法处理以上命令。因此,使用/sf/answers/3261807671/提供的解决方案杀死了PID。对我有用 (3认同)

小智 8

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

sudo kill -9 PID.
Run Code Online (Sandbox Code Playgroud)

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


小智 6

对于使用python的人:

import torch, gc
gc.collect()
torch.cuda.empty_cache()
Run Code Online (Sandbox Code Playgroud)

  • 这不能以任何方式回答提问者所问的问题 (12认同)
  • 尽管如此,还是回答了我的问题(诚然,这与OP提出的问题不完全相同,但在搜索时与标题匹配) (2认同)

Abu*_*Ali 6

杀死 GPU 上的所有进程:

sudo fuser -v /dev/nvidia* -k
Run Code Online (Sandbox Code Playgroud)


Mat*_*tW. 5

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

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