본문 바로가기
  • Survival Plan
개발 이야기

[클라우드 데이터 분석 플랫폼 비교-2] 바인더(Binder)와 깃파드(Gitpod)

by IT/머신러닝 엔지니어의 독서/경제/육아 공부 리치윈드 - windFlex 2020. 5. 18.

필자는 언제 어디서나 파이썬 노트북 또는 이에 준하는 데이터 분석 환경이 필요하여 클라우드 Python Notebook 플랫폼을 검토하고 있다. 관련하여 아래 포스팅에서 Google Colab과 Microsoft Azure Notebook의 사용을 리뷰하였다. 

 

2020/05/18 - [분류 전체보기] - [데이터 분석] 클라우드 파이썬 노트북 (Cloud Python Notebook) 플랫폼 (1부) - 구글 코랩(Colab)과 MS Azure Notebook

 

이번 글에서는 바인더 (Binder)와 깃파드 (Gitpod)에 대하여 소개를 하고 사용 리뷰를 공유하고자 한다. Binder와 Gitpod는 자체적인 환경을 구축 제공하는 Google Colab과 MS Azure Notebook과는 달리, 깃헙 리파지토리 (Github Repository)을 기반으로 서비스 하고 있는 플랫폼 이다. 자체적인 Jupyter Notebook 또는 IDE를 제공하기 보다는 Github의 내용을 가져와 (pull request)하여, 환경을 새롭게 구축하는 형태를 취하고 있다. 

 

 

바인더 (Binder) 

https://mybinder.org/

 

MS Azure Notebook이 Preview 버전인 이유로 새로운 플랫폼을 찾아 보았고, 다음으로 사용했던 플랫폼이 바인더 (Binder)였다. Binder 는 Github를 사용하던 개발자들 사이에서는 상당히 알려져 있는 플랫폼으로, Github 저장소(Repository) URL만 입력해 주면 Github에 저장되어 있는 소스코드와 프로젝트 세팅을 불러들여 Jupyter Notebook을 실행시켜 준다. 

 

Github 내용을 Jupyter Notebook에서 실행

딱 이 기능만 있다. 

 

Github Repository URL을 입력하여 주면 코드를 읽어와 Jupyter Notebook을 실행하여 준다. 

공식 홈페이지를 방문하여도 위의 페이지만 출력되고 다른 페이지도 없다. 슬로건 자체도 "Turn a Git Repo into a collection of interactive Notebooks"라고 하듯이, "Github -> Notebook" 이라고 생각 하면 된다.  

 

Github URL과 입력한 후, "Launch" 버튼을 누르면, 소스코드를 가져와 컨테이너(Container)를 생성한다. (Git Branch와 notebook 파일명은 옵션이다.) 필자의 경우 대략 5분 내외의 시간이 소요 되었다. 참고로, 동일한 저장소를 다시 실행한 경우 building과정은 생략된다. Container를 구성할 때, Container에 어떤 내용을 담을 것인가에 따라서 Jupyter 및 Python 커널의 버전과 설치되어 있는 모듈이 다를 수 있는데, 이러한 설정을 하나로 모아서 environment.yml 파일을 작성하여 설정할 수 있다. 

Docker 이미지를 생성하고 Pushing하는데 시간이 좀 걸린다. 필자의 경우는 약 5분 내외

 

동일한 저장소를 실행하면, "Already Built"가 출력되고 빠르게 시작된다. 

 

Github 소스를 기반으로 Binder를 실행하면, 익숙한 Jupyter Notebook 초기화면을 볼 수 있다. 우측 상단의 Binder 전용 메뉴를 제외 하면 Jupyter Notebook과 동일하다. 

binder 실행 초기 화면

이 중에서 notebook 파일을 하나 열어보면, 익숙한 notebook 코드 화면을 볼 수 있다. 

Binder로 실행한 Jupyter Notebook code 실행 화면

 

 

[ 리소스 및 성능 분석 ]

다음으로 제공되는 리소스를 분석해 보자. CPU를 확인해 보면 MS와 구글보다는 성능 높은 프로세서를 사용하고 있는 것을 확인 할 수 있었다. 더욱이, Google과 MS가 2개 CPU를 사용하는 반면, Binder는 72개의 병렬 프로세서를 사용하고 있었다. 

!cat /proc/cpuinfo

processor	: 71
vendor_id	: GenuineIntel
cpu family	: 6
model		: 85
model name	: Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz
stepping	: 4
microcode	: 0x2000064
cpu MHz		: 2300.001
cache size	: 25344 KB

MS와 구글보다는 고성능의 프로세서를 사용. 더군다나 72개의 병렬로 구성

  이전 글 :  2020/05/18 - [분류 전체보기] - [데이터 분석] 클라우드 파이썬 노트북 (Cloud Python Notebook) 플랫폼 (1부) - 구글 코랩(Colab)과 MS Azure Notebook

메모리 측면에서 또한 754Gb의 어마무시한 용량이다. 구글 12Gb, MS 3.8Gb와 비교하면 무시할 수 없는 넘.사.벽.이라 하겠다. 다만, 서비스 차원에서 Container 당 할당메모리양을 2Gb로 제한하고 있으며, 2Gb가 넘어가면 세션이 다시 시작된다고 한다. (안정적으로 2Gb까지는 사용할 수 있다라는 의미로 받아 들이면 될것이다.)

!free -h
              total        used        free      shared  buff/cache   available
Mem:           754G         58G        253G         39M        442G        700G
Swap:            0B          0B          0B

 

[ 실제 사용 경험 리뷰]

너무나도 당연한 결과인지 모르겠지만, 단순하기 기존 사용하던 코드를 Github 저장소에 올려 놓고, binder를 실행하면, 모듈이 설치 되어 있지 않다. 외부 모듈이 필요한 경우, pip 또는 conda로 설치하면 되지만, 문제는 세션이 시작될 때마다 이것을 반복해 주어야 한다는 것이다. 아래와 같이 데이터 분석에 기초적인 numpy 조차 설치되어 있지 않다. (당연한 결과이다.)

기본 환경으로 Binder를 실행하면 외부모듈은 설치되어 있지 않은 환경이다. 

Python의 의존성 관리를 위해 requirements.txt를 사용하곤 한다. 그러나, Binder에서 컨테이너를 실행하는 시점에 requirements.txt를 참조해서 의존성 및 모듈을 설치해 주어야 할것이다. 또한 python kernel 버전의 설정도 필요하다. 매번 노트북을 실행할 때마다 의존성 설치를 하기에는 너무 번고롭기 때문에, "environment.yml" 파일을 생성하여 이 파일에 필요한 패키지를 기술하는 방법을 사용한다. 

다음은 environment.yml 파일의 예이다. numpy와 pandas 등 데이터 분석을 위한 패키지를 설치한다. 

name: secu_eda
channels:
  - conda-forge
dependencies:
  - numpy
  - psutil
  - toolz
  - matplotlib
  - dill
  - pandas
  - partd
  - bokeh
  - dask

 

실제 필자가 사용하는 데이터 로딩 및 전처리 중 일부를 속도 비교에 사용하였다. Google Colab과 MS Azure Notebook에서도 동일한 데이터와 코드를 사용하여 속도 비교를 하였다. 리소스를 확인할 때 예상 했지만, 결과는 매우 빠른 속도를 보였다. 2~4초 사이를 보이던 Google Colab, 15~60여초의 MS와 비교 할 때 상당히 빠른 속도를 보이고 있다. 다수회 실행을 할 때 안정적으로 2초대의 결과를 보여 주었다.  

데이터 전처리 및 로딩 속도 비교. 가장 빠른 결과를 보이고 있다. 

 

이러한 장점들에도 불구하고, 치명적인 단점이 하나 있다. 그것은 바로 세션관리 기능이 없다는 것이다. (혹시 알고 계시분은 제보 주세요~) Jupyter Notebook을 실행하기 위한 전제 조건이 Github Repository URL 밖에 없다.

 

Github 사설 저장소 (Private Repository)로 Binder를 실행하면, 로딩/빌드 실패한다. 

 

이게 무슨말이냐면, 나만의 개인 Repository 실행이 불가능하며, 내가 실행하던 상태를 저장할 수 없다는 이야기이다. 이렇게 되면, 내가 작성한 코드 및 데이터는 실시간 공개 되어야만 하고, 변경사항의 저장은 Github에 꼭 commit 해 두어야 한다는 이야기다. 만약, Commit 을 못한 상태에서 세션이 끊기게 되면 "처음부터 다시" 라는 결론이 나온다. 

세션 관리만 있으면 완벽한데....ㅜ_ㅜ

아마도 바인더(Binder)의 컨셉과 슬로건 자체가 "실행환경에서 Notebook을 공유/토론"에 목적이 있어서 이런 결과가 나온듯 하다. 

 

[ 장점 ]

  • 빠른 처리 속도
  • Github Repository의 연계 및 간결한 실행
  • Jupyter Notebook 그대로의 UI

[단점]

  • 세션관리 기능이 없음
  • 공개 리파지토리만 접근 가능

 

 

깃파드 (Gitpod) 

https://www.gitpod.io/

 

Github 기반으로 개발환경을 구성하는 또다른 서비스중 하나로 깃파드(GitPod)를 사용해 보았다. Gitpod는  (Binder와 유사하게) Github의 저장소에서 소스코드/프로젝트 설정을 가져와서 환경을 구축하지만, Jupyter Notebook을 구성하기 보다는 범용 개발환경인 IDE를 구성한다. 이들의 슬로건은, 다음과 같다. 

Are You Ready-To-Code?
Start Instantly. Anywhere

즉, 바로바로 환경 세팅되어 있는 곳에서 개발을 시작하라는 것이다. 

 

필자의 취지가 어디에서든 데이터 분석을 하고자 하였기 때문에, 클라우드 Jupyter Notebook을 알아보고 있었는데, gitpod를 사용하면 Python / Jupyter Notebook 뿐만 아니라 다양한 개발환경을 구축할 수 있기 때문에 필자의 목적에 부합한다. 또한 필자는 집에서의 분석환경은 VS Code를 사용하고 있기 때문에 매우 익숙하기도 하였다. 

 

Gitpod는 브라우저 자체에서 로커 IDE와 거의 차이가 없는 개발환경을 제공한다. VSCode를 기반으로한 Theia IDE를 사용한다. VScode 확장팩 (Extention)들을 사용할 수 있기 때문에, 그냥 VScode를 사용한다고 봐도 무방할 것 이다. 또한, 미리 생성된 (Prebuilt) 개발환경을 다양하게 제공하고 있어서, 별다른 설치 없이 "VS Code + 개발환경"을 빠르게 사용할 수 있다. 

 

마치 로컬에 있는 VS code를 보는것 같다. 사용상에서 속도저하나 딜레이 이런것을 전혀 느끼지 못했다. 

 

뭐.. 그런것 보다도 가장 주목할 만한 점은, Github에서 버튼 하나만 클릭 하면 바로 연동 된다는 것이다. gitpod에 서비스를 등록하고 나면, Github 화면에서 아래처럼 우측 상단에 Gitpod 버튼이 생성된다. 어떤 github repository든 해당 버튼을 클릭하면, Gitpod가 컨테이너를 생성하고 Github에서 pull request -> 개발환경 설정 (의존설/패키지 설치) 후 VS code 환경을 제공한다. 

github에 Gitpod 버튼으로 연계가 가능하다.

 

Gitpod 버튼을 누르면 Docker Image를 받아서 컨테이너를 설정한다. 

 

Github의 저장소를 통하여 접속하는 것 외에도 미리구축된(Prebuilt ) 개발환경을 제공함을소, 로컬 개발환경 대신 클라우드 개발환경을 제공하고자 하는 것 같다. 바야흐로, 이제 로컬 개발 머신도 필요없는 시대가 다가 오고 있는 것 같다. 

Gitpod의 특징 및 제공하고 있는 기능들 

 

[ 실제 사용 경험 리뷰]

Google Colab, MS, Binder 등과 동일하게 CPU 리소스를 살펴 보았다. 프로세서는 크게 특이 사항이 없었으며, 16개의 병렬 프로세서를 사용하고 있었다. CPU 자원 할당으로만 볼 때, Google Colab과 Binder의 중간 정도 수준이라고 보명 될것 이다. 

Google Colab은 GPU할당이 있기 때문에, CPU 기준으로만 판단 할 수 는 없다.
Gitpod의 경우 메모리 할당을 확인할 수 없었다. Docker 수준에서 메모리 스펙에 대한 참조를 거부해 놓은 것으로 보인다. 

GitPod 의 CPU 스펙 확인. 16개 병렬 프로세서 할당

실제 필자의 전처리 코드 샘플을 실행하여 실행속도를 비교해 보았다. 다수회 실행 결과는 2초 중후반 대로써 Binder와 유사한 성능을 보이는 것으로 확인되었다. 

Gitpod 테스트를 위한, 데이터 로딩 및 전처리 샘플
VSCode와 거의 동일 하다. 온라인 Cloud VS Code라 불러도 손색이 없다. 

 

전반적으로 GitPod는 우수한 성능과 범용성 및 편리함을 제공하고 있으나, 중대한 문제점이 하나 있다. 

무료버전의 제한과 가격

 

무료버전은 월 50시간만 사용이 가능하다. 코딩하는 경우를 생각해 보면 월 50시간은 일주일만에 사용이 끝날 수 도 있다.

월 $9 비용을 지불해도 100시간 밖에 사용 못하는데, 즉,, Professional 이상이 아니면, 주 작업 환경으로는 사용할 수 없다는 이야기이다. Self-Hosted 방식으로 사용할 수 도 있겠으나, 그렇게 할거면 굳이 이런 플랫폼을 사용할 필요도 없다. 

GitPod의 가격 정책 및 라이센스별 제한점

 

실제 본인의 계정을 들어가면, 실제 사용하는 시간이 모니터링 되고 있다. 이러한 시간 제약성을 가지고 맘편이 코드와 분석에 몰둘 할 수 있을런지 의문이다. ㅜ_ㅜ 

 

[장점]

  • GitHub와 연동하여 간결하게 실행할 수 있다. 
  • 범용 개발환경은 온라인 으로 구축할 수 있다. 
  • 생각외로 빠르고 쾌적하게 실행된다.

 

[ 단점 ]

  • 무료버전은 거의 맛보기 수준이다.
  • 가격정책이 타이트하다. (Personal 라이센스로도 부족)

 

관련글

2. 데이터분석 플랫폼 실제 사용 분석 - Binder and Gitpod

 

 

 

 

 

 

댓글0