【发布时间】:2022-01-28 18:31:25
【问题描述】:
具有 4 个 GPU 的服务器用于深度学习。
在训练过程终止(终止)后,GPU 内存没有被释放的情况经常发生。 nvidia-smi 显示的结果是
使用了 cuda 设备 2。 (可能是使用CUDA_VISIBLE_DEVICES=2 启动的进程)
部分子进程还活着,占用内存。
-
一个强力解决方案是杀死所有由 python 创建的进程:
pkill -u user_name python
如果只有一个进程需要清理,这应该会很有帮助。
-
pytorch官方My GPU memory isn’t freed properly提出的另一种解决方案 可以通过
找到它们ps -elf | grep python. -
但是,如果启动了多个进程,而我们只想杀死与某个 GPU 相关的进程,我们可以按 gpu 索引 (nvidia0, nvidia1, ...) 将进程分组为:
fuser -v /dev/nvidia*
我们可以看到,/dev/nvidia3 被一些 python 线程使用。因此/dev/nvidia3 对应于cuda device 2。
问题是:我想杀死设置为CUDA_VISIBLE_DEVICES=2 的某些进程,但我不知道gpu 索引(/dev/nvidia0, /dev/nvidia1, ...)。
如何找到CUDA_VISIBLE_DEVICES={0,1,2,3}和/dev/nvidia{0,1,2,3}之间的映射关系。
【问题讨论】:
-
设置
CUDA_DEVICE_ORDER=PCI_BUS_ID会有帮助吗?那么 CUDA 和 nvidia-smi 之间的顺序应该是一致的。 -
这就是我想要的答案。您想将您的评论放入答案区域,以便我可以将其标记为已接受并已解决。 @MartinPecka
-
好的,我会的。