Deep Learning

딥러닝 모델 멀티GPU 분산학습하는 법

makeitworth 2023. 6. 15. 10:33

 

모델 학습을 위한 train.py를 분산학습 시키는 스크립트 코드

 

#!/usr/bin/env bash

set -x


GPUS=$1
NNODES=${NNODES:-1}
NODE_RANK=${NODE_RANK:-0}
PORT=${PORT:-29500}
MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"}

PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
python -m torch.distributed.run \
--nnodes=$NNODES --node_rank=$NODE_RANK \
--master_addr=$MASTER_ADDR --nproc_per_node=$GPUS \
--master_port=$PORT \
$(dirname "$0")/train.py \
${@:2}

 

위 스크립트 명령어를 하나 하나 주석을 달면 다음과 같다.

#!/usr/bin/env bash # 이 줄은 스크립트가 bash 인터프리터로 실행되도록 지정합니다.
set -x # 이 줄은 스크립트의 모든 명령어를 실행하기 전에 출력하도록 설정합니다.

GPUS=$1 # 이 줄은 첫 번째 인자를 GPUS라는 변수에 할당합니다.
NNODES=${NNODES:-1} # 이 줄은 NNODES라는 변수가 정의되지 않았다면 1로 설정하고, 그렇지 않다면 그대로 둡니다.
NODE_RANK=${NODE_RANK:-0} # 이 줄은 NODE_RANK라는 변수가 정의되지 않았다면 0으로 설정하고, 그렇지 않다면 그대로 둡니다.
PORT=${PORT:-29500} # 이 줄은 PORT라는 변수가 정의되지 않았다면 29500으로 설정하고, 그렇지 않다면 그대로 둡니다.
MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"} # 이 줄은 MASTER_ADDR이라는 변수가 정의되지 않았다면 "127.0.0.1"로 설정하고, 그렇지 않다면 그대로 둡니다.

PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ # 이 줄은 현재 스크립트 파일의 상위 디렉토리를 PYTHONPATH에 추가합니다.
python -m torch.distributed.run \ # 이 줄은 파이썬 모듈 torch.distributed.run을 실행합니다.
--nnodes=$NNODES --node_rank=$NODE_RANK \ # 이 줄은 분산 학습을 위한 노드 수와 랭크를 인자로 전달합니다.
--master_addr=$MASTER_ADDR --nproc_per_node=$GPUS \ # 이 줄은 마스터 주소와 노드 당 프로세스 수를 인자로 전달합니다.
--master_port=$PORT \ # 이 줄은 마스터 포트를 인자로 전달합니다.
$(dirname "$0")/train.py \ # 이 줄은 현재 스크립트 파일과 같은 디렉토리에 있는 train.py 파일을 실행합니다.
${@:2} # 이 줄은 두 번째 인자부터 모든 인자를 train.py에 전달합니다.

 

요렇게 파일을 만들어놓고 train.py 학습 파일 별 요구하는 인자들을 끝에 몰아 넣어 쓰면 된다. 

 

 

RTX3600 구닥다리 열일중...

 

 

참고:

https://github.com/yjh0410/YOWOv2/issues/8

https://mmaction2.readthedocs.io/en/latest/user_guides/train_test.html