딥러닝 모델들의 크기가 기하급수적으로 증가하면서 더 이상 하나의 머신으로는 활용 가능한 수준의 학습 시간을 달성하기가 어려워지고 있습니다. 잘 알려진 대화 모델인 GPT-2는 약 1.5B개의 파라미터를 가지고 있으며 학습을 위해 8백만개의 웹페이지를 사용했다고 합니다. GPT-3는 GPT-2에 비해 100배 이상인 175B개의 파라미터를 가지고 있으며 이 정도 수준의 모델을 학습하려면 대규모의 GPU 클러스터를 구축해야 합니다.
최근 버전의 Tensorflow나 PyTorch와 같이 잘 알려진 학습 프레임워크에는 여러 대의 GPU 머신을 활용해서 학습을 수행하는 분산 학습 기능이 포함되어 있습니다. 다만 설정이 복잡하고 정상적으로 효율성을 얻기 위해서는 네트워크 설정, 권한 관리, 데이터 공유 등 많은 부분에서 난이도가 높은 작업들을 해야만 합니다. 이 때문에, 효율적인 분산 학습을 목적으로 한 여러 프레임워크가 등장하고 있습니다.
Horovod는 Keras, Tensorflow, PyTorch, MxNet을 모두 지원하는 잘 알려진 분산 학습 프레임워크입니다:
Horovod를 사용한 실험에 따르면 Inception V3나 ResNet-101의 경우 싱글 노드 대비 90%의 분산 학습 효율을 얻을 수 있으며 VGG-16의 경우에는 68%의 분산 학습 효율을 얻을 수 있었다고 합니다. 즉, 예를 들어 4대의 노드를 사용한다면 Inception V3의 경우 3.6배, VGG-16의 경우 1.8배의 학습 효율을 얻을 수 있습니다.
RaySGD는 PyTorch의 분산 학습 기능 위에 구현된 프레임워크로서, 설정 상의 편의성을 대폭 향상시킬 수 있도록 설계되어 있습니다. PyTorch에만 한정된다는 약점은 있지만, Horovod에 비해 분산 학습 효율이 소폭 개선되었으며 이는 기존 PyTorch에 내장된 분산 학습 기능에 비해 약 20% 이상 향상된 수치라고 합니다. 특히 Horovod의 경우 MPI나 NCCL과 같은 외부 라이브러리의 설정이 다소 복잡하며 환경에 따라 직접 빌드를 해서 사용해야 하는데 비해 RaySGD는 간편한 설치와 설정만으로 확장 가능한 학습 코드를 만들 수 있는 장점이 있습니다:
Horovod와 RaySGD 모두 자유롭게 사용할 수 있는 오픈소스이며 활발하게 개선이 이루어지고 있는 프로젝트입니다. 물론 AWS와 같이 기 구축된 GPU 클러스터를 사용하는 것도 한 가지 방법이지만, 자체적으로 GPU farm을 구축하려는 목적이라면 이러한 프레임워크를 도입하여 사용하는 것도 좋은 출발점이 될 수 있을 거라고 봅니다.