【解决】GPU占用显存,但看不到PID进程

文章介绍了如何通过nvidia-smi命令检查显卡占用情况,以及在遇到进程未知时如何使用`sudokill`和`fuserawk`来定位并杀死占用显存的进程。可能的原因包括程序崩溃、僵尸进程或共享GPU上其他用户进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nvidia-smi

常用的查看显卡基本信息的命令 nvidia-smi 发现显存被占用,但是看不到pid进程

在这里插入图片描述

可以使用下面的命令,查看详细的pid进程号和占用的显存

nvidia-smi --query-compute-apps=pid,used_memory --format=csv

在这里插入图片描述

原因

  • 可能是程序崩了,或者没有kill直接关机导致的僵尸进程
  • 也可能是启用的jupyter、gradio等其他挂载程序
  • 如果是公用GPU,也可能是其他人的进程

kill进程先大概了解一下是那个情况,别到时候把其他人的进程给断了【苦笑】

解决

直接使用sudo kill pid,kill指定pid进程,本文案例为22131,则为以下命令

sudo kill 22131

或者直接执行以下命令

fuser 命令来查找哪些进程正在使用 /dev/nvidia* 文件
awk 命令来处理 fuser 的输出,遍历每一行输出,以 "kill -9 " 开头,后面跟着每个进程的PID
执行前面生成的命令

sudo fuser -v /dev/nvidia* |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sudo sh
<think>好的,我需要解决用户的问题:找到并终止占用5G显存但未显示在nvitop中的进程。首先,用户已经尝试使用nvitop,但可能有些进程没有显示出来,所以需要其他方法。 根据用户提供的引用内容,特别是引用[3],提到了使用`fuser`命令来查找占用NVIDIA设备的进程,并通过管道生成kill命令。这可能是关键步骤。此外,引用[1]和[3]都涉及处理显存未释放的情况,所以这些方法可能适用。 首先,用户需要确认显存确实被占用。可以使用`nvidia-smi`查看显存使用情况,确认是否有5G左右的显存占用,但对应的进程ID(PID没有显示,或者进程已经被终止但显存未释放。 接下来,使用`fuser -v /dev/nvidia*`命令。这个命令会列出所有访问NVIDIA设备的进程。但要注意,可能需要sudo权限才能运行这个命令,因此可能需要加上`sudo`。 然后,使用`awk`处理输出,提取PID并生成kill命令。如引用[3]中的命令:`fuser -v /dev/nvidia* |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sh`。不过直接执行这个命令可能会有风险,因为可能会误杀其他进程。建议用户先检查输出的PID,确认哪些进程是应该终止的,再手动执行kill命令。 另外,用户提到nvitop没有显示这些进程,可能是因为nvitop本身没有捕获到所有进程,或者进程已经变成僵尸状态。这时候,通过系统级命令如`ps`或`top`结合GPU信息来查找可能更有效。 总结步骤应该是:先用`nvidia-smi`确认显存占用,再用`fuser`查找相关进程,检查这些进程是否应该终止,最后使用kill命令结束它们。同时,需要提醒用户谨慎操作,避免误杀系统关键进程。 可能还需要考虑是否有残留的内核进程或僵尸进程占用显存,这时候可能需要重启系统来彻底释放显存,但这是最后的手段。用户可能希望在不重启的情况下解决,所以前面的步骤更适用。 此外,用户的问题中提到的是5G显存,可能需要特别关注显存占用量,但具体进程显存占用可能分散在多个进程中,需要合计确认。或者可能存在一个进程正好占用5G的情况,需要结合具体情况分析。 最后,确保用户了解命令的风险,并建议备份工作进度后再执行kill操作,防止数据丢失。</think>### 分步解决方案 1. **确认显存占用情况** 使用 `nvidia-smi` 命令查看显存占用,找到未被释放的显存区块(例如5G显存),但此时可能看不到具体进程名称或PID[^1][^3]。 2. **查找占用GPU设备的进程** 通过系统级命令 `fuser` 扫描所有与NVIDIA设备相关的进程: ```bash sudo fuser -v /dev/nvidia* ``` 输出会显示占用GPU进程PID(例如:`/dev/nvidia0: 12345F`,其中 `12345` 是PID)。 3. **终止相关进程** 若确认PID是异常占用(如无主进程),可通过以下命令批量终止: ```bash sudo fuser -v /dev/nvidia* | awk '{for(i=1;i<=NF;i++) print "kill -9 " $i;}' | sh ``` 此命令会强制终止所有占用GPU进程。 4. **验证显存释放** 再次运行 `nvidia-smi` 检查显存是否释放。若仍未释放,可能需要重启系统(某些僵尸进程可能无法通过kill命令彻底清除)。 --- ### 注意事项 - 谨慎使用 `kill -9`,避免误杀关键进程(如深度学习训练任务) - 若问题频繁出现,建议检查代码是否存在显存泄漏 - `nvitop` 可能因权限问题无法显示部分进程,尝试以 `sudo nvitop` 运行 --- ### 相关问题 1. 如何避免GPU显存泄漏? 2. 僵尸进程占用显存时如何彻底清理? 3. `nvidia-smi` 和 `nvitop` 的监控机制有何区别?
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值