다중 GPU에 학습을 분산하는 두 가지 방법 : 모델을 나누기/ 데이터를 나누기
모델을 나누는 것은 예전부터 썼음(AlexNet)
모델의 병목, 파이프라인의 어려움 등으로 인해 모델 병렬화는 고난이도 과제
파이프라인 구축, 배치처리를 잘 해줘야되는것이 모델 병렬화의 숙제이다.
Pytorch에서는 두 가지 방식을 제공 : DataParallel, DistributedDataParallel
DataParallel : 단순히 데이터를 분배한 후 평균을 취함 -> GPU사용 불균형 문제 발생, Batch 사이즈 감소(한 GPU가 병목), GIL(Global Interpreter Lock)
DistributedDataParallel : 각 CPU마다 process 생성하여 개별 GPU에 할당 -> 기본적으로 DataParallel로 하나 개별적으로 연산의 평균을 냄