Boostcamp AI Tech 4기 11월 9일 학습정리 : AI 서비스 개발 기초 3 (6강, 실습)

유상준·2022년 11월 9일
0
post-thumbnail

6강 - Streamlit(웹 서비스 형태)

프론트엔드쪽에 시간 투자를 덜 하면서, 웹 서비스를 만들 수 있게끔 도와주는 Streamlit

Python script에 몇개의 API를 추가 하여 빠르게 웹 서비스를 구현할 수 있음

Voila : Notebook형태에서 빠르게 작업할 수 있다는 장점

Streamlit : 다른 조직의 도움(프론트엔드, 백엔드) 없이 빠르게 웹 서비스를 만들 수 있다는 장점

Streamlit의 대안

  • R의 Shiny
  • Flask, Fast API : 웹 개발 직접 진행, 프론엔드, 백엔드 작업을 직접 구성
  • Dash : 기능이 풍부하지만 python의 대시보드 라이브러리로, 사용방법을 익혀야함
  • Voila : Notebook 파일에서 바로 시각화 가능(Layout 짜기가 어려움)

Streamlit 장점

  • 파이썬 스크립트 코드에서 조금만 수정하면 웹으로 띄우기 가능
  • 백엔드, HTTP 요청 구현하지 않아도 괜찮음
  • 다양한 Component 제공하여 대시보드의 UI를 구성할 수 있음
  • Streamlit Cloud를 활용한 쉬운 배포 가능
  • 화면 녹화 기능 존재

Streamlit Gallery에서 대쉬보드 레이아웃 참고 가능

https://streamlit.io/gallery

Streamlit 명령어들
(cheat sheet : https://daniellewisdl-streamlit-cheat-sheet-app-ytm9sg.streamlit.app/)

  • st.title(), st.header()등의 명령어로 마크다운 형식에 맞게 text 작성 가능
  • st.button(), st.checkbox()등의 명령어로 버튼, 체크박스 생성 가능
  • st.write() 명령어는 보여줄 수 있는 모든 것을 보여줌 (text, data frame, …)
  • st.line_chart() 명령어는 간단한 line plot도 그려준다
  • st.map() 명령어는 위도, 경도 상에서 시각화가 가능하게 해준다
  • st.radio(), st.selectbox()는 voila와 비슷하게 동작한다 (설문조사에서 사용자가 선택할 수 있게 해주는 것들)
  • st.sidebar : 여러 메서드 앞에 sidebar를 붙여주면, Side bar에 해당 레이아웃을 추가할 수 있음
  • st.spinner() : 연산이 진행되는 도중 메세지를 보여주고 싶은 경우 사용
  • st.balloons() :
  • st.form() : 유저 아이디, 패스워드등을 통해 로그인 페이지를 만들 수 있음

Session state에 대해서

Streamlit 화면에서 아무거나 업데이트 되면 전체 코드가 다시 실행 된다. 따라서 카운팅과 같은 동작 구현하기 어렵다.
ex) Code를 수정했을 경우나, 사용자가 위젯을 이용하여 streamlit과 상호작용 하는 경우(버튼 클릭 등) 초기화가 되기 때문에 원하는 횟수만큼 카운팅 할 수 없게 된다 (카운팅을 하려고 버튼을 클릭하면 카운팅 기록할 변수 초기화)

st.session_state.변수명 을 이용하여 global한 변수를 만들어주고 실행을 하면 처음부터 다시 실행이 되어도 중복 이벤트나 카운팅을 하는 것이 가능해진다.

session_state 가 없을 때

session_state가 있을 때

Special Mission

  1. Jupyter Notebook으로 만든 마스크 분류 모델을 Streamlit으로 띄워보기
  2. Streamlit 공식 문서 읽고 정리하기
  3. st.slider가 변할 경우(on_change) Callback 함수를 사용해서 session_state 값을 유지하는 코드 만들기
  4. CV/NLP/RecSyc에서 진행한 프로젝트 Streamlit으로 띄워보기

Streamlit 실습

디버깅 해결 과정

  1. numpy 때문에 특정 library가 pip install로 실행되지 않는 경우
  2. streamlit run app.py 실행했을 때, 실행되지 않는 경우

0. 환경설정

  1. conda 가상 환경상에서 requirement.txt 에 있는 module들을 모두 최신버전으로 install 한다.(conda install 추천)
    이 때, streamlit 만 1.1.0버전으로 install 한다. 왜냐하면, click 모듈의 버젼이 강의코드와 다르기 때문에 일부 호환성 문제가 있는 것 같아 보인다.

1. numpy 때문에 특정 library가 pip install로 실행되지 않는 경우

  1. numpy를 conda install로 설치해준다
  2. 설치 되지 않던 library도 conda install로 설치해준다 (ex) matplotlib==3.2.1)
  3. pip install이 되지 않는 library는 conda install로 설치해주면 된다

2. streamlit run app.py 실행했을 때, 실행되지 않는 경우

  1. streamlit run test.py --server.port=30001 명령어를 통해 실행한다 (local에서는 문제 x, ssh 원격 서버에서는 문제 발생)
  2. OSError: [Errno 28] inotify watch limit reached 에러가 발생하면,
    streamlit run test.py --server.port=30001 --server.fileWatcherType none 명령어를 통해 실행한다. (https://so-es-immer.tistory.com/m/entry/streamlit-error-raise-OSErrorerrnoENOSPC-inotify-watch-limit-reachedOSError-Errno-28-inotify-watch-limit-reached-해결방법)

Streamlit으로 프로토타입 만들기

To-do list

  • Streamlit.App 만들기
  • Volia 코드 리팩토링하기 (app.py, model.py, predict.py, utils.py)
  • File Uploader 구현
  • 이미지 view
  • 예측 결과 출력
  • 암호 입력

느낀점

환경설정이 굉장히 어렵고 주어진대로만 해서는 무조건 에러가 발생한다. 이전 voila 실습 때부터 느낀건데, 오늘 마스터 클래스에서 변성윤 마스터님의 설명을 듣고는 어느정도 의도한 바가 있었음을 알게 되었다.
실제 자주 발생하는 에러들을 미리 겪어 봄으로써 해결 방법에 대해 고민하게 되고, 경험하게 되면 나중에는 반드시 이득이 될 것이라고 하셔서 에러에 대해 짜증을 내기보다는 배운다는 느낌으로 인내의 시간을 보냈다.
또한, 원래 에러를 해결하면 그 방법을 잘 기록하지 않았던 (상당히 거만했던) 습관이 있었는데, 어떤 에러가 왜 발생하는지 그 때에는 나름 잘 이해하고 넘어가도 나중에 같은 에러이지만 해결하지 못할 수도 있다는 생각이 들어서 이제부터는 디버깅에 성공하면 간략하게라도 이해한 바를 적어보려고 한다.


위 게시글의 내용은 Boostcamp AI Tech 4기 강의내용(변성윤 마스터님)을 참고하여 작성하였습니다.

profile
데이터 사이언티스트 지망생

0개의 댓글