[Pytorch] 분산학습(V1) 비교 실험 - DDP, DP

Han Sung Kang·2022년 11월 25일
0

Pytorch

목록 보기
1/3

Environment setting


CUDA 11.1
Pytorch : 1.8.1 CU11.1
GPU : A10
OS : Linux 18.04
Model : AlexNet, ResNet20
Data : CIFAR10
Training Method : DP(DataParallel), DDP(DataDistributedParallel)
1 epoch time : 5 epoch time avg

DP(DataParallel)


ModelBatch# GPU1 epoch time# GPU1 epoch time
AlexNet256415.90s819.45s
512-13.90s-15.07s
1024-12.50s-13.57s
2048-12.05s-12.20s
4096-11.60s-11.60s
8192-11.52s-11.20s
ResNet2e0256-16.56s-20.25s
512-13.67s-16.55s
1024-12.16s-12.66s
2048-11.88s-11.70s
4096-11.87s-11.14s
8192-11.90s-11.05s

DDP(DataDistributedParallel)


ModelBatch# GPU1 epoch time# GPU1 epoch time
AlexNet25644.65s84.92s
512-3.42s3.12s
1024-2.50s2.51s
2048-2.10sout of shared mm
4096-out of shared mmout of shared mm
8192-out of shared mmout of shared mm
ResNet20256-3.95s-4.42s
512-2.45s-2.66s
1024-2.25s-1.81s
2048-2.50s-out of shared mm
4096-out of shared mm-out of shared mm
8192-out of shared mm-out of shared mm

결론 및 비평


이 때, GPU의 개수를 늘려서 빠르게 가능한지, 어떠한 기법을 적용했을 때 보다 모델 학습이 빨라질지 척도로 참고했으면 하는 바람으로 포스트를 하게 되었다.

가장 간단한 모델이면서 파라미터의 개수와 연산량이 Fullcy connected layer에 몰려있으며, 별다른 matrix 연산이 없는 AlexNet과 BatchNorm과 Residual connection, Convolution 연산이 주를 이루는 ResNet(20)을 사용하였으며, 데이터는 CIFAR10을 사용하였다.

DP와 DDP를 모두 구현해서 돌려보았을 때, DDP가 DP 보다 학습 시간 측면에서 상당히 빠르다는 점이다. GPU를 많이 사용하였을 때, 얻는 장점과 모델의 특징을 생각하여 GPU개수와 batch크기를 잘 고려해서 사용해야 한다는 것이 이번 실험의 중요 내용이다.

실험하는 중 계속 GPU util을 계속 체크해본 결과 DDP가 DP보다 압도적으로 성능을 끌어내었다.
간혹 GPU util은 batch 크기를 키우면 높아진다고 생각하는 사람이 있는데, 절대 그렇지 않다는 것을 알아두면 좋겠다. 어느 연산에 대해서 Bottleneck이 있는지 확인 후 해결해야 하는 문제이다.

DP는 구현하기 매우 쉬우나 학습 시간 측면에서는 DDP보다 한참 오래 걸린다. DDP도 구현하는데 오래 걸리지는 않으니 DDP를 사용하는 것을 권장한다.

해당 글은 실험에 관한 글로 추후 분산학습 지식에 관한 글을 포스트 할 예정이다.

profile
딥러닝을 딥하게 삽질하는 저장소

0개의 댓글