Pytorch Multi GPU

CYoon·2021년 8월 16일
0

토치에서 멀티 GPU 사용하기



1 용어 및 변수 정리
2 Code



용어 및 변수 정리.

1) DataLoader

  • num_workers : "데이터 load 할 때 프로세스 몇 개 쓸래?"
    num_workers = 4 * num_of_gpus 이거만 기억하면 됨. (ref)
# code 
import torch
num_workers = 4 * torch.cuda.device_count()
  • pin_memory : TRUE

2) init_process_group

torch.distributed.init_process_group(
            backend=,
            init_method=,
            world_size=,
            rank=)

process_group이 뭘 의미할까?

여기서 하나의 process는 하나의 GPU라고 할 수 있다. 그러면 하나의 group은 distributed training에 사용되는 모든 프로세스들을 포함하는 개념이다.
process_group은 group or world 로 표현되며, 학습에 사용되는 프로세스의 수를 world_size라고 한다. 즉, 학습에 사용하는 GPUs 개수world_size가 된다.
각 GPU는 서로 통신할 수 있고, 따라서 그룹 안의 각 프로세스에는 고유 id, rank가 존재한다.

  • backend : 집합연산에 CUDA Tensor만 사용하는 경우 'nccl' 백엔드가 성능이 가장 좋다.
  • init_method : IP 주소:Port
  • world_size : The number of process in the group.
  • rank : A unique id for each process in the group.

참조: 각 용어 정리, 함수 설명

3) Environment Variable (환경 변수)

다음과 같이 환경 변수들을 설정해주는 것을 볼 수 있다.

    os.environ["MASTER_ADDR"] = "127.0.0.1"
    os.environ["MASTER_PORT"] = args.port

분산 학습을 위한 환경 변수를 설정하는 것으로 보통 아래와 같은 변수를 초기화한다.

os.environ["MASTER_ADDR"] =   0-순위의 프로세스를 호스트할 기기의 IP 주소
os.environ["MASTER_PORT"] =   0-순위의 프로세스를 호스트할 기기의 비어있는 포트 번호(free port)
os.environ["WORLD_SIZE"] =     전체 프로세스 수
os.environ["RANK"] =                각 프로세스의 우선순위



참조

profile
Hi, I'm deep learning researhcer

0개의 댓글