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
동영상 재생
- 사용 방법 공식 문서: https://docs.streamlit.io/library/api-reference/media/st.video
- 시각화 자료를 위해, cv2를 통해 mp4 파일을 만드는 경우가 많을 것이다. 이 경우 실행이 안될 수 있는데, 그럼 웹에서 재생 가능한 코덱으로 변환이 필요하다.
- 코덱 변환 방법: ffmpeg 사용하여 streamlit visualization 코드 내에서 필요시 ffmpeg을 실행하게 한다.
- https://github.com/streamlit/streamlit/issues/1580 참고
- 한번만 실행하게 하자...
- 나처럼 도커 컨테이너에 물려놓고 사용하는 경우라면 docker image 빌드 시 ffmpeg을 추가해야한다.
도커 이미지 수정하기
- 도커 파일 수정
- docker build -t streamlit .
- 재실행
docker run --gpus='device=3' --init --rm --name streamlit -p 8502:8502 -v $(pwd):/workspace -it streamlit:latest - 혹시 포트 사용중이라고 하거나 ip 바뀌거나 하면 도커 파일에다가 수정해서 넣어주자
이제 벌써 6월인데 너무너무 잘쓰고 있다.
기본 구현은 다른 코드에서 하고, 자잘한 시각화라든가 데이터 분석하고 그런걸 여기 물려놓으니 넘 편함.
조만간 코드 리팩토링을 해야할 것 같긴 하다. 시각화를 편하게 하기 위해 만들어둔 함수들, 각각 데이터 분석관련, 시각화 등등 파일 나눠야겠음... 이 파일 하나에 코드가 1천줄 넘어감;
'딥러닝 어쩌구 > 연구일지&디버깅' 카테고리의 다른 글
Colab, CineScale (0) | 2023.06.26 |
---|---|
(ing) fundamental matrix를 활용하여 이미지 이어붙이기 (1) | 2023.06.01 |
[2022.12.22] 텐서플로우... 버전... 고통... 디버깅... 못함... (0) | 2022.12.22 |
[2022.08.18] 공부 내용 (wandb) (0) | 2022.08.18 |
[mmdetection 에러] 그놈의 mmcv 버전.. (0) | 2022.08.11 |
댓글