Giter Site home page Giter Site logo

anomaly-factory's People

Contributors

f-lab-bot avatar tyjeon24 avatar

Watchers

 avatar  avatar

anomaly-factory's Issues

scikit-learn 및 FastAPI 기반 모델 배포 기능 구현

목표

  • 로컬 환경에서 접근할 수 있는 scikit-learn API 모델을 구축한다.
  • 사용자는 127.0.0.1:포트로 서비스에 접근하여, 신규 데이터에 대한 분류 결과를 확인할 수 있다.

상세

  • 데이터 : sklearn.datasets.load_iris의 load_iris를 사용한다.
    • Naver Cloud 신청 완료 전까지는 load_iris로 FastAPI의 작동 상태 확인 후, 대용량 데이터셋에 대해 적용 예정
    • 후보 데이터 1 : Large-scale Energy Anomaly Detection (LEAD)
      • 데이터 1GB 이상이며 레이블 있음(분류 모델 metric 적용 가능)
  • 모델 : scikit-learn에서 지원하는 RandomForestClassifier 모델을 사용한다.
    • 다른 모델의 추가는 BentoML로 API 배포 방법 변경 후 작업 예정

도커 컴포즈 파일 생성

요약

  • 추후 간편하게 환경을 구축하기 위해, dockerfile 및 docker-compose.yml 파일을 작성합니다.

목표

  • 도커 컴포즈 파일을 준비하여, docker compose up 명령어로 streamlit 환경을 로컬 환경에서 실행할 수 있습니다.

상세

  • 현재 프로젝트가 작동하기 위해 여러 서비스가 동시에 작동해야 합니다.
  • streamlit : 유저 인터페이스. 8501번 포트
  • mlflow : experiment tracking, 5000번 포트
  • redis : pubsub 기능, 6379번 포트
  • 프로젝트를 실행해보려는 사람이 이 서비스를 동시에 준비하기는 번거롭기 때문에, 도커 환경을 준비하여 쉽게 활용할 수 있도록 합니다.

Redis 기반 콜백 핸들링 기능 구현

요약

  • 기존 Optuna와 Streamlit 사이의 파라미터 튜닝 정보 교환을 Redis 기반 이벤트 핸들링 패턴으로 구현합니다.

목표

  • Redis 서버를 설치합니다.
  • Redis 기반 pub/sub 패턴을 구현하여 file watching 기반 UI 업데이트 코드를 변경합니다.
  • 이를 통해 file watching 기반 업데이트에서 파일 이름이 겹치거나, 파일이 삭제되지 않는 문제를 해결합니다.

상세

  • 모델 튜닝이 진행되는 동안 output.json 파일을 스레드에서 읽고, streamlit이 읽은 내용을 화면에 출력하고 있습니다.
  • bust waiting을 사용하는 대신, Redis를 활용한 publish–subscribe 패턴을 구현합니다.

참고자료

config.py를 pydantic_settings로 재구현하여 변수 타입 검증 기능 추가

요약

  • pydantic_settings로 기존 config.py에 정의된 변수를 재작성합니다.

목표

상세

  • config.py를 어떻게 pydantic_settings에서 접근할 수 있게 할지 정해야 합니다.
    • config.py의 변수를 환경 변수로 입력하여 BaseSettings로 받기
    • config.toml 확장자로 변경하여 SettingsConfigDict 메서드로 받기
    • 기타 다른 방법
  • config.py의 간결한 코드 대신 pydantic_settings 의존성을 추가하려는 이유는?
    • 사용자가 환경 변수 접근 시 생길 수 있는 오류를 사전에 검증하기 위해서입니다.
    • config.py의 설정값은 특정한 맥락에서 사용되는 사전 정의값이며, 사용자가 수정할 때 줄 어떠한 타입 힌트도 제공되지 않습니다.
    • 이러한 상황에서 잘못된 자료형이 입력될 경우 에러를 디버깅하기 어려워집니다.
    • 예) streamlit 포트를 5000이 아닌 "5000"(문자열)로 입력한 경우, streamlit 오류인지 이미 사용중인 포트 오류인지 다른 오류인지 판단이 어렵습니다.

streamlit 코드를 multipage 형태로 분리

요약

  • #13 기능이 선행되어야 합니다.
  • streamlit 코드를 멀티 페이지로 분리하고, 파일 계층을 다시 설정합니다.

목표

  • 각 단계 별 컴포넌트를 별도 파이썬 파일로 분리합니다. (page_one.py, page_two.py 등)

상세

Streamlit ui에 파일 업로드 기능 추가

요약

  • Streamlit ui가 파일 업로드를 받을 수 있도록 구성하여, 사용자 업로드 데이터에 대한 모델 학습을 지원합니다.

목표

  • 파일 업로드 기능을 추가하여 첫 페이지에서 사용할 수 있게 합니다.

상세

  • 사용자로부터 csv, xlsx, parquet 파일을 업로드받습니다.
  • 파일이 위 세 형식인지 확인합니다.
  • 파일을 읽어오는 중 오류 발생 시 오류 내용을 출력합니다.

예시 코드

# https://docs.streamlit.io/library/api-reference/widgets/st.file_uploader
import streamlit as st
import pandas as pd

uploaded_file = st.file_uploader("Choose a file")
if uploaded_file is not None:
    dataframe = pd.read_csv(uploaded_file)
    st.write(dataframe)

Streamlit UI로 Mlflow 및 BentoML 기능 통합 제공

요약

  • Streamlit 패키지와 MLflow 패키지를 통합하여 사용자가 모델을 생성할 수 있는 UI를 제공합니다.

상세

  • 아래 과정을 UI로 구성합니다.
  1. 사용자는 데이터를 업로드합니다.
  2. 업로드된 데이터에서 target 컬럼을 선택합니다.
  3. 최적화할 모델을 선택합니다.
  4. MLflow를 통해 모델을 학습합니다.
  5. 학습된 모델을 다운로드받거나, Github 모델로 배포합니다.

xgboost 및 mlflow를 활용한 experiment tracking 구현

목표

  • 하이퍼파라미터를 튜닝하여 모델을 학습하는 과정을 자동화하는 코드를 작성합니다.
  • 사용자는 하이퍼파라미터를 직접 수정하지 않고도 최적의 모델을 저장할 수 있습니다.

상세

Streamlit ui에 학습된 모델 다운로드 기능 추가

요약

  • streamlit ui가 파일 업로드를 받을 수 있도록 구성하여, 사용자 업로드 데이터에 대한 모델 학습을 지원합니다.

목표

  • 파일 업로드 기능을 추가하여 첫 페이지에서 사용할 수 있게 합니다.

상세

  • MLflow의 모델 학습이 완료되면 다음 버튼이 활성화됩니다.
  • 다음 버튼 클릭 시 파일 다운로드 버튼을 생성합니다.
  • 학습에 사용된 데이터의 5개 행을 example_file.parquet이라는 이름으로 다운로드 버튼을 생성합니다.
  • 모델 파일, example_file.parquet 파일을 활용한 predict 예제 코드를 함께 출력합니다.

pre-commit hook 구성

  • 프로젝트 진행 전 코드 품질을 유지할 수 있는 pre-commit hook을 구성합니다.
  • pre-commit 패키지는 poetry로 설치합니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.