(대규모 데이터와 모델을 위한 분산 머신러닝 시스템의 필요성)
단일 서버나 개인용 노트북으로 대량의 데이터를 사용해 큰 머신러닝 모델을 학습시키는 것은 어렵다. 여러 대의 서버 위에서 실행되면서 전 세계 사람들이 사용할 수 있는 프로그램을 만들어야 한다. 이러한 이유로 더 많은 연산을 처리하고자 하는 수요와 더 높은 효율성, 안정성 및 확장성이 요구되면서 수백 수천 대의 컴퓨터로 구성된 대규모의 데이터 센터도 만들어졌다.
데이터 센터로 구성된 여러 대의 컴퓨터는 공유 네트워크로 통신하면서 분산 시스템의 발전으로 이어졌다.
분산 시스템이란 구성 요소들이 서로 다른 컴퓨터에 위치해 있으면서 메시지 전달을 통해 작업을 조정하거나 협업하는 시스템을 말한다.
분산 시스템은 일반적인 작업 뿐만 아니라 머신러닝 애플리케이션에도 유용하다. 여러 대의 서버로 구성된 분산 시스템에서 대규모 데이터셋을 처리하고 거대한 머신러닝 모델을 서로 다른 파티션으로 나누어 저장하는 등의 작업을 상상해보자. 분산 시스템은 안정성과 확장성을 챙기면서도 머신러닝 애플리케이션을 크게 가속시킬 수 있다.
이번에는 분산 머신러닝 시스템이란 무엇인지와 이러한 시스템에서 자주 볼 수 있는 유사한 디자인 패턴 및 현실적인 시나리오를 살펴본다.
분산 머신러닝 시스템 distributed machine learning system 은 데이터 수집과 모델 학습, 서빙 등 머신러닝 애플리케이션의 각 단계를 수행하는 다양한 구성 요소와 파이프라인으로 이루어진 분산 시스템이다. 일반적인 분산 시스템을 구축하는 데 유용한 디자인 패턴과 최선의 방법을 차용하면서도 머신러닝에 특별히 유용한 패턴도 활용한다.
분산 머신러닝 시스템이 더 안정성 있고 확장에 용이한 시스템이 되기 위해서는 대용량 데이터셋이나 큰 규모의 모델, 높은 트래픽, 혹은 복잡한 모델 구조와 아키텍처 최적화 등 다양한 문제를 해결할 수 있도록 신중하게 설계되어야 한다.
머신러닝 시스템을 배포한 뒤 트래픽이 늘어나고 그에 따라 서비스의 규모도 커지는 상황에 대응하기 위해서는 분산 머신러닝 파이프라인과 구성 요소를 신중하게 디자인해야 한다. 머신러닝 모델을 더 빠르게 개발하고 배포하기 위해 자동화 도구나 하드웨어 가속 등 몇 가지 패턴이 사용되고 있다.
분산 머신러닝 시스템에도 분산 시스템과 유사한 디자인 패턴을 적용할 수 있다. 예를 들어 여러 워커가 서로 다른 데이터 파티션을 맡아 비동기로 모델 학습을 진행한다. 이는 이전에 봤던 워크-큐 패턴과 유사하다. 이러한 접근은 모델 학습 과정의 속도를 크게 높일 수 있다.
아래 그림은 분산 시스템의 작업 대상을 단순히 데이터 파티션으로 바꿈으로써 분산 머신러닝 시스템에 같은 패턴을 적용한 것을 나타낸다. 각 워커는 원본 데이터베이스에 저장된 데이터의 일부를 사용하여 머신러닝 모델을 학습시킨다.
분산 머신러닝 시스템에서 자주 볼 수 있는 또 다른 패턴은 파라미터 서버 패턴 parameter server pattern 이다. 아래 그림처럼 각 파라미터 서버는 모델의 특정 부분을 저장하고 업데이트하는 역할을 담당하며, 각 워커는 모델의 특정 부분을 업데이트하는 데 사용될 데이터 파티션을 담당한다.
이런 패턴은 모델이 너무 커서 단일 서버에 들어가지 못하는 경우 혹은 모델 파라미터를 저장하는 전용 서버를 사용함으로써 컴퓨팅 자원을 절약하고자 하는 경우 유용하게 쓰인다.
다음과 같은 상황이라면 분산 머신러닝 시스템 설계를 고려해야 한다. 예를 들어 단일 서버에 들어가지 않는 대용량의 데이터셋을 다루는 경우라면 데이터를 분할하거나 워커를 추가로 사용해서 모델 학습 속도를 높일 수 있다. 이 외에도 다음과 같은 경우에 사용할 수 있다.
● 수백만 개의 파라미터로 이루어진 모델이 너무 커서 단일 서버에 저장할 수 없어 여러 서버로 나누어 저장해야 하는 경우
● 머신러닝 애플리케이션이 단일 서버로 처리할 수 없는 대규모의 무거운 트래픽을 처리해야 하는경우
● 간단한 모델 구축뿐만 아니라 데이터 수집, 모델 서빙, 데이터와 모델의 버전 관리, 성능 모니터링 등 모델 라이프사이클 전반의 여러 단계를 구성해야 하는 경우
● 수십 개의 GPU 서버를 활용하는 등 많은 양의 컴퓨팅 리소스를 다루는 경우
분산 머신러닝 시스템은 다양한 상황에서 유용할 수 있지만, 일반적으로 설계하기가 어렵고 가장 좋은 결과를 얻기 위해서는 많은 경험이 필요하다. 이러한 복잡한 시스템을 개발하고 유지하기 위해서는 추가적인 공수가 들거나 관리가 필요하다.
다음 중 어느 하나라도 해당 된다면 분산 시스템을 고려하기보다는 이미 잘 작동하고 있는 간단한 방법을 사용하는 것이 좋다.
● 노트북에 저장할 수 있는 10GB 이하 정도의 작은 데이터셋을 다루는 경우
● 선형 회귀와 같은 간단하면서 무거운 계산이 필요하지 않은 모델을 사용하는 경우
● 제한된 컴퓨팅 자원을 사용하지만 현재 작업에는 충분한 경우
위 콘텐츠는 『대규모 머신러닝 시스템 디자인 패턴』에서 내용을 발췌하여 작성하였습니다.
최신 콘텐츠