Programming Error/PyTorch

[MMDetection 에러] RuntimeError: Address already in use

Barca 2021. 12. 16. 20:24
RuntimeError: Address already in use
Traceback (most recent call last):
  File "/root/miniconda3/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/root/miniconda3/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/root/miniconda3/lib/python3.7/site-packages/torch/distributed/launch.py", line 235, in <module>
    main()
  File "/root/miniconda3/lib/python3.7/site-packages/torch/distributed/launch.py", line 231, in main
    cmd=process.args)
subprocess.CalledProcessError: Command '['/root/miniconda3/bin/python', '-u', './tools/train.py', '--local_rank=0', 'configs/wider/retinanet_r50_fpn_1x.py', '--launcher', 'pytorch']' returned non-zero exit status 1.

 

MMDetection을 사용하는 도중에 위와 같은 오류를 만났습니다. 처음에는 가장 밑부분에 있는 아래와 같은 오류를 봤었는데요.

subprocess.CalledProcessError: Command '['/root/miniconda3/bin/python', '-u', './tools/train.py', '--local_rank=0', 'configs/wider/retinanet_r50_fpn_1x.py', '--launcher', 'pytorch']' returned non-zero exit status 1.

가장 위에 RuntimeError: Address already in use라는 에러 메시지를 보면 "이미 주소를 사용하고 있다"라고 합니다. 

보통 MMDetection을 Train할 때, MMDetection 폴더 경로에서 아래처럼 shell 파일을 실행시켜서 학습을 합니다.

bash tools/dist_train.sh configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py 1(=number_of_gpu)

저는 위의 코드로 하나의 모델을 학습하고 있었고, 추가로 하나의 프로세스를 더 실행하려고 할 때 "Address already in use"라는 오류를 만났습니다.

dist_train.sh 파일을 살펴보면 아래와 같은 코드로 이루어져 있는데요.

#!/usr/bin/env bash

CONFIG=$1
GPUS=$2
PORT=${PORT:-29500}

PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \
    $(dirname "$0")/train.py $CONFIG --launcher pytorch ${@:3}

여기서 PORT 번호를 입력하게 되는데, 이 번호가 이미 첫 프로세스로 사용되고 있어서 발생하는 오류였습니다. 따라서, 해당 -29500을 다른 번호로 바꾸어주면 문제없이 해결되었습니다.