谁动了我的GPU

Step 0

nvidia-smi
查询显存占用,可以看到PID

Step 1

cat /proc/PID/environ | tr '\0' '\n' | grep CONDA
查看该进程的环境变量,因为每个人用的conda环境不一样,可以通过环境变量看出是谁在运行;
输出信息示例:

CONDA_PREFIX=/home/username/anaconda3/envs/myenv
CONDA_DEFAULT_ENV=myenv

Step 2

查询该进程的运行命令,单单清楚是在哪个环境上运行是不够的,

Method 1 : ps 命令

ps -p PID -o args=
将 PID 替换为你要查看的进程ID,这个命令会直接显示运行的完整命令行。
比如:ps -p 12345 -o args=,输出类似于:python train.py --batch_size 32 --epochs 50

Method 2 : cat 命令读取 /proc/PID/cmdline

你还可以直接读取 /proc 文件系统中的 cmdline 文件,这个文件包含进程的完整命令行。
cat /proc/PID/cmdline
例如:cat /proc/12345/cmdline,输出:pythontrain.py--batch_size32--epochs50

Method 3 : pstree 命令

如果你希望看到进程的父子关系和完整的命令,可以使用 pstree
pstree -p PID

Step 3

杀死命令

kill PID

kill -9 KID

pkill process_name

遇到僵尸进程了

nvidia-smi查不到进程,但是GPU的显存实实在在是被占用的;

fuser 命令查找

0号GPU上寻找
fuser -v /dev/nvidia0

杀死进程

  • 用命令批量处理:
sudo fuser -v /dev/nvidia3 | awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sudo sh
  • 手动一个一个杀死(建议
    我害怕你用批量处理杀死了不该杀的东西。。。

僵尸进程

僵尸进程(Zombie Process)是指已经终止运行,但其进程表项仍然保留在操作系统中的进程。这种情况通常发生在一个进程(子进程)结束后,父进程没有及时调用系统调用(例如 wait()waitpid() )来读取子进程的退出状态,导致子进程的某些信息依然保存在进程表中。

这里我强调是僵尸进程是想说有可能是从前某个意外结束的进程导致占用GPU(没谁抢你的GPU,自己曾经的程序给自己找麻烦,笨蛋)

参考

Chatgpt 4,上述命令我在Linux试验过,杀死进程的时候注意即可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值