본문 바로가기

부스트캠프 AI Tech 3기/프로젝트 : P-stage

[Day82] Product Serving 2-1 프로토타이핑 - Notebook 베이스(Voila)

Voila

내가 만든 코드를 다른 사람들이 구현하려면 라이브러리 설치, 버전 등 신경써야할 것이 많고, 개발을 잘 모르는 사람이라면 이 부분에서 어려울 수 있다.

 

모델을 개발한 후 프로토타입을 만들어서 가능성을 테스트할 수 있다.

웹서비스를 만드는 것은 시간이 많이 소요되기 때문에 노트북으로 프로그램으로 만들면 시간을 많이 아낄 수 있다.

그 역할을 voila가 한다. 사용자가 값을 바꿀 수 있는 대시보드를 구축할 수도 있다. 1차 프로토타입을 웹형태로 단시간에 띄울 수 있다.

 

 

Voilà Gallery

gpx-viewer GPX Viewer web app built with ipywidgets, ipyleaflet, bqplot and voila

voila-gallery.org

R의 shiny, 파이썬의 dash와 유사하지만 voila는 별도의 문법이 없어서 시간을 아낄 수 있다.

 

많은 대시보드 도구가 존재한다 (Tableau, superset, metabase, redash). 서버에 설치해서 연동시켜야하기 때문에 개발을 위한 리소스가 필요하다. 그리고 또 SQL로 다시 해야하기 때문에 노트북해서 짰던 결과를 다시 똑같이 재현하는 것이 어렵다. 

 

장점

  • 주피터 노트북 결과를 웹으로 쉽게 띄울 수 있다
  • interactive하게 조정하며 볼 수 있다
  • extension이 있어서 바로 대시보드로 변환할 수 있다
  • python, julia 등 지원
  • 고유한 템플릿 생성 가능

Voila 사용하기

jupyterlab을 사용하는 경우이다.

 

GitHub - zzsza/Boostcamp-AI-Tech-Product-Serving: [Machine Learning Engineer Basic Guide] 부스트캠프 AI Tech - Product Serv

[Machine Learning Engineer Basic Guide] 부스트캠프 AI Tech - Product Serving 자료 - GitHub - zzsza/Boostcamp-AI-Tech-Product-Serving: [Machine Learning Engineer Basic Guide] 부스트캠프 AI Tech - Product Servi...

github.com

여기에서 requirements.txt를 다운받아서

pip install -r requirements.txt

로 전부 설치한 후에

jupyter labextension install @jupyter-voila/jupyterlab-preview

도 설치하고

pip install nodejs
pip install npm

까지 해주면 준비 완료

 

서버를 일시정지 후 재 실행 해주면

오른쪽끝에 그래프 같은 아이콘이 생긴다

 

대충 아무 프린트문 써주고 voila로 실행하면

이렇게 voila화면으로 잘 뜬다.

 

voila

를 terminal에 입력해주면

이렇게 내 환경 폴더가 뜨는데 아까 쓰고 있던 파일을 클릭하면 웹처럼 그 파일이 보이게 된다.


voila voila_practice.ipynb --strip_sources=False

이렇게 strip sources 옵션을 주면 코드와 함께 볼 수 있다. 실행은 할 수 없지만!


 

voila notebook을 사용하지 않으면 종료해줘야 리소스를 잡아먹지 않는다.

voila voila_basic.ipynb --MappingKernelManager.cull_interval=60 --MappingKernelManager.cull_idle_timeout=300

--MappingKernelManager.cull_interval=60 : idle 커널을 확인할 간격

--MappingKernelManager.cull_idle_timeout=300 : 커널을 idle 상태로 판단할 기준. 이 시간동안 이벤트가 없으면 idle로 판단하고 노트북 종료

--ExecutePreprocessor.timeout=180 : 하나의 cell의 연산을 기다리는 제한. 180초 이상 걸리면 timeout error

--enable_nbextentions=True : voila에서도 nbextension을 사용하고 싶으면


jupyter notebook에 암호 거는 법

 

jupyter notebook --generate-config

jupyter notebook의 config 파일이 만들어지거나 있는 위치를 알려준다

 

from IPython.lib import passwd
passwd()

를 파이썬으로 실행하면 password를 입력하라고 하면 암호를 입력한다.

verify password를 해서 뜨는 문자열을 복사하고 config에 password에 그 문자열을 붙혀넣는다.

 

ipywidget

ipywidget을 사용하면 인터랙티브한 효과를 줄 수 있다.

 

display함수로 python object를 보여준다.

import ipywidgets as widgets
from IPython.display import display

slider=widgets.IntSlider()
display(slider)

 

이런식으로 직접 클릭해서 움직일 수 있다.

 

widget.IntSlider(
value=3 # default 값
orientation='vertical',
step=3 # 한 번에 움직일 단계
description='slider의 Label'
max=100 #최대값
)

과 같이 여러 인자 설정을 통해 바꿀 수도 있다.

 

IntSlider외에도 BoundedIntText, Text, Textarea, Password, ToggleButton, CheckBox, DropDown, RadioButtons, FileUpload, Image 등의 다양한 위젯이 존재한다.


widget에 이벤트를 줄 수 있다. 버튼을 눌렀을 때 print하게 하는 예제이다.

button=widgets.Button(description='누르면 event')
output=widgets.Output()

display(button,output)

def onButtonClick(button):
    with output:
        print('버튼 누름')
button.on_click(onButtonClick)

 

이 경우 버튼을 3번 누른 화면이다. 누를 때 마다 print 된다.


이 외에도 interact decorator를 이용해서 widget 종류를 지정하지 않고 빠르게 위젯을 만들 수 있다.

 


결국 voila와 ipywidget을 사용하면 간단한 대시보드를 빠르게 만들 수 있다.