GPU显存不释放
使用pytorch训练网络时,有时强行kill掉程序后, 发现GPU显存未释放,原因是使用PyTorch
设置多线程(threads)进行数据读取(DataLoader),其实是假的多线程,他是开了N个子进程(PID都连着)进行模拟多线程工作,所以你的程序跑完或者中途kill掉主进程的话,子进程的GPU显存并不会被释放,需要手动一个一个kill才行
解决办法:
1.执行如下python
脚本:
# 该脚本会清除 当前登陆用户导致的GPU显存不释放问题
import os
result = os.popen("fuser -v /dev/nvidia*").read()
results = result.split()
for pid in results:
os.system(f"kill -9 {
int(pid)}")
2.或者执行如下sheel
脚本
#!/bin/bash
gpu_process=$(fuser -v /dev/nvidia*)
for process_id in $(fuser -v /dev/nvidia*)
do
$(kill -9 $process_id)
done
参考:https://www.jianshu.com/p/0d8ea6ca332a