Code Monkey home page Code Monkey logo

anomaly-factory's Introduction

Anomaly-Factory : Production-Ready End-to-End MLOps Project

using_mlops_tools

  • 이상 탐지 모델의 데이터 수집부터 모델 배포에 이르는 라이프사이클을 구축하고 관리합니다.
  • 사용자는 준비된 데이터를 활용해 모델 학습과 비교를 자동화할 수 있습니다.

목표 및 진행상황

  • CICD
    • (1주차) 작성한 코드의 품질을 검증합니다.(pre-commit)
  • Feature Store
    • 학습에 활용하기 위해, 원시 데이터에서 유의미한 Feature를 추출합니다.
    • (Feast) 추출한 Feature를 학습에 재현 가능하도록 특성 저장소(Feature Store)를 구성합니다.
  • Versioning
    • (DVC) 학습에 사용된 데이터의 버전을 관리합니다.
    • (MLflow) 선정된 최적 모델을 재사용할 수 있도록 Registry를 구성합니다.
  • Experiment Tracking
    • (Sklearn) API에 배포할 모델을 학습합니다.
    • (MLflow) 하이퍼파라미터 튜닝을 통한 최적 모델을 학습을 자동화합니다.
  • Serving
    • (1주차) (FastAPI) 모델을 API로 배포합니다.
    • (BentoML) 모델을 로컬에서 API로 배포합니다.
    • (BentoML) 모델을 네이버 클라우드 서비스를 활용한 API로 배포합니다.
  • Monitoring
    • (EvidentlyAI) 신규 데이터에 대한 모델의 예측 성능을 모니터링합니다.

프로젝트 아키텍처 (사용하는 DB 등 외부 컴포넌트 , 외부 API 연동 등)

  • DB : Google Drive
    • Naver Cloud Object Storage는 DVC에서 지원하지 않으므로 제외합니다.

Requirements

python = "^3.10"
pre-commit = "^3.6.0"

설치 및 실행 방법

  • API 서버를 실행하여 사용자가 배열로 이루어진 쿼리를 입력, 결과값을 받을 수 있게 구성합니다.

anomaly-factory's People

Contributors

tyjeon24 avatar f-lab-bot avatar

Watchers

 avatar  avatar

anomaly-factory's Issues

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

요약

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

목표

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

상세

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

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 모델로 배포합니다.

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

요약

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

목표

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

상세

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

참고자료

streamlit 코드를 multipage 형태로 분리

요약

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

목표

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

상세

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 오류인지 이미 사용중인 포트 오류인지 다른 오류인지 판단이 어렵습니다.

도커 컴포즈 파일 생성

요약

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

목표

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

상세

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

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 배포 방법 변경 후 작업 예정

pre-commit hook 구성

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

xgboost 및 mlflow를 활용한 experiment tracking 구현

목표

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

상세

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.