[pytorch] DataParallel and DistributedDataParallel (작성중)

ma-kjh·2023년 9월 12일
0

Pytorch

목록 보기
9/20

DataPrallel

말 그대로 Data를 병렬적으로 처리하기 위한 module level에서의 multi gpu 사용 방법이다.

진짜 간단한데 다음과 같은 코드 한줄로 병렬화를 할 수 있다.

devices = list(range(torch.cuda.device_count()))
model = nn.DataParallel(model, device_ids=devices)

DDP에 비하면 정말 간단하다 !

근데 귀찮게 Data를 나누는 이유가 뭘까 ?

  1. Out-of-Memory issue로 코드가 안돌아간다 (DDP)
  2. 좀 더 빠르게 학습을 수행하고 싶다 (DP, DDP)

크게 이렇게 두 이유로 DP 혹은 DDP를 사용한다.

Inference 시 주의할 점 !

모델을 저장할 때, nn.DataParallel()로 저장하면 모델의 파라미터가 module.{parameter name}으로 저장이 된다. 그래서 그냥 일반적인 모델 부르는것 처럼 Inference 하지 말고, 꼭 Inference시에도 감싸주자.

DistributedDataParallel

  • DataParallelDistributedDataParallel의 차이가 무엇인가 ?
  • DataParallel은 단일 작업, 멀티쓰레드이며 단일 기기에서만 작동한다.
  • DistributedDaraParallel은 다중 작업, 단일 및 다중 기기 학습을 전부 지원하기 때문에 일반적으로 DataParallel보다 빠르게 작동한다.

모델이 너무 커서 GPU에 올리지 못하는 경우에 model parallel을 사용해야 하는데, DataParallel은 model parallel에서 실행되지 않음.

profile
거인의 어깨에 올라서서 더 넓은 세상을 바라보라 - 아이작 뉴턴

0개의 댓글