Nvidia-smi没有进程但是显存不释放

PyTorch多卡训练模型,经常出现显存爆满,而训练程序未启动:

使用命令发现僵尸进程

fuser -v /dev/nvidia*

接着用 kill -9 pid 杀死僵尸进程,当僵尸进程比较多时,上述命令重复输入显得非常繁琐,使用一行命令杀死所有占用gpu的进程:

fuser -v /dev/nvidia* |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sh
### 使用 `nvidia-smi` 工具释放 GPU 显存 #### 利用 `nvidia-smi` 的特性来管理显存占用 当遇到程序异常退出或其他原因导致的GPU内存未被及时回收的情况时,可以利用 `nvidia-smi` 提供的功能尝试清理。通常情况下,操作系统会在进程结束之后自动回收分配给该进程的GPU资源;但在某些特殊场景下可能需要手动干预。 对于想要立即终止某个特定进程释放其持有的GPU资源的操作,可以通过以下命令实现: ```bash nvidia-smi pmon -g 0 -c 1 | awk '{print $2}' | grep -v PID | xargs kill -9 ``` 这条指令的作用是从正在运行的进程中筛选出那些占用了目标GPU(这里指定的是第0号GPU)的所有PID,并强制杀死这些进程从而达到快速释放目的[^2]。 需要注意的是,在执行上述操作前应当确认要杀掉的目标进程确实是可以安全停止的服务或应用,以免造成数据丢失等问题。 另外一种方式则是重启整个计算节点上的所有服务,这会使得所有依赖于本地GPU的应用都被关闭进而完成资源回收工作,过这种方式影响范围较大,仅作为最后手段考虑。 为了更精细地控制和优化GPU资源利用率,还可以探索其他高级设置选项如调整功耗限制、改变频率等,但这部分超出了单纯“释放显存”的范畴。 #### Python脚本辅助检测与处理 考虑到自动化的需求,下面给出一段简单的Python代码片段用于检查是否存在可用的NVIDIA GPU以及初步判断是否有必要采取措施进行显存清理: ```python import os import torch def check_gpus(): if not torch.cuda.is_available(): print('This script could only be used to manage NVIDIA GPUs, but no GPU found in your device') return False elif 'NVIDIA System Management' not in os.popen('nvidia-smi -h').read(): print("'nvidia-smi' tool not found.") return False return True ``` 这段代码可以帮助开发者们迅速定位环境配置方面的问题,确保后续关于GPU资源管理的相关动作能够在合适的前提条件下被执行[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值