文章目录
- 一. pytorch 分布式调试debug torch.distributed.launch 三种方式
- 1. 方式1:ipdb调试(建议)
- 命令行使用pdb未解决:
- 2. 方式2:使用pycharm进行分布式调试(侵入式代码)
- 3. 方式3:使用pycharm进行分布式调试(另外一种方式:非侵入代码)
一. pytorch 分布式调试debug torch.distributed.launch 三种方式
1. 方式1:ipdb调试(建议)
参考之前的博客:python调试器 ipdb
注意:pytorch 分布式调试只能使用侵入式调试,也即是在你需要打断点的地方(或者在主程序的第一行)添加下面的代码:
import pdb
pdb.set_trace()
当进入pdb调试后,跟原先使用pdb调试命令一样,可以在线打断点(再使用pdb命令添加多个断点),也可以逐行执行代码,也能查看变量。唯一缺点是分布式调试需要在代码前手动加上pdb.set_trace()这一行代码,手动打第一个断点。
命令行使用pdb未解决:
命令行进行添加pdb:
python -m pdb -m torch.distributed.launch .....
命令行添加pdb后,进入调试的代码在launch.py中,打断点到主程序后,无法进入到住程序里面,------???暂时未解决
2. 方式2:使用pycharm进行分布式调试(侵入式代码)
在主函数开头添加如下代码:
if args.world_size == 0:
os.environ['MASTER_ADDR'] = 'localhost' #master节点的ip地址
os.environ['MASTER_PORT'] = '56220' #master节点的端口号
os.environ["RANK"] = "0"
os.environ['WORLD_SIZE'] = '1' #debug时没有world_size=8参数,只有一个gpu
torch.distributed.init_process_group(backend="nccl") #分布式后端初始化
注意一定要在初始化分布式后端nccl之前添加master节点的ip地址和端口号等信息,如下图:
然后在pycharm Edit configurations…中配置环境,Script path为:主程序.py文件位置,Parameters:程序需要运行的参数,Environment variables:增加环境变量,配置好后,点击Apply–>OK即可。
注意Parameters参数里面不能配置 ‘’–world_size’’ 参数,程序world_size默认为0,因为主程序需要在这一行if args.world_size == 0代码的 if 判断语句里面 需要手动配置master节点的ip和端口号,以及world_size和rank等配置。
此方式也就是相当于在分布式代码上面使用一张卡进行代码调试。
3. 方式3:使用pycharm进行分布式调试(另外一种方式:非侵入代码)
参考链接:
【PyTorch】PyCharm远程连接服务器,调试torch.distributed.launch分布式程序,
Pycharm:运行、调试pytorch分布式训练代码
注意:Parameters参数的详细设置中:所有参数涉及需要路径的地方(如文件路径,保存路径,数据集路径等)就必须使用绝对路径,不然会报错,找不到文件,如下图: