2021. 7. 26. 01:49

데이터쟁이들을 위한 리소스 관리 플랫폼 Backend.AI

오픈소스 컨트리뷰션 아카데미

Backend.AI라는 오픈소스 프로젝트를 알게 된 것은 오픈소스 컨트리뷰션 아카데미라는 과학 기술 정보 통신부에서 주최하며 프로젝트의 코어 개발자들의 멘토들에게 직접 멘토링을 받으며 오픈소스에 기여하고 평가받는 정부 프로그램이다.

최근에 github 잔디 심기에 몰두하면서 오픈소스 생태계에 대해 관심이 많이 생겼는데 그 관심을 살릴 수 있는 기회인 것 같아서 내 입맛에 맞는 프로젝트를 찾던 도중 발견한 것이 바로 이 Backend.AI였다.

Backend.ai는 어떤 프로젝트인가?

왜 하필 이 프로젝트에 관심이 생겼는가는 지금 하고있고 고민하고 있는 일과 맞닿아있다. 우선 이 프로젝트에 대해서 소개하자면 Backend.AI는 오픈소스 리소스 관리 플랫폼이다. 클라우드로도 제공하고 있으며 직접 온프레미스 환경에 오픈소스를 설치하여 클러스터를 구성하고 환경을 구축할 수도 있다.

그래도 잘 안 와 닿을 수 있다. 그렇다면 지금 내가 당면한 문제와 구상한 해결법에 빗대어서 이 프로젝트는 과연 나에게 어떤 솔루션이 되어줄지에 대해 논해보고자 한다.

일단 우리 회사에는 성능이 굉장히 좋은 워크스테이션 두 대가 있다. 내부망으로 데이터 분석가들, 사이언티스트, 머신러닝 엔지니어 등이 주피터 노트북이나 ssh로 연결해서 리소스를 사용하고 있다.

하지만 여기서 문제가 있다. 로드 벨런서를 통해 알아서 워크스테이션에 나뉘어서 접속되는 것이 아니라 그날의 컨디션(?)이나 이전에 작업하던 것에 따라서 워크스테이션에 직접 접속하게 된다.

따라서 효율적으로 워크스테이션1과 2의 리소스가 분배되지도 않을 거고 그동안 유휴자원으로 놀게되는 워크스테이션이 생기는 낭비가 필연적으로 발생하게 된다.

작업이 한곳에 집중되어서 생기는 문제도 있다. 주피터 노트북은 멀티 테넌시용으로 설계된 것이 아니기 때문에 아무리 conda로 python 패키지 환경을 나눠놔도 os까지 반가상화해서 나눠놓지 않기 때문에 설정이 꼬이거나 패키지간의 의존성이 꼬일 여지가 생긴다.

덕분에 우리 회사는 가끔 노트북이 다운되거나 느려지면 범인 수색 시간을 갖는다.

그래서 생각한 것이 쿠버네티스로 워크1와 2를 클러스터링으로 이어주고 pod 단위로 jupyter hub(oAuth로 github 로그인이 가능한)로 환경을 완전히 분리시키고 자원을 프로메테우스 같은 걸로 모니터링도 하고 메모리나 CPU나 GPU 자원에 상한선을 두어 모두 골고루 효율적으로 배분해서 사용할 수 있도록 하는 것을 구상했었다.

과거형이며 구상만 했다는 것은 아직은 내가 쿠버네티스 기술에 대해서 자신이 없고 네트워크부터 시작해서 워크스테이션의 효율적인 리소스 할당에 대한 자신이 없어서 아직은 책을 통해 공부하고 있는 부분이기 때문이다.

그러던 찰나에 이 Backend.ai는 이런 우리의 상황에 너무나 딱 맞는 솔루션이다.

backend.ai는 데이터 과학자, 데이터 분석가, 개발자 등 리소스에 접근 가능한 여러 이해관계자들이 하드웨어 인프라를 효율적으로 분산해서 리소스를 나눠 가지고 다양한 클라이언트 플러그인 등을 통해 데이터를 분석, 연구가 가능해진다.

쿠버네티스처럼 컨테이너 기반 가상화를 통해 자원 활용량을 추적, 모니터링이 가능하며 오토 스케일링이 가능하다. 특히 머신러닝에서 중요한 GPU에 대한 다중 및 부분 할당이 가능하다.

주피터 노트북 뿐만이 아니라 vs code 등 다양한 플러그인 제공으로 데이터에 대한 접근 방식이 좀더 사용자 친화적이다.

마치 나를 정조준하고 써놓은 IR인 것처럼 내가 구상하고 기존에 MLOps로 구축해놓은 환경들을 전면으로 부정하며 개선해놓은 통합 솔루션인 셈이다.

다만...

이걸 알게 된 것이 어제고 접수 마감일이 오늘까지라고 해서 다소 급하게 부랴부랴 설치하게 되었다. 오픈소스 컨트리뷰션 아카데미 측에서 올린 프로젝트 가이드 pdf파일에 컨트리뷰션 가이드 관련 링크에 오타가 있어서(설치 url에 install이 intstall로 t가 추가되어 있었다.)직접 수기로 링크를 입력했구나 하는 생각이 들면서 거기까지는 사소한 것이었다.

해당 프로젝트에 레포지토리는 backend.ai라는 하나의 저장소가 있고 이 저장소는 meta정보 및 모든 저장소들을 하나로 이어주는 용도다. 이 저장소의 쉘 스크립트를 실행하면 backend.ai의 뒤로 붙은 하위 엔드포인트로 나뉜 (webUI, CLI, Webserver 등...)순차대로 실행되고 관련된 의존성 파일도 실행해서 설치한다.

그렇다고해서 의존성 파일들을 설치하면 안되는 것은 아니다. docker나 docker-compose, git, pyenv, pyenv-vertualenv 등은 기본적으로 설치한 상태해서 진행해야 관련된 에러 사항을 트래킹할 수 있다.

게다가 부분적으로 도커나이징이 되어있고(레디스같은 디비들만)최신의 파이썬 버전을 다루다보니깐 의도치 않고 예기치 않은 에러들이 설치 과정에서 마구 튀어나왔다.

결론적으로는 결국 실행은 못해봤다...뒤에 나올 설치 단락은 설치 성공담이나 설명이 아니라 실패담을 담고있다.

클라우드라도 한번 테스트해보고 싶었지만 베타 코드를 받은 사람에 한정해서 실행해볼 수 있었다. 😢

설치

앞서 언급한 것처럼 모든 저장소의 순서대로 설치하고 관계된 의존성 라이브러리들을 설치하는 쉘스크립트가 들어있는 backend.ai저장소에 meta폴더를 클론 받는다.

# linux
sudo meta/scripts/install-dev.sh
# mac os
meta/scripts/install-dev.sh

위 명령어를 통해 실행하면 쉘 스크립트를 통해 알아서 설치하기 시작한다. 정말 그랬으면 좋으련만

첫번째 실패 해당 폴더를 지워주고 brew install pyenv pyenv-virtualenv를 통해 미리 설치해두고 시작하자, 본인이 우분투라면 아래 명령어를 사용해서 미리 설치해주자

# linux
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
# mac os
brew install pyenv pyenv-virtualenv

wsl2 환경에서도 해보고 mac os 환경에서도 해봤는데, 결론적으로 wsl2 환경에서는 python3를 다운받고 체크하는 쉘스크립트의 check_python() 함수의 if문에 다 걸린다. 이 부분을 주석하면 넘어가긴 하지만 결국 로컬의 python 경로를 잡는 것에서 실패하고만다.

mac환경은 위 사진과 같다. 다 통과해도 pyenv에서 python 3.9.5버전을 설치하다가 문제가 생긴다. 하지만 아나콘다를 통해서 3.9.5로 환경을 만들면 해당하는 빌드에러는 생기지 않는다.

아마도 추측했을 때 원인은 다음과 같다.

  1. pyenv와 최신 맥os간의 패키지 호환성 문제
  2. conda 환경이랑 pyenv 가상환경이랑 충돌나서 생긴 일이다

1번의 경우에는 다운그레이드 하는 방법도 번거롭거니와 시간이 얼마 남지 않아서 일단은 패스. 2번의 경우에는 conda를 쉘에 달아놓은 zsh쉘이 아닌 bash쉘 환경에서 테스트해봤어도 역시나 문제가 생겼다.

일단 여기까지 삽질을 마치고 혹시나 이 오픈소스 프로젝트를 설치해본 경험이 있으신 분들이라면 어떻게 극복했는지 이 글을 통해서 여러 의견들을 받아보고 싶다.