自学内容网 自学内容网

【分布式训练(5)】无法 kill PID?如何 kill 休眠中的 GPU 占用进程

【分布式训练 debug】VS Code Debug 技巧:launch.json实用参数
【分布式训练(2)】深入理解 DeepSpeed 的 ZeRO 内存优化策略 (三阶段的区别)
【分布式训练(3)】accelerator + deepspeed debug 报错 “Timed out waiting for debuggee to spawn“ 解决方法✅
【分布式训练(4)】accelerator.sync_gradients 和 checkpointing 深入理解

问题描述
  • 发生原因:在通过 cursor(vs code)进行 launch.json debug 时,网络突然中断,重新连接后,无法接着进行 debug,但 GPU 仍然占用。
    在这里插入图片描述
  • 进一步的问题:通过 nvitop 可以看到 PID 号(如上图),但是无法 kill 掉通过 nvitop 显示的 PID(如下图)。
    在这里插入图片描述

解决方案

  1. 通过对 conda 环境中的 python 指令进行搜索,获得相应的 PID 号
ps -aux | grep '/path/miniconda/env/bin/python'
  1. 可以看到处于 S 状态的进程,应该就是休眠的进程。
root     3257498  0.0  0.0 83501464 701556 ?     S    07:09   0:02 /xxx/bin/python -u /root/.cursor-server/extensions/ms-python.debugpy-2024.6.0-linux-
root     3258629  9.7  0.0 260608 30484 pts/25   Sl+  07:16   4:32 /xxx/bin/python /tiamat-NAS/lisiyu/miniconda/llama-sd/wenda_flux/bin/nvitop
root     3269234  0.0  0.0   3596  2220 pts/21   S+   08:02   0:00 grep --color=auto /xxx/bin/python

进程状态的含义

  1. S (Sleeping):
    进程处于休眠状态,表示它正在等待某个事件(如 I/O 操作完成、信号等)。这是一种常见的状态,表示进程没有在使用 CPU。
  2. Sl (Sleeping + Multi-threaded):
    S 表示进程处于休眠状态。
    l 表示该进程是一个多线程进程。这意味着该进程可以有多个执行线程。
  3. S+ (Sleeping + Foreground):
    S 表示进程处于休眠状态。+ 表示该进程是一个前台进程,通常是与终端关联的进程。前台进程可以接收来自终端的输入。

所以对这些 .cursor-server 的 PID 号进行 kill 就可以解决该问题啦。🎉

# 可一次性 kill 多个 PID。
kill 325xxx4 32xxx5 32xxx39 ...

在这里插入图片描述


原文地址:https://blog.csdn.net/weixin_44212848/article/details/142956053

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!