머신러닝을 위한 하이브리드 클러스터 구축

VESSL AI
베슬에이아이 <VESSL AI>
12 min readJan 12, 2023

이번 글에서는 클라우드와 온프레미스 환경에서 머신러닝 모델을 학습할 때의 장단점를 얘기하고, 대규모 GPU 인프라를 VESSL과 연동하여 쉽게 머신러닝 플랫폼을 구축하는 방법을 설명합니다.

머신러닝 인프라 — 클라우드 vs. 온프레미스

모델 학습을 위한 머신러닝 플랫폼 구축은 머신러닝 기반 서비스 운용에 있어 가장 중요하지만 번거로운 과정 중 하나입니다. 최근 다양한 문제를 해결할 수 있는 고성능, 대규모 머신러닝 모델들이 빠르게 발전해왔으나, 이를 학습하기 위한 데이터와 인프라 규모 또한 빠르게 증가하고 있습니다. 학습의 규모가 서버 한 대로는 감당하기 어려워지면서 클라우드와 온프레미스(on-premise) 환경에서 여러 대의 학습용 하드웨어를 확보하여 머신러닝 시스템을 구축하는 사례 또한 많아지고 있습니다.

소규모 연구 조직과 스타트업의 경우 대체로 클라우드 기반 플랫폼을 구축하는 경우가 많습니다. 필요한 만큼의 자원만 할당받아 사용하면 되기 때문에 상대적으로 초기 비용이 낮고, 하드웨어에 대해 고민할 필요가 없으며, AWS SageMaker, GCP Vertex AI, Azure ML 등 각 클라우드 플랫폼에서 제공하는 AI 서비스와 쉽게 연동해서 사용할 수 있다는 장점이 있기 때문입니다.

하지만 조직이 커짐에 따라 클라우드 환경에서 모델을 학습할 때 발생하는 어려움 또한 증가합니다. 예로 데이터의 보안 문제를 꼽을 수 있습니다. 의료, 금융 등 데이터의 성격상 클라우드에서 데이터셋을 보관하는 것이 법적, 정책적, 기술적으로 어려운 경우가 있습니다.

지속적으로 대량의 연산 자원을 사용할 때 발생하는 비용 문제 또한 있습니다. 감가상각을 고려하더라도 클라우드 비용이 온프레미스 서버에 비해 60% 이상 비싼 것으로 나타났습니다. Spot Instance 등을 사용해 클라우드에서의 비용을 어느 정도 절감할 수도 있지만, 해당 기능을 적절하게 잘 활용하기 위해선 클라우드 플랫폼에 대한 이해도와 DevOps 숙련도가 필요하고, 학습 코드의 수정을 비롯한 다양한 불편함을 감수해야 합니다.

클라우드

  • 필요에 따라 자유롭게 원하는 만큼의 자원을 확보할 수 있습니다.
  • 각 클라우드 플랫폼이 제공하는 AI 도구와 쉽게 연동하여 사용할 수 있습니다.
  • 초기 구축의 비용이 상대적으로 저렴하며 각 클라우드 서비스에서 제공하는 크레딧으로 일정 부분 무료로 사용할 수 있습니다.
  • 사용자의 민감한 정보를 다루는 경우 데이터 클라우드 호스팅이 어려울 수 있습니다.
  • 대규모 연산 자원이 필요할 경우 비용이 높으며 최근 높은 수요로 인해 고성능의 GPU 확보가 어렵습니다.
  • 특정 클라우드 플랫폼 의존도가 높아져 장기적으로 Lock-in될 우려가 있습니다.

온프레미스

  • 지속적인 연산 자원이 필요할 경우 상대적으로 저렴합니다.
  • 데이터셋을 물리적으로 분리된 환경에서 관리할 수 있어 더욱 안전하고 비용 효율적인 보안을 유지할 수 있습니다.
  • 초기 하드웨어 구매로 인한 비용이 높고 하드웨어와 네트워크 등 물리 인프라에 대한 지식이 필요합니다.

쿠버네티스 기반 하이브리드 클라우드 인프라

클라우드와 온프레미스 중 하나의 환경을 선택하여 머신러닝 플랫폼을 구축하는 경우도 있지만, 기존에 구축해뒀던 플랫폼을 다른 환경으로 확장 및 이동하거나 두 환경을 동시에 사용하는 하이브리드, 또는 멀티 클라우드 사례 또한 최근 증가하고 있습니다. 하이브리드 인프라는 클라우드의 유연성과 온프레미스 서버의 보안, 비용 절감을 동시에 확보하는 장점이 있으나, 클라우드와 온프레미스 운영에 대한 지식이 모두 필요하기 때문에 운영이 복잡하고 더 많은 노력이 필요한 단점이 있습니다.

이처럼 여러 환경에서 서비스를 운영할 때 사용할 수 있는 도구로 쿠버네티스(Kubernetes)가 있습니다. 쿠버네티스는 컨테이너화된 워크로드를 관리하고 운영하기 위한 컨테이너 관리 (Container Orchestartion) 도구입니다.

  • 비용 절감 — 쿠버네티스를 이용하여 여러 클라우드와 온프레미스를 하나의 표준화된 인터페이스로 관리할 수 있습니다. 이를 통해 일정 수준의 학습 자원은 온프레미스로 관리하고, 대규모의 학습 자원이 필요할 때 클라우드를 활용하거나 각 클라우드 서비스에서 가장 저렴한 인스턴스를 선택하여 클라우드 비용을 절감할 수 있습니다.
  • GPU 자원 효율화 — 사용자가 GPU, CPU, 메모리 등 모델의 학습 조건에 맞는 자원의 종류와 스펙을 지정하면 현재 사용 가능한 가용 서버 및 노드를 쿠버네티스가 자동으로 할당해줍니다. 또한, 현재 사용 중인 GPU를 실시간으로 모니터링할 수 있게 되어 자원을 더욱 효율적으로 사용할 수 있습니다.
  • 내결함성 (fault-tolerance) 증대: 자동화된 복구 기능(self-healing)이 있어 모델 학습 프로세스를 직접 관리하지 않아도 됩니다. 클러스터의 GPU 노드가 다운되거나 모델 학습을 위한 컨테이너가 제대로 실행되지 않는 등 하드웨어 및 소프트웨어적인 문제로 학습이 진행되지 않을 때, 잡(training job)을 자동으로 다른 노드에 배정하여 다시 실행합니다.
  • 모델 재현성 (reproducibility) 확보: 머신러닝 라이브러리, 하이퍼파라미터 등의 값, GPU 드라이버 버전 등 모델 학습 환경을 도커 이미지로 저장하고 이를 쿠버네티스를 이용해 운영함으로써 모델 학습, 서빙 및 배포 환경을 항상 일정하게 유하고, 모델의 재현성을 보장할 수 있습니다.

VESSL — 하이브리드 클라우드 MLOps

쿠버네티스를 이용하면 머신러닝 인프라를 더욱 쉽게 구축할 수 있지만 쿠버네티스는 매우 무겁고, 특히 SW, DevOps 엔지니어링이 없는 데이터 사이언티스트에겐 매우 어려운 도구입니다.

VESSL Cluster를 이용하면, 쿠버네티스 기반 하이브리드 클라우드 인프라를 명령어 한 줄로 구축하고 머신러닝 학습과 배포에 최적화된 형태로 운영할 수 있습니다. 또한, 쿠버네티스의 강력한 오케스트레이션 기능과 더불어, 머신러닝 인프라 및 클러스터 관리를 더욱 쉽게 관리할 수 있는 기능을 제공합니다.

  • 하이브리드 클러스터 구축: AWS, GCP, Azure 등의 클라우드 서비스와 온프레미스 서버를 커맨드 한줄로 쉽게 연동하고 한 곳에서 편리하게 관리할 수 있습니다.
  • 쉬운 유저 인터페이스: 복잡한 쿠버네티스 인터페이스 대신 개발 경험이 없는 데이터 사이언티스트, 머신러닝 연구원들도 쉽게 사용할 수 있는 웹 인터페이스와 API를 사용하여 머신러닝 워크로드를 관리할 수 있습니다.
  • 클러스터 관리 자동화: 연결된 클러스터의 상태와 실행 중인 모델 학습의 현황을 실시간으로 확인하고, 노드에 문제가 발생하면 이를 자동으로 감지하고, 잡을 다른 클러스터 및 노드에 재배치합니다.
  • 자원 분배 효율화: 클러스터의 GPU 사용 현황을 대시보드로 한눈에 파악하고 사용자 단위로 할당량을 조절하여 딤 내 자원을 더욱 효율적으로 분배할 수 있습니다.

또한 VESSL을 이용하여 모델 학습, 최적화, 서빙 및 배포에 이르는 전과정을 쉽게 진행할 수 있습니다.

  • 노트북 서버 — GPU를 할당 받고 주피터 노트북을 실행
  • 잡 스케쥴링 — 컨테이너화된 머신러닝 잡을 클릭 몇번으로 실행
  • 모델 튜닝 — 자체 제공하는 하이퍼파라미터 최적화 알고리즘으로 모델 성능 최적화
  • 모델 서빙 — 만들어진 모델을 레지스트리에 저장하고 클릭 한번으로 API 형태로 배포
  • CI/CD 파이프라인 — 모델 학습, 최적화, 서빙 전과정을 파이프라인으로 구축하여 자동화

커맨드 한줄로 하이브리드 머신러닝 인프라를 구축하는 방법

VESSL Cluster의 시스템 구조는 총 4개로 구성되어 있습니다.

  • VESSL API 서버: 사용자의 클러스터와 통신하여 클러스터를 관리하고, 머신러닝 워크로드를 실행하기 위한 각종 동작을 수행합니다.
  • VESSL agent: 클러스터에 설치되어 VESSL과 통신합니다. GPU, GPU, RAM 등 각 노드의 메타데이터를 VESSL API server에 전달하고, 사용자가 요청한 워크로드를 VESSL API 서버에서 읽어와 쿠버네티스 리소스 형태로 실행합니다.
  • Control plane 노드: 쿠버네티스 클러스터의 ‘control plane’ 역할을 합니다. 여러 개의 노드를 하나의 클러스터로 묶고 각 노드의 전반적인 제어를 담당합니다.
  • Worker 노드: 머신러닝 워크로드를 실행하는 노드입니다. 하나의 서버를 VESSL에 연동할 경우 control plane 노드가 worker 노드의 역할을 동시에 수행하게 됩니다.

VESSL의 CURL 명령어를 이용하면 위 구성요소를 비롯해 하이브리드 머신러닝 인프라에 필요한 모든 도구를 한번에 설치, 설정할 수 있습니다.

(1) 온프레미스 쿠버네스 클러스터 설정

학습용 서버를 쿠버네티스 클러스터로 구성하고 VESSL과 연동하기 위해서는, 먼저 연동하려는 서버에 다음과 같은 준비가 필요합니다.

  • Ubuntu 18.04 혹은 또는 Centos 7.9 이상의 OS
  • NVIDIA GPU가 장착된 서버의 경우, NVIDIA GPU driver
  • 여러 대의 서버를 하나의 클러스터로 구성할 경우, control plane 노드와 worker 노드간의 통신

먼저 서버 한 대를 control plane node 겸 worker node로 만들어보겠습니다. VESSL이 제공하는 스크립트를 통해 쉽게 필요한 라이브러리와 바이너리를 설치할 수 있습니다. 터미널에서 아래 명령어 한 줄만 실행하면 됩니다!

 curl -sSLf https://install.dev.vssl.ai | sudo bash -s -- --role=controller

스크립트가 하는 일은 다음과 같습니다.

  1. Docker가 설치되어있는지 확인 후, 설치가 되어있지 않다면 설치합니다.
  2. 컨테이너에서 GPU를 사용하기 위한 NVIDIA container runtime을 설치, 설정합니다.
  3. 경량화된 쿠버네티스 배포판인 k0s를 설치한 후, control plane 노드로 k0s를 실행합니다.
  4. Worker 노드가 control plane에 연결할 때 사용할 토큰을 발행한 후, worker node에서 사용할 커맨드를 출력합니다.

위 스크립트가 잘 실행되었다면, 아래와 같은 형태로 클러스터에 다른 worker 노드를 붙일 수 있는 설치 커맨드가 메시지로 출력됩니다. Worker 노드 없이 서버 한 대만을VESSL에 연결할 경우에는 다음 단계로 넘어가도 됩니다.

curl -sSLf https://install.dev.vssl.ai | sudo bash -s -- --role worker --token '[TOKEN_HERE]'

명령어가 수행되고 노드가 클러스터에 잘 연결되었다면, control plane 노드에서 sudo k0s kubectl get nodes 커맨드를 실행했을 때 다음과 같이 하위 노드를 조회할 수 있습니다.

Control plane 노드로 사용할 서버에서 학습을 수행하지 않고 순수한 control plane으로 사용할 경우에는 -- taint-controller 옵션을 추가하여 아래와 같이 스크립트를 실행하면 됩니다.

curl -sSLf https://install.dev.vssl.ai | sudo bash -s -- --role=controller --taint-controller

(2) VESSL — 쿠버네스 클러스터 연동

준비된 클러스터에 VESSL을 연동해보겠습니다. 먼저, control plane 노드에서 VESSL SDK를 설치 후 VESSL에 로그인해줍니다.

pip install -U vessl
vessl configure

출력된 링크를 눌러 CLI 로그인 페이지 접속 후, “Grant access” 버튼을 누르면 CLI 환경에서 로그인이 완료됩니다.

마지막으로, 아래 VESSL CLI 커맨드에서--name 입력칸의 이름을 원하는 이름으로 변경 후 실행하면, 클러스터에 VESSL agent가 설치되고 아래와 같이 자동으로 VESSL에 연결이 됩니다. VESSL에서 “Clusters” 탭을 누르시면 연동된 클러스터의 상태를 아래와 같이 쉽게 확인하실 수 있습니다.

vessl cluster create --name='[CLUSTER_NAME_HERE]' --mode=multi

마치며

머신러닝 모델 학습에 필요한 연산 자원의 규모가 커지며, 클라우드와 온프레미스 환경에서 여러 대의 하드웨어를 확보하여 학습 플랫폼을 구축하려는 사례가 많아지고 있습니다. 그러나 관리해야 할 플랫폼의 규모가 커질수록 운영이 복잡해지며, 팀의 역량이 모델 연구에 집중되지 못하고 인프라 운영에 분산된다는 문제점이 있었습니다.

이번 튜토리얼에서는 하이브리드 머신러닝 인프라를 위해 쿠버네티스 클러스터를 구성하고 VESSL과 연동하는 방법을 알아보았습니다. VESSL을 이용하면 클라우드와 온프레미스 양쪽의 장점을 최대한 활용하면서 더욱 쉽고 편하게 MLOps 플랫폼을 구축할 수 있습니다. 모델의 재현성, 노드 복구 자동화, 자원의 효율성 증가와 같은 장점들을 통해 클러스터 운영의 많은 부분을 자동화하고 이에 더해 VESSL의 다양한 기능 또한 함께 사용할 수 있습니다. 즉, 실험 관리부터 모델링, 배포까지 이르는 end-to-end MLOps를 개인, 팀, 기업 등 다양한 규모에서 최소한의 노력으로 구현할 수 있습니다.

클러스터 연동을 비롯해 VESSL을 사용하시면서 궁금한 점이 있으시면, 언제든 공식 문서를 참고해주시거나 커뮤니티 슬랙에서 문의해주세요!

  • Jay, CTO
  • Yong Hee, Growth Manager

--

--