[pytorch] DataParallel and DistributedDataParallel (작성중)

-·2023년 9월 12일
0

Pytorch

목록 보기
9/26

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개의 댓글