进程Kill杀死后GPU显存没有释放仍然被占用(僵尸进程)

清理占用GPU显存的僵尸进程

概要

在基于Linux(Ubuntu)系统进行开发时。程序调用GPU进行运算(如深度学习框架,尤其是Paddle框架),若进程非正常终止,最常见是在进程运行中使用Ctrl+C杀死进程,进程结束后会留下僵尸进程,使用kill -9 pid指令提示 No such process

网上很多博客介绍使用fuser -v /dev/nvidia*查看PID,但这个指令返回的结果只有pid,没有其他信息,然后手动复制,一个一个尝试。

这样操作流程比较费事,每次都要折腾挺久,所以我加了个流程,自动清理。

Talk is cheap. Show me the code

具体指令如下:

fuser -v /dev/nvidia0 | awk '{print $0}' |  xargs kill -9

这行指令能够自动清理编号为0的显卡上当前用户的所有调用GPU进程,注意使用该指令会清空所有程序。清理第二块卡将0改成1,以此类推。

### 解决GPU内存不足的方法 当遇到GPU内存不足的问题时,可以采取多种措施来缓解或彻底解决问题。以下是几种常见且有效的策略: #### 优化模型结构 通过简化网络架构减少参数量,从而降低显存占用。例如,减少卷积层的数量或调整滤波器尺寸。 #### 调整批量大小 减小输入数据批次(batch size),这可以直接影响到每轮迭代所需的临时存储空间需求[^2]。 ```python batch_size = 8 # 原始设置可能过高 model.train() for data, target in dataloader: output = model(data) ``` #### 使用混合精度训练 采用FP16半精度浮点数代替传统的FP32全精度计算方式,在不影响最终效果的前提下节省约一半的显存量并加速运算过程。 ```python from torch.cuda import amp scaler = amp.GradScaler() with autocast(): outputs = net(inputs) loss = criterion(outputs, labels) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update() ``` #### 清理未释放资源 确保之前运行的任务已经完全结束并且清理不再使用的变量,防止残留对象占据不必要的显存份额。对于Windows环境下频繁出现OOM(out-of-memory)情况,可能是由于旧有进程未能及时终止所致[^1]。 可以通过命令行工具`nvidia-smi`查看当前活跃于GPU上的程序列表,并手动停止那些不需要继续执行的服务;或者编写脚本来自动检测和清除僵尸进程。 ```bash !nvidia-smi # 找到对应的PID号后强制关闭特定应用 !kill -9 PID_NUMBER ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值