voldemortX / pytorch-auto-drive

PytorchAutoDrive: Segmentation models (ERFNet, ENet, DeepLab, FCN...) and Lane detection models (SCNN, RESA, LSTR, LaneATT, BézierLaneNet...) based on PyTorch with fast training, visualization, benchmarking & deployment help
BSD 3-Clause "New" or "Revised" License
854 stars 138 forks source link

bezierlanenet分布式训练问题 #145

Closed Hzy98 closed 1 year ago

Hzy98 commented 1 year ago

bezierlanenet支持分布式训练吗?我用如下命令:CUDA_VISIBLE_DEVICES=1,2 python -m torch.distributed.launch --nproc_per_node=2 --use_env main_landet.py --train --config=configs/lane_detection/bezierlanenet/resnet18_culane_aug1b.py --mixed-precision 进行分布式训练的时候,发现它都跑在了一张卡上。 image 而且好像没有使用分布式模式 image

voldemortX commented 1 year ago

@Hzy98 是支持ddp的。你是本地机器ddp吗,只有一张卡的显存被占用?

Hzy98 commented 1 year ago

不是,在linux服务器上,只有一张卡显存被占用,但是是两个进程,像是本应该分布在两张卡的跑在一张上了。而且日志信息显示好像没有使用分布式模式。是命令有误吗?

voldemortX commented 1 year ago

@Hzy98 不是集群吧?按理说不应该的,你要不去试一些普通的ddp代码,能不能跑起来

Hzy98 commented 1 year ago

@Hzy98 不是集群吧?按理说不应该的,你要不去试一些普通的ddp代码,能不能跑起来

不是集群,之前用torch.distributed.launch跑其他ddp代码是可以的,是命令错了吗? CUDA_VISIBLE_DEVICES=1,2 python -m torch.distributed.launch --nproc_per_node=2 --use_env main_landet.py --train --config=configs/lane_detection/bezierlanenet/resnet18_culane_aug1b.py --mixed-precision 这个命令,在你的环境上能正常运行吗?

voldemortX commented 1 year ago

@Hzy98 我现在没有自己的ddp调试环境了,但readme里面记录的命令肯定是当初能跑起来的

voldemortX commented 1 year ago

你是两个进程跑到一张卡(除了没用到计算资源别的没问题),还是起了两个重复的任务

GPT是这样说的:

根据您提供的命令,CUDA_VISIBLE_DEVICES=1,2 的设置让两个进程分别使用 GPU 1 和 GPU 2。但是您遇到了两个进程都运行在同一张 GPU 卡上的问题。这可能是由于某些原因导致的环境错误。

要解决此问题,请尝试以下解决方案:

  1. 确保您的代码中没有覆盖 CUDA_VISIBLE_DEVICES 变量。

    检查您的 Python 脚本(例如 main.py)以确保它不修改或覆盖 CUDA_VISIBLE_DEVICES 变量。

  2. 尝试将 CUDA_VISIBLE_DEVICES 设置为字符串而非整数。

    在终端输入以下命令:

    CUDA_VISIBLE_DEVICES="1,2" python -m torch.distributed.launch --nproc_per_node=2 --use_env main.py --xxx
  3. 使用 --nnodes--node_rank 参数来指定节点数量和当前节点的顺序。

    在终端输入以下命令:

    CUDA_VISIBLE_DEVICES=1,2 python -m torch.distributed.launch --nproc_per_node=2 --nnodes=1 --node_rank=0 --use_env main.py --xxx
  4. 如果以上方法都不能解决问题,可以尝试更新 PyTorch 版本并确保安装了适当的 GPU 支持。 更新 PyTorch 后,重新运行命令。

如果问题仍然存在,请阐述详细情况,以便为您提供更有针对性的解决方案。

你先试试,不行再说

Hzy98 commented 1 year ago

你是两个进程跑到一张卡(除了没用到计算资源别的没问题),还是起了两个重复的任务

GPT是这样说的:

根据您提供的命令,CUDA_VISIBLE_DEVICES=1,2 的设置让两个进程分别使用 GPU 1 和 GPU 2。但是您遇到了两个进程都运行在同一张 GPU 卡上的问题。这可能是由于某些原因导致的环境错误。

要解决此问题,请尝试以下解决方案:

  1. 确保您的代码中没有覆盖 CUDA_VISIBLE_DEVICES 变量。 检查您的 Python 脚本(例如 main.py)以确保它不修改或覆盖 CUDA_VISIBLE_DEVICES 变量。
  2. 尝试将 CUDA_VISIBLE_DEVICES 设置为字符串而非整数。 在终端输入以下命令:
    CUDA_VISIBLE_DEVICES="1,2" python -m torch.distributed.launch --nproc_per_node=2 --use_env main.py --xxx
  3. 使用 --nnodes--node_rank 参数来指定节点数量和当前节点的顺序。 在终端输入以下命令:
    CUDA_VISIBLE_DEVICES=1,2 python -m torch.distributed.launch --nproc_per_node=2 --nnodes=1 --node_rank=0 --use_env main.py --xxx
  4. 如果以上方法都不能解决问题,可以尝试更新 PyTorch 版本并确保安装了适当的 GPU 支持。 更新 PyTorch 后,重新运行命令。

如果问题仍然存在,请阐述详细情况,以便为您提供更有针对性的解决方案。

你先试试,不行再说

我把wordsize print出来看了下,发现是0,然后把config文件中的world_size修改为2,就可以正常分在两张卡上了。

voldemortX commented 1 year ago

哦哦,你没改config,我感觉得更新一下文档,突出一下这个事

Hzy98 commented 1 year ago

哦哦,你没改config,我感觉得更新一下文档,突出一下这个事

嗯嗯 是的 改了config应该就能正常跑了。