VSCode上用debugpy搭配time调试DDP程序

VSCode上用debugpy搭配time调试DDP程序

由于不少任务并不是通过python直接启动的,尤其是使用slurm等方式调度的集群,由于机卡分离,难以直接从vscode启动调试;DDP由于其多进程的特性,调试起来也十分麻烦。debugpy与time搭配使用算是这种条件下一个不错的调试方案。

launch.json基本配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: 远程调试",
"type": "python",
"request": "attach",
"listen": {
"host": "0.0.0.0",
"port": 5678
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "."
}
]
}
]
}

在需要调试的程序内加入

1
2
3
4
5
6
7
import debugpy
...
if trainer.global_rank == 0:
debugpy.connect(['${IP_ADDRESS}', 5678]) # ip地址为launch.json所在的机器地址
else:
time.sleep(...)
...

通过在适当位置加入time.sleep来防止其他主进程继续运行导致主进程断开与vscode的连接。另外也可以在所有进程共用的部分使用time.sleep,不过这样只能调试sleep之前的部分。

调试时先在vscode上左上角开启调试,之后终端运行程序等待连接即可。

Reference


VSCode上用debugpy搭配time调试DDP程序
https://blog.iks-ran.com/2023/09/30/vsc_ddpdebug/
Author
iks-ran
Posted on
September 30, 2023
Licensed under