Tech Stack/MLflow (10) 썸네일형 리스트형 MLOps - FastAPI 서빙 API - 애플리케이션 프로그래밍 인터페이스 - 컴퓨터나 컴퓨터 프로그램 사이의 연결 - 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다. FastAPI 빠르게 API를 만듦 모던하고 빠르다. pip install "fastapi[all]" 모든 의존성을 설치 (myenv) (base) dinoqos@jangjeong-uui-MacBookAir 07_api_serving % uvicorn fastapi_tutorial:app --reload --host 0.0.0.0 docs로 받는 값을 확인 가능 path 파라미터 qurey 파라미터 path 파리미터 qurey 파라미터 차이 path는 주소에서 입력 qurey는 바디에 값을 넣어서 실행 데이터 스키마 입력출력을 조금 더 체계.. MLOps - 배치서빙 배치서빙 특정 모델을 배치서빙 파이프라인에 넣어 예측값을 받아옴 시간이나 일단위는 Batch 1초 이하는 realtime serving 배치 데이터 생성 # # upload data to minio # bucket_name = "not-predicted" object_name = datetime.now().strftime("%Y-%m-%d %H:%M:%S") if not client.bucket_exists(bucket_name): client.make_bucket(bucket_name) client.fput_object(bucket_name, object_name, "batch.csv") 이전에 진행한것처럼 진행. object의 이름은 올린 시간 분 초로 한 후 데이터를 업로드 없다면 버킷을 만들고 업.. MLOps - 모델 저장 학습된 모델을 Model.dill로 저장 모델저장소 학습이 완료된 모델을 저장 실험관리 + 파일 MLflow에서 기본적으로 지원해주지 않기 때문에 추가적으로 opensource를 사용 MLflow 아키텍처 1. Backend Store (Remote host) 수치 데이터와 MLflow서버의 정보들을 체계적으로 관리하기 위한 DB 저장항목 1. 메타데이터 2. 모델에 관한 정보 3. 학습 중 생기는 정보 2. Artifact Store (S3 remote host) 학습된 모델을 저장하는 Model Registry로써 이용하기 위한 스토리지서버 Artifact Store를 이용하면 기본적인 파일 시스템 보다 체계적으로 관리 할 수 있으며 외부에 있는 스토리지 서버도 사용 할 수 있다는 장점 모델저장소 구.. MLOps - 데이터 Data drift 예시 - 더 이상 유행x상품 - 새로 유행하는 상품 - 장비에서 생산하는 직업의 변경 - 기기의 고장 지속적인 재학습 - real world에서는 데이터가 계속 변화 - 그래서 한번 개발 뒤 계속 같은성능 x - 변화하는 데이터에 맞춰서 모델 재학습 Data versioning을 통해 데이터도 실험관리가 필요 Minio 구축 docker run -p 9000:9000 -p 9001:9001 \ -e MINIO_ROOT_USER=minio \ -e MINIO_ROOT_PASSWORD=miniostorage \ minio/minio \ server /data/minio --console-address :9001 -p API 통신용 포트 9000:9000 web UI 용 포트 9001:90.. MLOps - 교차검증 최적의 파라미터 확인방법 test / valid split valid에서 과적합 가능 k-fold Cross Validation 3개의 평균값을 Average metric 으로 overfiting방지 최종모델은 학습과 평가 데이터를 나누기 전에 전체데이터를 이용해 학습한 모델을 선택 최종 모델은 전체데이터 = 최적의 파라미터를 활용해서 최종모델 도출 def train_best_model(params): run_name = f"{UNIQUE_PREFIX}-best-model" with mlflow.start_run(run_name=run_name): # # log parameter # mlflow.log_params(params) # # load data # iris = load_iris(as_frame=.. MLOps - HPO 반영 chart view로 확인 5개 항목 선택 후 Compare 클릭 후 그래프 확인 그런데 train.py를 통해 다시 실행하게 되면 일관성없이 그냥 겹쳐버려 어떠한 실험인지 확인이 어려움 다음과같이 런네임을 지정 하나의 프리픽스도 지정해서 trial값을 보며 최대한 같은 값이 나오지 않게 해줌 확인 할 수 있음 MLOps - Optuna objective 함수 작성 --> 스터디 생성 --> 파라미터 탐색 pip install optuna def objective(trial): trial.suggest_int("n_estimators", 100, 1000, step=100) trial.suggest_int("max_depth", 3, 10) trial이라는 값을 받아서 suggest라는 함수를 사용할 수 있음 파라미터 이름을 주고 그것에 대한 범위를 줌 # # train model # clf = RandomForestClassifier( n_estimators=trial.params["n_estimators"], max_depth=trial.params["max_depth"], random_state=2024 ) clf.fit(X_tra.. MLOps - Hyperparameter Optimization Hyperparameter Optimization란? (HPO) 주어진 목적 함수를 최대/최소화 하는 최적의 파라미터 탐색하는 행위 최대화 정확도 F1-Score 최소화 MAE MSE 최적의 파라미터를 탐색 알고리즘 Grid SEarch Random Search Bayesian Search ... grid 격자로 최적의 파라미터 10~100범위 10 20 30 40 실험 진행 단점 : 제일 성능이 좋은 범위를 벗어 날 수 있음 random 난수를 추출 처음에는 grid를 활용해 가장 값이 높은 범위를 탐색 2~3으로 줄임 2와 3 사이에서 random하게 해서 가장 좋은 값을 찾음 1. grid 2. random HPO 라이브러리 HPO를 효율적으로 진행하기 위해 1. 적절한 파라미터 후보군 추출 OPT.. 이전 1 2 다음