728x90
1. 기술의 발전
이전의 고민이 어떻게 하면 GPU를 덜 쓰고도 좋은 결과를 낼 수 있을까였다면, 엔비디아 GPU로 인해 현재는 많은 GPU와 많은 데이터로 학습이 가능하므로 많은 GPU를 어떤 방식으로 돌릴까하는 고민이 생김
2. Multi-GPU 개념
- 2개 이상의 GPU를 사용하는 것을 이름
- Single vs. Multi
- GPU vs. Node(system-컴퓨터1대)
- Single GPU vs. Single Node
- Multi GPU vs. Single Node
- Multi GPU vs. Multi Node
3. 모델 병렬화(Model Parallel)
- model parallel vs. data parallel
- 모델 나누기 / 데이터 나누기
- 모델 나누는 것은 예전부터 사용됐음(모델 병렬화 예시 : Alexnet)
- 그러나 모델의 병목, 파이프라인의 어려움으로 인해 모델 병렬화는 고난도 과제였음
- 모델 병렬화로 얼마나 효율을 달성할 수 있는지에 대한 연구가 하나의 분야가 되어가고 있음
4. 데이터 병렬화(Data Parallel)
- 데이터를 나눠 GPU에 할당 후 결과의 평균 취함
- 미니배치 수식과 유사한데 한 번에 여러 GPU에서 수행
- 파이토치에서는 2가지 방식 제공 : DataParallel, DistributedDataParallel
- DataParallel : 단순히 데이터를 분배 후 평균 취함 -> GPU 사용 불균형 문제 발생(코디네이터가 더 많이 사용하게 됨), Batch 사이즈 감소(한 GPU가 병목), GIL
- DistributedDataParallel : 각 GPU마다 프로세스 생성, 개별 GPU에 할당 -> 기본적으로 DataParallel로 하지만, 연산의 평균을 개별적으로 구함
* DataParallel
paralle_model = torch.nn.DataParallel(model) # Encapsulate the model
predictions = parallel_model(input) # Forward pass on multi-GPUs
loss = loss_function(predictions, labels) # Compute loss function
loss.mean().backward() # Average GPU-losses + backward pass
optimizer.step() # Optimizer step
predictions = parallel_model(inputs) # Forward pass with new parameters
* DistributedDataParellel
이와 관련된 코드와 설명은 아래 링크에 상세하게 기재되어 있어 따로 정리하지 않았다.
https://blog.si-analytics.ai/12
Multi GPU with Pytorch (DistributedDataParallel)
1. Introduction 많은 연구자 및 개발자들이 관심을 갖는 주제 중 하나는 Deep Learning 모델을 빠르게 학습시키는 방법입니다. 일반적으로 Deep Learning 모델을 빠르게 학습시키는 방법에는 여러가지가 있
blog.si-analytics.ai
728x90
'AI > AITech 3기' 카테고리의 다른 글
[PyTorch] 10강 PyTorch Troubleshooting (2) | 2022.01.28 |
---|---|
[PyTorch] 9강 Hyperparameter Tuning (2) | 2022.01.27 |
[PyTorch] 7강 Monitoring tools for PyTorch (2) | 2022.01.27 |
[PyTorch] 6강 모델 불러오기 (2) | 2022.01.27 |
[PyTorch] super().__init__() 과 super(MyClass, self).__init__() 차이 (2) | 2022.01.25 |