Voila
내가 만든 코드를 다른 사람들이 구현하려면 라이브러리 설치, 버전 등 신경써야할 것이 많고, 개발을 잘 모르는 사람이라면 이 부분에서 어려울 수 있다.
모델을 개발한 후 프로토타입을 만들어서 가능성을 테스트할 수 있다.
웹서비스를 만드는 것은 시간이 많이 소요되기 때문에 노트북으로 프로그램으로 만들면 시간을 많이 아낄 수 있다.
그 역할을 voila가 한다. 사용자가 값을 바꿀 수 있는 대시보드를 구축할 수도 있다. 1차 프로토타입을 웹형태로 단시간에 띄울 수 있다.
R의 shiny, 파이썬의 dash와 유사하지만 voila는 별도의 문법이 없어서 시간을 아낄 수 있다.
많은 대시보드 도구가 존재한다 (Tableau, superset, metabase, redash). 서버에 설치해서 연동시켜야하기 때문에 개발을 위한 리소스가 필요하다. 그리고 또 SQL로 다시 해야하기 때문에 노트북해서 짰던 결과를 다시 똑같이 재현하는 것이 어렵다.
장점
- 주피터 노트북 결과를 웹으로 쉽게 띄울 수 있다
- interactive하게 조정하며 볼 수 있다
- extension이 있어서 바로 대시보드로 변환할 수 있다
- python, julia 등 지원
- 고유한 템플릿 생성 가능
Voila 사용하기
jupyterlab을 사용하는 경우이다.
여기에서 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을 사용하면 간단한 대시보드를 빠르게 만들 수 있다.
'부스트캠프 AI Tech 3기 > 프로젝트 : P-stage' 카테고리의 다른 글
[Day86] Product Serving 2-4 Cloud (0) | 2022.05.25 |
---|---|
[Day82] Product Serving 2-2 프로토타이핑 - 웹 서비스 형태(Streamlit) (0) | 2022.05.19 |
[Day82] Product Serving 1-3 Model Serving (0) | 2022.05.18 |
[Day80] Product Serving 1-2 MLOps 개론 (0) | 2022.05.16 |
[Day74] Github 특강 2-2 amend, reset (0) | 2022.05.06 |