pytorch 分布式调试debug torch.distributed.launch

文章目录

      • 一. 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地址和端口号等信息,如下图:

pytorch 分布式调试debug torch.distributed.launch_第1张图片

然后在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等配置

pytorch 分布式调试debug torch.distributed.launch_第2张图片

此方式也就是相当于在分布式代码上面使用一张卡进行代码调试。

3. 方式3:使用pycharm进行分布式调试(另外一种方式:非侵入代码)

参考链接:
【PyTorch】PyCharm远程连接服务器,调试torch.distributed.launch分布式程序,
Pycharm:运行、调试pytorch分布式训练代码

注意:Parameters参数的详细设置中:所有参数涉及需要路径的地方(如文件路径,保存路径,数据集路径等)就必须使用绝对路径,不然会报错,找不到文件,如下图:

pytorch 分布式调试debug torch.distributed.launch_第3张图片

你可能感兴趣的:(Pytorch基础,pytorch,python,分布式调试,服务器,单机多卡调试)