토치에서 멀티 GPU 사용하기
1 용어 및 변수 정리
2 Code
num_workers = 4 * num_of_gpus
이거만 기억하면 됨. (ref)# code
import torch
num_workers = 4 * torch.cuda.device_count()
torch.distributed.init_process_group(
backend=,
init_method=,
world_size=,
rank=)
여기서 하나의 process
는 하나의 GPU
라고 할 수 있다. 그러면 하나의 group
은 distributed training에 사용되는 모든 프로세스들을 포함하는 개념이다.
process_group은 group
or world
로 표현되며, 학습에 사용되는 프로세스의 수를 world_size
라고 한다. 즉, 학습에 사용하는 GPUs 개수
가 world_size
가 된다.
각 GPU는 서로 통신할 수 있고, 따라서 그룹 안의 각 프로세스에는 고유 id, rank
가 존재한다.
'nccl'
백엔드가 성능이 가장 좋다. IP 주소:Port
다음과 같이 환경 변수들을 설정해주는 것을 볼 수 있다.
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"] =
각 프로세스의 우선순위
참조