如何使用CUDA刷新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

我的CUDA程序在执行过程中崩溃,然后内存被刷新。因此,设备内存仍然被占用

我运行的是GTX 580,不支持nvidia smi--gpu重置

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
      上或使用

      sudo kill -9 PID.
      
      在上面的例子中,Pycharm消耗了大量内存,所以我杀死了20450和20699

      nvidia-smi
      
      然后选择要终止的PID

      sudo kill -9 PID
      

      对于使用python的用户:

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

      你也可以使用
      nvtop
      ,它提供了一个非常类似于
      htop
      的界面,但是用一个漂亮的图形来显示你的GPU使用情况。 您还可以从这里直接终止进程

      以下是其Github的链接:


      “因此,设备内存仍然被占用”-您如何知道这是真的?虽然
      nvidia smi--gpu重置
      不可用,但我仍然可以通过
      nvidia smi-q
      获得一些信息。在大多数字段中,它给出“不适用”,但有些信息是有用的。以下是相关输出:
      内存使用总量:1535 MB已使用:1227 MB可用:307 MB
      如果您具有根访问权限,您可以卸载并重新加载
      nvidia
      驱动程序。如果您卸载并重新加载
      ps-ef | grep'whoami'
      ,并且结果显示与崩溃会话相关的任何进程,请将其杀死。(单引号“应替换为反勾号”)您是否尝试过sudo rmmod nvidia?谢谢!出于某种原因,我有一个进程占用了我所有的VRAM,没有显示在
      nvidia smi
      上。在不同的jupyter笔记本上运行深度学习时,我需要经常使用这个进程。唯一的问题是确切地知道哪个PID是哪个。有什么建议吗?@josh我一次杀一个,记下这个命令。@kRazzyR-我想它用它来加速计算,渲染图形,但也可能是其他东西。当我安装Nvidia驱动程序、CUDA和cudnn时,这确实给我带来了很多问题。我不得不关掉很多。请参阅。在我的情况下,
      sudo
      是不必要的。当我不小心打开并加载了两个不同的带有VGG16的jupyter笔记本时,我做了一件好事。警告:它会杀死笔记本电脑。我想你可以选择一个为另一个释放一些内存,但我不知道如何为给定笔记本选择PID。无法处理上述命令,错误显示,CUDA正在使用。因此,使用提供的解决方案终止PID。它对meThis的作用与提问者的提问完全不同