[PyTorch] Muli-GPU학습

hj choi·2022년 9월 29일
0

AI

목록 보기
14/27

Multi-GPU 학습

개념정리

  • Single vs Multi : 1 vs 2 이상
  • GPU vs Node(system) : Node는 한대의 컴퓨터를 뜻함.
  • Single Node Single GPU : 1대의 컴퓨터에서 1대의 GPU를 사용함
  • Single Node Multi GPU
  • Multi Node Nulit GPU

Model parallel

  • 다중 GPU에 학습을 분산하는 두 가지 방법 : 모델을 나누기/ 데이터를 나누기

  • 모델을 나누는 것은 예전부터 썼음(AlexNet)

  • 모델의 병목, 파이프라인의 어려움 등으로 인해 모델 병렬화는 고난이도 과제

  • 파이프라인 구축, 배치처리를 잘 해줘야되는것이 모델 병렬화의 숙제이다.

Data parallel

  • 데이터를 나눠 GPU에 할당후 결과의 평균을 취하는 방법
  • minibatch 수식과 유사한데 한번에 여러 GPU에서 수행

  • forward
  1. GPU가 다른 GPU들에 모델을 각각 복사해 넣어준다.
  2. 각각의 GPU가 연산을 시작
  3. 하나의 GPU에 각각의 GPU가 연산한 내용을 모아준다.
  • backward
  1. 각각의 loss를 받아서 GPU하나가 각각의 gradient를 구한다.
  2. 그 각각의 gradient를 각각의 GPU에 뿌려준다.
  3. 최종의 gradient를 하나의 GPU에 모아주고
  4. 그 gradient의 평균을 내서 gradient를 업데이트한다.
  • Pytorch에서는 두 가지 방식을 제공 : DataParallel, DistributedDataParallel

  • DataParallel : 단순히 데이터를 분배한 후 평균을 취함 -> GPU사용 불균형 문제 발생, Batch 사이즈 감소(한 GPU가 병목), GIL(Global Interpreter Lock)

  • DistributedDataParallel : 각 CPU마다 process 생성하여 개별 GPU에 할당 -> 기본적으로 DataParallel로 하나 개별적으로 연산의 평균을 냄

DistributedDataParallel

  • shuffle = False 여야함.

0개의 댓글