type
date
slug
summary
tags
category
icon
password
Publication Date
Link
Shot Title
Author/Team
Fields
Publication
Notes
Status
status
 

方式一:VScode Debug配置文件 调试多卡用 Pytorch 程序

 
现在深度学习框架大多是为了多卡并行训练而写的框架,对于新手来说,Debug代码是学习模型结构,了解基本输入输出流的最佳方式。但是多卡程序一般是。
 
 
确定环境变量
 
  • 确定你所使用的conda环境,如环境为my_pytorch
  • 找到你所使用环境对应的解释器,注意其中的python版本号需要根据你的环境更换。
    • .../conda/envs/my_pytorch/lib/python3.7/site-package/torch/distributed/launch.py
       
修改 VScode Debug 配置文件
 
点击左侧Debug按钮,并再次点击齿轮打开launch.json文件,并按照如下进行设置
 
 
  • program: 为第一步查到的解释路径
  • args: 为你需要更改的参数
    • -nproc_per_node=1: 一般来说,debug选择单卡会方便
    • -master_port=12098: 随便设置一个端口号用于通信,不要与之前使用的端口号相同
    • train.py: 训练文件,或者接收参数的文件
    • -config: config/*.yaml, train.py文件需要的参数
    • -other_params: your_params, train.py文件需要的参数
  • envs: 你需要选择在哪块GPU进行debug
 
 
VScode调试模型并不能成功的开启新进程,所以我们在数据加载时需要设置num_worksers=0来避免调试程序卡住。
 
 

方式 二:VS Code + debugpy 调试 PyTorch 多卡程序

 
在 VS Code 调试 PyTorch 多卡程序 中,我们介绍了如何使用 VS Code 调试 PyTorch 多卡程序,但使用该方法可能会遇到几个问题(或体验不佳):
  • 需要把启动脚本接受的所有参数写在~/.vscode/launch.json的args字段,而且当想要更改传入给脚本的参数时需要频繁修改~/.vscode/launch.json
  • 使用 shell 脚本或者 srun 启动多卡程序,不清楚怎么配置~/.vscode/launch.json
如果你也遇到上面的问题,可以考虑本文的调试工具 VS Code + debugpy,本文参考自 Python debugging in VS Code。
接下来,我们开始介绍如何使用 VS Code + debugpy 调试 PyTorch 多卡程序。
 
安装 debugpy
 
 
运行多卡程序
本文的示例代码来自 PyTorch 官方文档 initialize-ddp-with-torch-distributed-run-torchrun , 新建一个ddp_demo.py
 
使用两卡运行程序:
 
 
如果程序正常结束,我们开始多卡程序的调试。
 
调试多卡程序
 
使用 VS Code 调试需先配置~/.vscode/launch.json
 
 
接下来在 VS Code 中设置断点,例如我们希望看一下ToyModel的forward过程,我们可以在outputs = ddp_model(torch.randn(20, 10))处设置断点,然后点击下图中红色圈出来的Attach按钮:
 
notion image
notion image
 
 
最后运行下面的命令:
 
 
除了使用python -m debugpy CLI 的方式,也可以在代码中插入 debugpy 代码,如下所示:
 
 
然后使用运行多卡程序的命令:
 
 
不管使用哪种方式,都可以看到ddp_demo.py中的代码停在了断点处:
 
notion image
点击 F11 可跳入ToyModel的forward方法:
notion image
注意,在调试时,也需要进入到 Subprocess(下图红色圈处)执行代码,否则代码会卡在optimizer.step()。
notion image