如何使用CUDA刷新GPU内存(物理重置不可用)
我的CUDA程序在执行过程中崩溃,然后内存被刷新。因此,设备内存仍然被占用 我运行的是GTX 580,不支持nvidia smi--gpu重置 将如何使用CUDA刷新GPU内存(物理重置不可用),cuda,gpgpu,remote-access,Cuda,Gpgpu,Remote Access,我的CUDA程序在执行过程中崩溃,然后内存被刷新。因此,设备内存仍然被占用 我运行的是GTX 580,不支持nvidia smi--gpu重置 将cudaDeviceReset()放在程序开头只会影响进程创建的当前上下文,不会刷新之前分配的内存 我用GPU远程访问Fedora服务器,所以物理重置相当复杂 P> >问题是,在这种情况下有没有办法刷新设备内存?< p>尽管在特殊情况下不应该这样做,但是在Linux主机上这样做的推荐方法是通过做< /P>卸载英伟达驱动程序。 $ rmmod nvid
cudaDeviceReset()
放在程序开头只会影响进程创建的当前上下文,不会刷新之前分配的内存
我用GPU远程访问Fedora服务器,所以物理重置相当复杂
<> P> >问题是,在这种情况下有没有办法刷新设备内存?< p>尽管在特殊情况下不应该这样做,但是在Linux主机上这样做的推荐方法是通过做< /P>卸载英伟达驱动程序。
$ rmmod nvidia
使用合适的root权限,然后使用
$ modprobe nvidia
如果机器正在运行X11,则需要事先手动停止,然后重新启动。驱动程序初始化过程应消除设备上的任何先前状态
此答案由评论汇总而成,并以社区维基的形式发布,以使此问题从macOS(/OS X)上的CUDA标签的未回答列表中删除,如果其他人在操作系统内存明显泄漏方面遇到问题:
- 用于快速检查可用内存
- 退出应用程序似乎可以释放它们使用的内存。退出您不需要的所有内容,或者逐个退出应用程序以查看它们使用了多少内存
- 如果这还不能解决问题(退出大约10个应用程序,我可以释放大约500MB/15%),那么到目前为止最大的消费者是WindowsServer。您可以强制退出它,这也将杀死您正在运行的所有应用程序并注销。但这比重启快了一点,让我在cuda设备上恢复了90%的可用内存李>
- 我也遇到了同样的问题,我在quora中看到了一个很好的解决方案,使用
sudo kill -9 PID.
请参见检查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
在上面的例子中,Pycharm消耗了大量内存,所以我杀死了20450和20699sudo kill -9 PID.
然后选择要终止的PIDnvidia-smi
sudo kill -9 PID
对于使用python的用户:import torch, gc gc.collect() torch.cuda.empty_cache()
你也可以使用
,它提供了一个非常类似于nvtop
的界面,但是用一个漂亮的图形来显示你的GPU使用情况。 您还可以从这里直接终止进程 以下是其Github的链接:htop
“因此,设备内存仍然被占用”-您如何知道这是真的?虽然
不可用,但我仍然可以通过nvidia smi--gpu重置
获得一些信息。在大多数字段中,它给出“不适用”,但有些信息是有用的。以下是相关输出:nvidia smi-q
如果您具有根访问权限,您可以卸载并重新加载内存使用总量:1535 MB已使用:1227 MB可用:307 MB
驱动程序。如果您卸载并重新加载nvidia
,并且结果显示与崩溃会话相关的任何进程,请将其杀死。(单引号“应替换为反勾号”)您是否尝试过sudo rmmod nvidia?谢谢!出于某种原因,我有一个进程占用了我所有的VRAM,没有显示在ps-ef | grep'whoami'
上。在不同的jupyter笔记本上运行深度学习时,我需要经常使用这个进程。唯一的问题是确切地知道哪个PID是哪个。有什么建议吗?@josh我一次杀一个,记下这个命令。@kRazzyR-我想它用它来加速计算,渲染图形,但也可能是其他东西。当我安装Nvidia驱动程序、CUDA和cudnn时,这确实给我带来了很多问题。我不得不关掉很多。请参阅。在我的情况下,nvidia smi
是不必要的。当我不小心打开并加载了两个不同的带有VGG16的jupyter笔记本时,我做了一件好事。警告:它会杀死笔记本电脑。我想你可以选择一个为另一个释放一些内存,但我不知道如何为给定笔记本选择PID。无法处理上述命令,错误显示,CUDA正在使用。因此,使用提供的解决方案终止PID。它对meThis的作用与提问者的提问完全不同sudo