GPU가 여러개 있으면 좋은 점

dev_ung·2023년 9월 30일

다중 GPU를 사용하는 이유

병렬 처리

  • 빠른 연산: 다중 GPU를 사용하면 병렬 처리 능력이 향상되어 모델 훈련과 추론(inference) 시간을 줄일 수 있습니다.
  • 메모리 제한 해결: 단일 GPU의 메모리 제한 때문에 학습할 수 없는 큰 모델을, 여러 GPU에 분산시켜 학습할 수 있습니다.
    

다중 학습

인공지능을 하다보면 여러 모델을 학습시켜야 할 일이 생기는데 GPU를 여러개 가지고 있다면, 한 모델 당 GPU 하나씩 사용하게 만들어 한번에 여러 모델을 학습시킬 수 있습니다.


Data Parallelism과 Model Parallelism

Data Parallelism 이해

Data Parallelism은 하나의 모델을 여러 GPU에 복제하고, 각 GPU는 전체 데이터 세트의 서로 다른 부분(subset)에 대해 연산을 수행하는 방식입니다. 이렇게 각 GPU에서 얻은 그래디언트는 중앙에서 집계(aggregate)되고, 모델의 가중치는 업데이트됩니다.

  • 장점: 이 방식은 구현이 간단하고 스케일링이 잘 됩니다.
  • 단점: 모든 GPU는 동일한 모델을 저장해야 하므로 메모리 사용이 높을 수 있습니다.

Model Parallelism 이해

Model Parallelism은 하나의 모델을 여러 GPU에 분할하여, 각 GPU는 모델의 서로 다른 부분에 대해 연산을 수행합니다. 예를 들어, 하나의 신경망이 여러 층(layers)으로 구성되어 있다면, 이러한 각 층을 서로 다른 GPU에 할당할 수 있습니다.

  • 장점: 이 방식은 매우 큰 모델을 다룰 때 유용하며, 각 GPU의 메모리 사용량을 최소화할 수 있습니다.
  • 단점: 모델의 각 부분이 서로 다른 GPU에 있기 때문에, GPU 간에 데이터를 전송하는 오버헤드가 발생할 수 있습니다. 또한, 구현이 복잡할 수 있습니다.

두 방식의 차이점과 사용 사례

  • Data Parallelism은 주로 데이터 세트가 크지만 모델이 작거나 중간 크기일 때 사용됩니다. 이 방식은 구현이 간단하고, 데이터 세트를 쉽게 분할할 수 있기 때문에 많이 사용됩니다.
  • Model Parallelism은 주로 모델이 매우 크고(예: GPT-3, BERT 등) 단일 GPU로는 로드할 수 없을 때 사용됩니다. 이 방식은 모델을 여러 부분으로 나누어야 하므로 구현이 복잡할 수 있습니다.

Data Parallelism, TensorFlow 코드

MirroredStrategy

strategy = tf.distribute.MirroredStrategy()
  • 개요: MirroredStrategy는 데이터 병렬처리(Data Parallelism)를 사용하는 가장 일반적인 분산 전략입니다.
  • 동작 방식: 모든 변수와 모델 그래프는 여러 개의 처리기(주로 GPU)에 복사됩니다. 각 처리기는 전체 데이터셋의 서브셋에 대해 연산을 수행하고, 각 처리기에서 계산한 그래디언트는 모든 처리기에 걸쳐 평균화됩니다.
  • 주로 사용되는 경우: 단일 머신에서 여러 GPU를 가지고 있을 때.

CentralStorageStrategy

strategy = tf.distribute.CentralStorageStrategy()
  • 개요: 이 전략은 변수를 CPU에서 관리하고, 계산은 여러 GPU에서 수행합니다.
  • 동작 방식: 모든 모델 변수는 중앙 저장소(일반적으로 CPU)에 저장되며, 각 GPU는 전체 데이터셋의 서브셋에 대해 연산을 수행합니다. 그 후 모든 GPU에서 그래디언트가 계산되고, 중앙 저장소의 변수가 업데이트됩니다.
  • 주로 사용되는 경우: 단일 머신에서 여러 GPU와 충분한 CPU 메모리를 가지고 있을 때.

MultiWorkerMirroredStrategy

strategy = tf.distribute.MultiWorkerMirroredStrategy()
  • 개요: 이 전략은 MirroredStrategy를 확장하여 여러 PC에 있는 여러 GPU에서도 사용할 수 있게 만들었습니다.
  • 동작 방식: 이 전략은 각 PC에서 로컬로 MirroredStrategy를 실행합니다. 그 후, 여러 PC에 분산된 그래디언트를 집계하기 위해 통신합니다.
  • 주로 사용되는 경우: 여러 PC에 분산된 다중 GPU 환경에서 사용됩니다.

0개의 댓글