【原创】如何解决python进程被kill掉后GPU显存不释放的问题

本文介绍了一种常见情况,即在服务器上kill掉Python进程后,GPU显存未被正确释放的问题,并提供了解决方案。通过重新打开shell并使用特定命令检查和清理进程,最终释放了被占用的显存。

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

今早kill掉服务器里两个python进程,结果发现GPU的显存并没有被释放。在网上查了各种方法,最后搞定。

这是进程被kill掉后显存依旧被占的情景:


莫慌~试试以下几步:

1 重新开一个shell,然后输入: ps aux|grep user_name|grep python。所有该用户下的python程序就会显示出来(很多在用watch命令都不会显示的进程在这里可以看到);

2 然后再一个个用kill命令清理


这样就大功告成了~~~是不是很简单啊

### 如何释放服务器上指定GPU显存 在深度学习和高性能计算场景下,清理特定GPU显存通常涉及终止占用该GPU资源的相关进程。以下是具体方法: #### 终端操作流程 可以通过 `nvidia-smi` 命令获取当前系统中各GPU的使用情况以及占用其资源的进程列表[^1]。执行以下命令可查看详细的GPU状态及进程信息: ```bash nvidia-smi ``` 上述命令会返回每块GPU的详细状态,包括编号、名称、功耗、温度、利用率、已分配的显存和总显存等数据[^3]。同时,“Processes”部分列出了正在使用的进程及其ID。 要释放某块GPU上的显存,需先找到并杀死与其关联的所有进程。假设目标是释放第0号GPU(即GPU 0)的显存,则按照如下方式处理: 1. **查找占用GPU资源的进程** 执行以下命令筛选出仅与目标GPU相关的进程: ```bash nvidia-smi | grep "GPU 0" ``` 2. **记录进程PID** 上述命令的结果将显示所有占用GPU 0的进程及其对应的PID(Process ID)。例如: ``` 12345 C python 896MiB 12346 C tensorboard 128MiB ``` 此处,`12345` 和 `12346` 即为需要清除的进程ID。 3. **强制终止这些进程** 使用 `kill` 或 `pkill` 命令逐一结束对应进程: ```bash kill -9 12345 kill -9 12346 ``` 完成以上步骤后,再次运行 `nvidia-smi` 验证显存是否已被成功回收。如果仍有残留占用,可能是因为某些后台服务未完全退出;此时建议重启相关服务或整个节点以彻底解决问题[^2]。 另外,在CUDA环境中开发的应用程序可能会因为异常中断而遗留隐匿句柄导致无法正常释放显存。针对这种情况,除了手动杀可疑线程外,也可以尝试调用 CUDA 提供的专用函数来进行全局范围内的资源销毁工作[^4]: ```cpp cudaDeviceReset(); ``` 此C++ API 能够确保当前进程中所有的 GPU 设备都被安全关闭,并且回收它们所持有的全部内存空间。 #### 注意事项 - 杀死进程前务必确认无误以免影响其他重要任务; - 对于长期部署的服务型应用来说,频繁的人工干预并是理想方案——应当优化代码逻辑减少必要的资源浪费现象发生。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值