본문 바로가기
딥러닝 어쩌구/연구일지&디버깅

streamlit: 연구 주간보고 미팅용 시각화 툴

by 포숑은 맛있어 2023. 5. 8.
반응형

streamlit 자체의 사용법은 구글링하여 참고.

여기서 다루려는건 외부접속에 관한 얘기다.

 

개요

streamlit 사용하면 외부 ip를 줘서 아무데서나 접속이 가능하다.

이거 미팅할 때 웹서버 하나 visualization으로 띄워놓고 쓰면 좋을 것 같아서 쓰려고 한다.

그런데 docker container에서 streamlit이 되나?

 

방법

환경

- 우분투 서버 사용중, 디스플레이 없음

- 미팅때 사용하는 컴퓨터는 별개의 노트북, 서버와 관련이 없음

- streamlit 실행중이면 외부 ip와 포트 할당해서 실행시켜준다. 당연히 끄면 사라짐.

- 그래서 도커 사용해서 돌려놓음

- 컨테이너 생성할때 포트포워딩 해줘야함

 

참고

- https://docs.streamlit.io/knowledge-base/tutorials/deploy/docker 따라해보자

- 저기 나온건 ip 포트 바꿔야하고 당연한거지만 본인이 visualization할 코드도 새로 짜야함

 

1. 도커 이미지 빌드

# app/Dockerfile

FROM python:3.9-slim

WORKDIR /app

RUN apt-get update && apt-get install -y \
    build-essential \
    curl \
    software-properties-common \
    git \
    && rm -rf /var/lib/apt/lists/*

RUN git clone https://github.com/streamlit/streamlit-example.git .

RUN pip3 install -r requirements.txt
RUN pip3 install opencv-python-headless

EXPOSE 8502

HEALTHCHECK CMD curl --fail http://localhost:8502/_stcore/health

ENTRYPOINT ["streamlit", "run", "visualization 실행할 코드의 도커 내 경로", "--server.port=8502"]

위 내용을 Dockerfile이라는 이름으로 생성 후 아래 빌드 명령어 실행.

 

docker build -t streamlit .

 

 

2. 도커 컨테이너 생성

외장하드 쓰고있어서 마운트 해줬다.

 

docker run --gpus='~~~' --init --rm --name streamlit -p 8502:8502 -v $(pwd):/workspace -it streamlit:latest

 

 

실행하면 접속가능한 ip주소가 알아서 뜬다.

그거 복사해서 텐서보드 들어가는 것 처럼 크롬 브라우저에 붙이면 된다.

끝!

 

 

장점

이제 슬라이드에 귀찮게 캡쳐하고 옮길 필요가 사라졌다. 이 컨테이너만 살아있으면 접속 될테니까.

게다가 이대로 전부 냅두고, 작성한 코드만 수정하면 다시 빌드하거나 실행하는 등 추가작업 없이 바로 반영되어 웹에 뿌려진다!

이젠 주간보고 미팅 시작 10분전에 부랴부랴 결과 나온거 긁어다가 슬라이드로 만들 필요가 없을 것 같다

 

streamlit에 굉장히 많은 기능이 구현되어있는 것 같으니 한번 익혀두면 좋을 것 같다.

 

 

자주 쓰는 것

체크박스

- 출력할 내용이 많을때 접기/펼치기 비슷한 기능을 구현하기 위함

- https://discuss.streamlit.io/t/hide-collapse-fold-a-section/1579/7   

 

동영상 재생

 

도커 이미지 수정하기

  1. 도커 파일 수정
  2. docker build -t streamlit .
  3. 재실행
    docker run --gpus='device=3' --init --rm --name streamlit -p 8502:8502 -v $(pwd):/workspace -it streamlit:latest
  4. 혹시 포트 사용중이라고 하거나 ip 바뀌거나 하면 도커 파일에다가 수정해서 넣어주자

 

 

이제 벌써 6월인데 너무너무 잘쓰고 있다.

기본 구현은 다른 코드에서 하고, 자잘한 시각화라든가 데이터 분석하고 그런걸 여기 물려놓으니 넘 편함.

조만간 코드 리팩토링을 해야할 것 같긴 하다. 시각화를 편하게 하기 위해 만들어둔 함수들, 각각 데이터 분석관련, 시각화 등등 파일 나눠야겠음... 이 파일 하나에 코드가 1천줄 넘어감;

반응형

댓글