[level3 DAY 85~90] Product Serving(2)

먼지감자·2021년 12월 11일
0

AI Boostcamp 2기

목록 보기
48/48
post-custom-banner

강의 내용 복습

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

2.1 프로토타이핑 - Notebook 베이스(Voila)

  • Voila
    예시 https://voila-gallery.org/
    voila의 원래 목적 : 대시보드. ex) R의 Shiny, python의 Dash
    Notebook에서 별도의 코드 추가 없이 실행할 수 있는 점이 Voila의 강점
    노트북 파일만 만들면 프로토타입은 쉽게 만들 수 있음

    • 장점
      1) Jupyter Notebook 결과를 쉽게 웹 형태로 띄울 수 있음
      2) Ipywidget, Ipyleaflet 등 사용 가능
      3) Jupyter Notebook의 Extension 있음(=노트북에서 바로 대시보드로 변환 가능)
      4) Python, Julia, C++ 코드 지원
      5) 고유한 템플릿 생성 가능
      6) 너무 쉬운 러닝커브

      <설치방법>
      jupyter lab 쓴다는 가정하에 진행

    1. nodejs 설치 or update
      jupyter lab의 Extension 기능을 사용하기 위해 nodejs 기본적으로 설치해야함
      sudo apt install nodejs
      설치 중 아래와 같은 오류가 뜬다면 nodejs update 필요
      ValueError: Please install nodejs 5+ and npm before continuing installation. nodejs may be installed using conda or directly from the nodejs website.

      nodejs update
      sudo apt install npm
      node -v 버전확인
      sudo npm cache clean -f 캐시삭제
      sudo npm install -g n nodejs 버전 관리 플러그인 (n) 설치
      sudo n lts nodejs의 LTS 버전 (v14.17.0) 설치 , n stable, n latest 명령어로 원하는 버전 설치 가능

출처: https://kibua20.tistory.com/184 [모바일 SW 개발자가 운영하는 블로그]

  • tip
    voila 노트북 사용하지 않을 때 자동으로 종료 : voila voila_basic.ipynb --MappingKernelManager.cull_interval=60 -- MappingKernelManager.cull_idle_timeout=300
    하나의 cell 이 30초 이상 진행되면 타임아웃 에러 발생하므로 voila 실행 시 무거운 연산을 위해 타임아웃 제한 늘리기 : voila --ExecutePreprocessor.timeout=180
    웹 형태이므로 보안을 신경쓰기 - 암호 입력
  • ipyiwdjet
    인터렉티브한 효과 줄 수 있음
    IntSlider, FloatSlider, Text Widget, Boolen Widget, Selection Widget, Upload Widget, Widget Events(on_click), Widget Events(observe)

Special Mission

  • 1) Jupyter Notebook으로 만든 마스크 분류 모델을 Voila로 띄워보기
  • 2) ipywidget 공식 문서 읽어보기
  • 3) 데이터 시각화 파트에서 배운 내용과 ipywidget을 사용해 인터랙티브한 대시보드 만들기

2.2 프로토타이핑 - 웹 서비스 형태(Streamlit)

  • Streamlit / docs
    자바스크립트, React, Vue 등을 사용해 프로토타입을 만드는 것은 시간 효율적이지 않음
    처음부터 HTML/자바스크립트 + Flask/Fast API가 아닌, 기존 코드를 조금만 수정해서 웹서비스를 만드는 것이 목표
    다른 조직의 도움 없이 빠르게 웹 서비스를 만드는 방법 : Streamlit
    • Streamlit 의 대안
      1) R의 Shiny
      2) Flask, Fast API : 백엔드를 직접 구성 + 프론트엔드 작업도 진행
      3) Dash : 제일 기능이 풍부한 Python 대시보드 라이브러리
      4) Voila : Jupyter Notebook을 바로 시각화 가능
    • 장점
      파이썬 스크립트 코드를 조금만 수정하면 웹을 띄울 수 있음
      백엔드 개발이나 HTTP 요청을 구현하지 않아도 됨
      다양한 Component 제공해 대시보드 UI 구성할 수 있음
      Streamlit Cloud도 존재해서 쉽게 배포할 수 있음(단, Community Plan은 Public Repo만 가능)
      화면 녹화 기능(Record) 존재
    • 설치
      pip install streamlit
    • Components
      Text 작성(Title, Header, Write), Button, Pandas Dataframe, Markdown, JSON, chart 등
      cheat sheet
    • Data Flow
      Streamlit의 화면에서 무언가 업데이트되면 전체 Streamlit 코드가 다시 실행
      1) Code가 수정되는 경우
      2) 사용자가 Streamlit의 위젯과 상호작용하는 경우(버튼 클릭, 입력 상자에 텍스트 입력시 등)
      --> Session State
    • Streamlit의 Data Flow로 인해 매번 코드가 재실행되며 중복 이벤트를 할 수 없음
    • Global Variable 처럼 서로 공유할 수 있는 변수가 필요
    • Streamlit 0.84 버전에 session_state가 개발됨
  • Cache - @st.cache
    매번 다시 실행하는 특성 때문에 데이터도 매번 다시 읽을 수 있음
    이런 경우 @st.cache 데코레이터를 사용해 캐싱하면 좋음(캐싱 : 성능을 위해 메모리 등에 저장하는 행위)
    데이터를 읽는 함수를 만들고, 데코레이터를 적용

Special Mission

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

2.3 Linux & Shell Command

  • Linux
    서버에서 자주 사용하는 OS
    Free, open source
    안정성, 신뢰성. 유닉스라 Stability, Reliability
    쉘 커맨드, 쉘 스크립

    • 배포판
      Debian, Ubuntu, Redhet, CentOS

    • 사용 방법
      VirtualBox에 Linux 설치, Docker로 설치
      WSL 사용(윈도우)
      Notebook에서 터미널 실행
      cloud 인스턴스에서

  • Shell
    사용자가 문자를 입력에 컴퓨터에 명령할 수 있도록 하는 프로그램
    // 터미널/콘솔 : 쉘을 실행하기 위해 문자 입력을 받아 컴퓨터에 전달

    sh, bash, zsh

    • shell 사용하는 경우
      서버에서 접속 시
      crontab등 linux내장기능 활용
      쉘 커맨드를 사용한 데이터 전처리
      Docker 사용
      배포 파이프라인 실행 (Github Action 등에서 실행)
    • 표준 스트림
      Unix에서 동작하는 프로그램은 커맨드 실행시 3개의 Stream이 생성
      stdin : 0으로 표현, 입력(비밀번호, 커맨드 등)
      stdout : 1로 표현, 출력 값(터미널에 나오는 값)
      stderr : 2로 표현, 디버깅 정보나 에러 출력
    • Redirection & Pipe
      Redirection : 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달
      > : 덮어쓰기(Overwrite) 파일이 없으면 생성하고 저장
      >> : 맨 아래에 추가하기(Append)
      Pipe : 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우
      현재 폴더에 있는 파일명 중 vi가 들어간 단어를 찾고 싶은 경우
      ls | grep “vi”
    • 서버에서 자주 사용하는 쉘 커맨드
      ps-현재 실행되고 있는 프로세스 출력하기
      curl-Request를 테스트할 수 있는 명령어
      df-현재 사용 중인 디스크 용량 확인
      scp-SSH을 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어
      nohup-터미널 종료 후에도 계속 작업이 유지하도록 실행(백그라운드 실행),nohup으로 실행될 파일은 Permission이 755여야 함
      chmod-파일의 권한을 변경하는 경우 사용
    • 쉘 스크립트
      쉘 커맨드의 조합
      .sh 파일을 생성하고, 그 안에 쉘 커맨드를 추가
      파이썬처럼 if, while, case 문이 존재하며 작성 시 bash name.sh로 실행 가능

2.4 Cloud

  • Cloud
    웹, 앱 서비스를 만드는 경우 확장성, 사용성, 시간/비용 등의 제약사항을 해결해주는 서비스

    • 다양한 제품
    1. Computing Service(Server): 연산을 수행하는(Computing) 서비스 / 가상 컴퓨터, 서버 / CPU, Memory, GPU 등을 선택할 수 있음

    2. Serverless Computing: Computing Service와 유사하지만, 서버 관리를 클라우드쪽에서 진행
      코드를 클라우드에 제출하면, 그 코드를 가지고 서버를 실행해주는 형태

    3. Stateless Container: Docker를 사용한 Container 기반으로 서버를 실행하는 구조
      Docker Image를 업로드하면 해당 이미지 기반으로 서버를 실행해주는 형태

    4. Object Storage: 다양한 Object를 저장할 수 있는 저장소 / API를 사용해 데이터에 접근할 수 있음

    5. Database(RDB): 클라우드에서 제공하는 Database / 웹, 앱서비스와 데이터베이스가 연결되어 있는 경우가 많으며, 대표적으로 MySQL, PosgreSQL
      등을 사용할 수 있음

    6. Data Warehouse: 데이터 분석에 특화된 Database, Database에 있는 데이터, Object Storage 에 있는 데이터 등을 모두 모아서 Data Warehouse에 저장

    7. AI Platform: AI Research, AI Develop 과정을 더 편리하게 해주는 제품

      회사 : AWS, GCP, Azure

  • Google Cloud Platform
    첫 가입시 $300 크레딧 제공
    Tree Tier : 무료 사용이 가능한 범위
    https://cloud.google.com/free


2.5 Github Action CI/CD

  • CI/CD
    local : 각자 컴에서 개발 , 환경 통일을 위해 Docker사용
    Dev : Local에서 개발한 기능을 테스트할 수 있는 환경, Test 서버
    Staging : Production 환경에 배포하기 전에 운영하거나 보안, 성능 측정하는 환경 | Staging 서버
    Production : 실제 서비스를 운영하는 환경 | 운영 서버

    • Git Flow
      main -> staging -> dev -> feature/기능이름
  • Github Action
  • Mask Classification Streamlit 배포하기

과제 수행 과정 및 결과

streamlit 을 사용한 프로토타입 만들기


피어 세션

최종 프로젝트 기획 및 구현 진행


학습 회고

.

profile
ML/AI Engineer
post-custom-banner

0개의 댓글