데이터가 많아져서 GPU가 많이 필요하게 되었다.
GPU
- single : 1개의 GPU
multi : 2개 이상의 GPU - GPU
node(=system) : 1대의 컴퓨터
TensorRT와 같은 GPU 사용을 돕는 도구도 있다
멀티 GPU를 사용하는 두 가지 방법이 있다
- Model Parallel : 모델 병렬화
성능을 올리는 하나의 분야로 자리잡고 있다
밑의 사진처럼 되도록 파이프라인을 짜야 한다 - Data Parallel : 데이터 병렬화
2개로 나눈다면 각각 batch로 반으로 데이터를 나눈 후 나중에 각 GPU에서의 loss를 미분,평균을 구해서 전체 미분값을 구한다.
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 를 해서 적어준다
하지만 병렬화는 모델의 병목, 파이프라인 등의 어려움이 있다
'부스트캠프 AI Tech 3기 > 이론 : U-stage' 카테고리의 다른 글
[Day10] Pytorch 10. Troubleshooting (0) | 2022.01.28 |
---|---|
[Day10] Pytorch 9. Hyperparameter Tuning (0) | 2022.01.28 |
[Day8] Pytorch 7. Monitoring tools for PyTorch (0) | 2022.01.27 |
[Day8] Pytorch 6. 모델 불러오기 : model.save(), load, checkpoint, freeze, transfer learning (0) | 2022.01.27 |
[Day7] Pytorch 5. Pytorch Dataset : dataset, transforms, DataLoader (0) | 2022.01.26 |