【VScode】——调试pytorch分布式训练脚本torch.distributed.launch

转载自:https://blog.csdn.net/qianbin3200896/article/details/108182504
尊重原创,请看原文

解决方案

在VS Code中想要调试Python脚本很简单,只需要创建一个launch.json文件即可。如果没有launch.json文件,只需要单机下图中“python:当前文件”旁的齿轮按钮即可创建一个launch.json文件。
【VScode】——调试pytorch分布式训练脚本torch.distributed.launch_第1张图片
下面是最关键的地方,用于为debug设置配置参数,具体如下:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [ 
        {
            "name": "Python: 当前文件",
            "type": "python",
            "request": "launch",
            "program": "/home/dl/anaconda3/lib/python3.7/site-packages/torch/distributed/launch.py",//可执行文件路径
            "console": "integratedTerminal",
            "args": [
                "--nproc_per_node=1",
                "tools/train.py",
                "--model",
                "bisenetv1",
            ],
            "env": {"CUDA_VISIBLE_DEVICES":"0"},
        }
    ]
}

其中,program参数用于设置使用torch分布式包中的launch.py文件来作为启动脚本,具体路径请参照具体的torch安装路径来修改。args用于设置每个参数。env用于设置环境变量。具体debug时,建议只用1个GPU来进行调试,所以nproc_per_node设置为1,CUDA_VISIBLE_DEVICES设置为0。

到这里如果直接按F5调式运行,可以勉强运行起来,如下所示:
在这里插入图片描述
也就是在循环取数据的时候卡死在这一步了。然后在google继续查原因,终于发现问题了,在设置dataloader的时候,一般都会这么写:

dl = DataLoader(
            ds,
            batch_size=batchsize,
            shuffle=shuffle,
            drop_last=drop_last,
            num_workers=4,
            pin_memory=True,
        )
    return dl

这里注意,有一个num_workers参数,如果是命令行运行,这样设置没有任何问题,但是在VS Code调试模式下这样设置就有问题了,google有人给出的解释是说“我们想通过这个参数来启动多个进程来加载数据,但是VS Code调试模型并不能成功的开启新进程”,到这里问题就变得显然了。只需要将num_workers设置为0即可。如下所示:

dl = DataLoader(
            ds,
            batch_size=batchsize,
            shuffle=shuffle,
            drop_last=drop_last,
            num_workers=0,
            pin_memory=True,
        )

你可能感兴趣的:(Ubuntu,vscode,pytorch,distributed)