Model Parallel : 모델 병렬화 성능을 올리는 하나의 분야로 자리잡고 있다 그림 1
밑의 사진처럼 되도록 파이프라인을 짜야 한다
Data Parallel : 데이터 병렬화 2개로 나눈다면 각각 batch로 반으로 데이터를 나눈 후 나중에 각 GPU에서의 loss를 미분,평균을 구해서 전체 미분값을 구한다. 그림 2 minibatch를 병렬적으로 돌리는 것과 유사 4번에서 다시 한 GPU에 output을 모으고 다시 분배하는데, 그 역할을 하는 GPU가 생길 수 밖에 없다. 그래서 GPU 사용 불균형 문제가 생기고 batch 사이즈가 감소할 수 있다(Global interpreter rock)
forward의 4번처럼 모으지 않고 backward의 4번처럼 한 번의 학습이 끝날 때만 gradient 값을 모아서 평균을 내는 것이 distributed DataParallel 이다
parallel_model=torch.nn.DataParallel(model)
# Distributed Data Parallel은 sampler로 구현할 수 있다
train_sampler= torch.utils.data.distributed.DistributedSampler(train_data)
train_loader=torch.utils.data.DataLoader(train_data,shuffle=Flase, pin_memory=True, num_workers=3 ,,..다른속성들 , sampler=train_sampler)
# num_workers는 보통 GPU 수 *4 를 해서 적어준다