2 minute read

Multi-GPU

데이터가 점점 많아지고 있으며 GPU하나로는 점점 훈련에 힘이 부치고 있다.!
여러개의 GPU를 사용하여 성능을 높히고 문제를 해결하자.
하지만 어떻게 여러개의 GPU를 다룰 수 있을까?

개념 정리

  • Single vs. Multi - 단순히 하나와 여러개의 개념이다.
  • GPU vs. Node - GPU는 그래픽 카드를 의미하고, Node는 하나의 컴퓨터 개념으로 알고 있다.
  • Single Node Single GPU - 한 컴퓨터에 하나의 GPU를 사용한다.
  • Single Node Multi GPU - 하나의 컴퓨터에 여러개의 GPU를 사용한다.
  • Multi Node Multi GPU - 여러개의 컴퓨터에 여러개의 GPU를 사용한다.

Model parallel

  • 다중 GPU에 학습을 분산하는 두 가지 방법으로
    • 모델을 나누기 / 데이터를 나누기
  • 모델을 나누는 것은 생각보다 예전부터 썼음 (alexnet)
  • 모델의 병목, 파이프라인의 어려움

모델 병렬화는 고난이도 과제이다.

Data parallel

  • 데이터를 분배후 평균을 취하는 방법
  • minibatch 수식과 유사하지만 한번에 여러 GPU에서 수행
  • PyTorch에서는 아래 두 가지 방식을 제공 DataParallel, DistributedDataParallel
  • DataParallel – 단순히 데이터를 분배한후 평균을 취함 -> GPU 사용 불균형 문제 발생, Batch 사이즈 감소 (한 GPU가 병목), GIL
  • DistributedDataParallel – 각 CPU마다 process 생성하여 개별 GPU에 할당 -> 기본적으로 DataParallel로 하나 개별적으로 연산의 평균을 냄

Hyperparameter Tuning

  • 모델이 스스로 학습하지 않는 값은 사람이 지정 (learning rate, 모델의 크기, optimizer 등)
  • 하이퍼파라메터에 의해서 값이 크게 좌우 될 때도 있음 (요즘은 그닥?)
  • 마지막 0.01을 쥐어짜야 할 때 도전해볼만!(진짜 최후의 수단, 데이터가 훨씬 더 중요)
  • 기본적인 방법으로 grid 와 random 방법이 있는데, 최근은 베이지안 기반 기법들이 주도

Ray

  • multi-node multi processing 지원 모듈
  • ML/DL의 병렬 처리를 위해 개발된 모듈
  • 기본적으로 현재의 분산병렬 ML/DL 모듈의 표준
  • Hyperparameter Search를 위한 다양한 모듈 제공

Comments