쉬엄쉬엄블로그

(AI 서비스 개발 기초) Notebook 베이스 - Voila 본문

부스트캠프 AI Tech 4기

(AI 서비스 개발 기초) Notebook 베이스 - Voila

쉬엄쉬엄블로그 2023. 8. 4. 14:09
728x90

이 색깔은 주석이라 무시하셔도 됩니다.

Part 2. 프로토타입부터 점진적으로 개선하기

Notebook 베이스 - Voila

Notebook 베이스로 프로토타입 만들기

  • 모델 개발 과정

    • Jupyter Notebook에서 함수를 작성한 후, 예측 함수를 실행하며 성능 확인
  • 혼자 확인할 땐 위와 같이 진행해도 괜찮으나, 동료들과 함께 보면서 이야기할 때는?

    • 각자 노트북 환경에서 실행…
      • ModuleNotFoundError: No module named ‘…’
      • 라이브러리의 의존성
      • 테스트를 위해 추가 환경 설정이 필요
      • 개발을 잘 모르는 분에게 테스트 요청할 경우엔 이 부분을 어려워 할 수 있음
    • 혹은 nbconvert를 사용해 HTML으로 추출할 수도 있음
      • ⇒ 인터랙티브하게 조작하긴 어려우며, 이미지 용량 등에 따라 느려질 수 있음
  • 모델을 개발한 후, 사람들과 테스트할 수 있는 프로토타입을 먼저 만들어보기

  • 이 모델이 어떤 결과를 반환하는가?를 테스트할 수 있음

  • 그러나 웹 서비스를 만드는 것은 시간이 많이 소요됨

  • 익숙한 노트북에서 프로그램을 만들면 시간을 아낄 수 있음

  • ipywidget과 같이 사용할 경우 간단한 대시보드를 구축할 수도 있음

  • 실행할 때 저장된 Notebook 파일이 순차적으로 실행되도록 만들 수 있음

  • 이런 경우 활용할 수 있는 도구가 Voila

    • 예시

      https://raw.githubusercontent.com/dhaitz/machine-learning-interactive-visualization/master/img/ml_visualization.gif

프로토타입이 중요한 이유

Voila

  • 본래 목적 : 대시보드
  • R의 Shiny와 유사하며, 파이썬의 Dash와 유사한 도구
    • (참고) Dash는 Dash의 문법을 익혀야 하기 때문에 사용할 때 시간이 필요함
  • 대시보드는 다양한 도구들이 존재
    • Superset, Metabse, Redash, Tableau
    • 다만 위 도구는 모두 서버에 제품을 설치한 후, 연동시켜야 함
      • = 개발 리소스 필요, 유지보수 필요
    • 대부분 SQL 베이스의 시각화
  • Notebook에서 별도의 코드 추가 없이 실행할 수 있는 점이 Voila의 강점
  • 노트북 파일만 만들면 프로토타입은 쉽게 만들 수 있음
  • 2019년 12월에 Jupyter의 하위 프로젝트로 통합됨
  • 장점
    1. Jupyter Notebook 결과를 쉽게 웹 형태로 띄울 수 있음
    2. Ipywidget, Ipyleaflet 등 사용 가능
    3. Jupyter Notebook의 Extension 있음(=노트북에서 바로 대시보드로 변환 가능)
    4. Python, Julia, C++ 코드 지원
    5. 고유한 템플릿 생성 가능
    6. 너무 쉬운 러닝커브

Voila 사용하기

pip3 install voila

JupyterLab 사용한다면

  • jupyter labextension install @jupyter-voila/jupyterlab-preview

jupyter Notebook이나 Jupyter Server를 사용한다면

  • jupyter serverextension enable voila --sys-prefix

nbextension도 사용 가능하도록 하고 싶다면 다음과 같이 설정

  • voila --enable_nbextensions=True
  • jupyter notebook --VoilaConfiguration.enable_nbextensions=True

ipywidget

ipywidget

  • ipywidget과 같이 사용하면 인터랙티브한 효과를 줄 수 있음
  • ipywidget도 Notebook 프로젝트
  • 다양한 Widget을 보면서 “어떤 것을 만들 수 있을 것 같다”라는 생각해보기

ipywidget 사용법

  • import 부분

      import ipywidgets as widgets
      from Ipython.display import display
    • display : Python Object를 보여주는 함수
  • Slider Widget

    • IntSlider : 정수형 Slider

    • 인자

      • value : Default 값

      • step : 한번에 이동할 단계

      • orientation : 수직, 수평선

      • description : Slider의 Label

      • 그 외에 FloatSlider, IntRangeSlider

    • Slider의 객체를 만든 후 int_widget.value를 출력하면 값이 보임

      • int_widget.value = 8 을 할 경우 값이 변경됨

  • Text Widget

    • Slider가 아닌 Input 입력

      • Bounded ; 범위가 주어진 Text

      • 마찬가지로 .value로 값에 접근 가능

    • String Text 위젯

  • Boolean Widget

    • True, False를 표시할 수 있는 Widget

    • ToggleButton

      • button_style : 버튼의 스타일

      • icon : 사용하는 아이콘

    • CheckBox

      • indent : 들여쓰기 여부

  • Selection Widget

    • 선택할 수 있는 Widget

    • Dropdown

    • RadioButtons

  • Upload Widget

    • 파일을 업로드하는 Widget

  • Image Widget

    • Image를 보여주는 Widget

  • Data Picker Widget

    • Date를 선택하는 Widget

    • Date, Time, Datetime도 있음

  • Widget Events(on_click)

    • 버튼이 클릭되었을 때, 어떤 함수가 동작하길 원하는 경우

    • on_click 인자에 함수를 넘겨주면 됨

  • Widget Events(observe)

    • 위젯의 값이 변경되는 것을 감지해서 특정 함수를 실행하고 싶은 경우

    • observe 인자에 함수를 넘기면 됨

  • interact Decorator

    • @interact 데코레이터를 사용하면 UI 컨트롤러가 생성

    • 함수의 인자를 받아서 UI가 생성됨

    • 만약 함수의 인자 중 하나는 고정하고 싶고, UI에서 나타나는 것을 원하지 않는 경우에는 fixed를 사용할 수 있음

  • Layout(Hbox, VBox)

    • 위젯의 레이아웃을 구성하고 싶은 경우 HBox, VBox를 사용

      • VBox : 수직으로 구성(세로)

      • HBox : 수평으로 구성(가로)

    • 응용 : 값을 제곱하는 위젯

  • ipywidget + Voila

    • ipywidget에서 Voila를 클릭하면 렌더링이 된 화면을 볼 수 있음

출처: 부스트캠프 AI Tech 4기(NAVER Connect Foundation)

Comments