MLOps 간단 정리
MLOps 간단 정리

MLOps 간단 정리

설명
MLOps 알아보기
Last Updated
Last updated March 25, 2023
태그
ML
Machine Learning
AI
Artificial Intelligence
MLOps

배경

ML을 제품에 적용하기 위해서는 단순히 모델 만드는것에만 집중하면 되는것이 아니다.
 
개발환경에서 열심히 개발후 모델을 실제 제품에 배포했다 이때 아래와 같은 문제들이 생기기도 한다.
  1. 배포된 모델의 결과값이 이상하다 (예상치 못한 input이나 알 수 없는 오류들...)
  1. Research에선 성능이 좋았는데, Production 환경에서는 과거에 배포한 모델이 더 좋다?
  1. 수요예측모델 운영 중 코로나로 인해 수요가 완전히 변했다. 어떻게 모델을 잘 운영할까?
 
모델링에만 집중하고 싶은데, 모델 운영에 할일이 너무 많다.
ML 시스템의 요소. Hidden Technical Debt in Machine Learning Systems에서 인용됨
ML 시스템의 요소. Hidden Technical Debt in Machine Learning Systems에서 인용됨
 

하면 뭐가 좋지?

  • 성공적으로 ML 프로젝트를 진행하기 위해. 안정적이고 빠르게
  • 머신러닝 모델 개발과 머신러닝 모델 운영에서 사용되는 문제, 반복을 최소화 하고 목표인 비즈니스 가치를 창출하는 것에 집중하자
 

Goals

  • 모델링에 집중할 수 있도록 관련된 인프라를 만들고 자동으로 운영되도록 만드는것이 목표이다.
  • 빠른 시간 내에 가장 적은 위험을 부담하며, 아이디어 단계부터 production 환경까지 ML 프로젝트를 진행할 수 있도록 기술적 마찰을 줄이는것
    • 업데이트된 모델, production의 더 빠른 배포
    • 품질 보증
 

ML 생애주기와 각 step별 MLOps가 필요한 이유

ML 생애주기 애저듣보잡 MLOps 101 에서 인용
ML 생애주기 애저듣보잡 MLOps 101 에서 인용

모델을 만들기전: 문제의 정의, 데이터 수집, 전처리 과정

  • 데이터는 서로 다른 형태, 소스일수 있으며, 이를 전처리하는데 시간이 오래걸린다.
  • 데이터의 품질이 향상될수록 모델의 성능, 품질이 좋아진다.
→ 지속적으로 버전관리하며 데이터 품질에 대해 관리/개선

모델 만들기

  • 다양한 조합으로 적합한 모델을 생성하는 과정
    • feature 생성/선택
    • 알고리즘 선정
    • 하이퍼 파라미터 튜닝
    • 모델 피팅
  • 실패한 모델들도 더 좋은 모델을 위한 중요한 경험이고 이력을 남길 필요가 있다.
→ 코드, 환경, 종속성 관리
 
  • 대부분의 데이터 사이언티스트는 사소한 튜닝 이외의 단계를 반복하게 된다.
→ 재활용가능한 ML파이프라인을 통해 ML lifecycle checkpoint 처럼 사용할수 있게 된다.

모델을 만든 이후: 검증, 평가, 배포/운영, 재학습/배포

  • 모델을 만든 이후, 검증, 평가, 서비스화(배포/운영), 모니터링 후 재학습/배포
 
  • 사용자 또는 응용프로그램에 배포하는 과정
  • 배포전에 기술적, 비즈니스적인 유효성 검토가 필요함
  • QA단계 필요. 개발환경에서 test, 알파/베타 test
  • 성능, 응답시간 등의 성능 지표 관리 필요
→ 자동화된 평가, 테스트, 컨테이너 빌드/배포, 모니터링
 
  • 모델 Drift (ex 비즈니스 요구 변경에 의해 모델 변경이 필요할수 있다.)
  • 데이터 Drift (ex 신제품, 시즌, 소비자 선호도 변경 등)
→ 자동화된 트리거로 model retraining
 

Components

모델 Searving

개발된 모델을 Production 환경에서 사용할수 있도록 배포해야한다.
  • Batch Serving: 많은 양을 한번에 일정주기로 전달
    • Airflow, Cronjob등으로 스케줄링 작업
    • 학습/예측을 별도의 작업으로
    • 간단하게 하기 좋다.
  • Online Serving: API로 요청시 올때마다, 모델을 전달. 동시에 여러 요청이 있을때를 고려해야함
    • flasks, fast API → Docker → kubernates → Serving 프레임워크 사용
    • Kubeflow, BentoML, tenserflow/serving 등등
 
  • 처음부터 API형태로 Serving 해야하는 것은 아니고 상황에 따라 선택
    • 서버와 꼭 실시간 통신이 필요한게 아니라면 최초에 Batch serving을 구축하는 것도 좋다.
    • Batch serving 결과를 DB에 저장하고 그 데이터를 주기적으로 가져가는 방식으로
      • 제품에 대한 추천 결과를 저장해 놓고 주기적으로 업데이트
 
  • Serving 라이브러리는 점점 간단한 코드만 작성하면 Docker Image를 명령어 하나로 만들 수 있는 기능을 지원 ex) BentoML
notion image
 
 

Experiment, Model Management

  • 모델 개발시 파라미터와, 모델구조에 대해 여러가지 시도를 할 것이다.
  • 성능이 가장 좋은 모델을 사용하기 위해, 이를 기록해두는게 필요하다.
    • 모델 아티팩트(학습하는 과정에서 생기는 이미지, 모델 파일), 이미지파일, 학습코드, 학습모델 피클 파일 등
    • 모델별 생성일, 성능등에 모델 metadata 대한 기록도 필요
  • 기록을 쉽게하고, 편하게 볼수있도록 모니터링 대시보드가 필요하다.
  • Weight&Bias, Neptune, MLflow 등
 
  • 리서치 환경에서 가장 좋은것들을 선택해서 Serving 할수있어야 한다.
    • 룰 기반으로 모델을 선택할수 있으면 더 좋ㅇ다.
notion image
 
 

Feature Store

  • 여러 모델을 운영하는 경우, 중간의 겹치는 것들을 미리 셋팅해 놓고 피쳐화, 이러한 머신러닝 피쳐를 집계한 피쳐스토어
  • Reserach와 Procution에서도 같이 사용할수있도록 구성
  • 프로덕션에서도 실시간 데이터를 빠르게 받을 수 있도록
  • 재사용 가능하게 만들어 시간, 비용 절약
 
  • Batch단위로 쿼리를 실행해 DB Table에 저장하고, 해당 Table을 Feature Store로 사용
  • 실시간 데이터를 Feature Store로 구성
    • 오픈소스: Feast, Hiosworks
    • SegeMaker feature store(Amazon), Vertex AI(Google)
notion image
 

Data Validataion

  • 리서치 환경과 Production 환경에서 동일한 서로 다른 데이터를 사용한다면, 이들이 비슷한지를 확인해보아야한다.
    • 피쳐스토어가 있고, 동일한 피쳐스토어를 본다면 크게 상관 없을 수도 있다.
  • 데이터의 분포가 어떻게 달라지고 있는지 파악하는것도 중요하다.
  • Data Drift, Model Drift, Concept Drift
  • 단일 모델은 시간이 지날수록 성능이 떨어질수밖에 없다.
  • 드리프트가 어떻게 변경됬는지에 따라, 주기적으로 재학습이 필요하다.
  • Data Validation에서 지속적으로 모니터링 해야한다.
 
  • 텐서플로우/TFX
 

Continuous Training

기존 모델의 성능이 떨어지고 있다... 뭔가 모델을 다시 만들어야 한다. 언제 해야할까?
  • 새로운 데이터가 들어온 경우
  • 일정 기간이 지난 후에, 특정 주기로
  • 메트릭 기반 ex)RMSE가 n이하로 떨어졌다..
  • 요청시
 
  • 라이브러리가 있진 않고, 보통 CI/CD와 같이 진행
 

ETC

  • Infra: GPU infra, 클라우드 리소스 관리, Research, Production 환경을 동일하게,
  • 모델 성능 모니터링
  • 자동화 시스템 Auto ML
  • 학습 후 Model validation
 

MLOps 맛보기 - kubeflow 소개/활용법

Kubeflow = kubernetes + ML workflow. Machine learning toolkit for kubernetes
  • 쿠버네틱스위에 tenseorflow extended pipeline을 어떻게 잘 돌려볼까를 고민하다가 시작
  • 쿠베플로우의 목표는 ML 워크플로우에 필요한 서비스를 만드는 것이 아닌, 각 영역에서 가장 적합한 오픈 소스 시스템들을 제공하는 것이다.
  • 새로운 서비스가 아닌 기존에 있던 오픈소스들의 묶음이다.
 
  • 프로젝트별 자원할당
  • pipeline 셋팅
  • hyper parmeter tuning 자동화
  • 배포를 위한 서빙 도구
 
pass
아래 글들에 잘 정리되어 있다...
 

참고자료