我的CUDA程序在执行期间崩溃,然后刷新内存。结果,设备内存仍然被占用。
我正在使用GTX 580,但不支持nvidia-smi --gpu-reset
。
在程序开头放置cudaDeviceReset()
只会影响进程创建的当前上下文,并且不会刷新在它之前分配的内存。
我正在远程访问具有该GPU的Fedora服务器,因此物理重置非常复杂。
所以,问题是 - 在这种情况下有没有办法刷新设备内存?
答案 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
或
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)上,如果其他人在操作系统出现问题时显然会泄漏内存:
答案 5 :(得分:2)
对于使用python的用户:
import torch, gc
gc.collect()
torch.cuda.empty_cache()
答案 6 :(得分:2)
一个人也可以使用nvtop
,它提供的界面与htop
非常相似,但是用漂亮的图形显示GPU的使用情况。
您也可以直接从此处终止进程。
这里是其Github的链接:https://github.com/Syllo/nvtop