【分布式训练 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(如下图)。
解决方案
- 通过对 conda 环境中的 python 指令进行搜索,获得相应的 PID 号
ps -aux | grep '/path/miniconda/env/bin/python'
- 可以看到处于 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
进程状态的含义
- S (Sleeping):
进程处于休眠状态,表示它正在等待某个事件(如 I/O 操作完成、信号等)。这是一种常见的状态,表示进程没有在使用 CPU。 - Sl (Sleeping + Multi-threaded):
S 表示进程处于休眠状态。
l 表示该进程是一个多线程进程。这意味着该进程可以有多个执行线程。 - S+ (Sleeping + Foreground):
S 表示进程处于休眠状态。+ 表示该进程是一个前台进程,通常是与终端关联的进程。前台进程可以接收来自终端的输入。
所以对这些 .cursor-server 的 PID 号进行 kill 就可以解决该问题啦。🎉
# 可一次性 kill 多个 PID。
kill 325xxx4 32xxx5 32xxx39 ...