본문 바로가기

Develop/DevOps

[MLOps] FastCampus 강의 정리 - 개념, DVC, MLFlow

반응형

MLOps관련 분야를 공부하다가 패스트캠퍼스에서 개설된 수업이 있다하여 신청을 했다. 그에대해 도움이 되는 정보를 간략하게 정리하고자한다.

 

ML프로젝트와 SW프로젝트의 유사성

버전관리

  • 데이터 버전 관리
  • 모델 버전 관리

테스트 자동화

  • 모델 학습 자동화
  • 모델 성능 평가 자동화

모니터링

  • 서빙 모델 모니터링
  • 데이터 변화 모니터링
  • 시스템 안정성 모니터링

AI서비스와 일반 SW서비스의 차이점은 "데이터"의 차이이며, Andrew ng교수는 "모델보다는 데이터의 품질이 더 중요"하다고 강조했음

빅테크 기업들의 MLOps 정의

MLOps 구성요소 (+ 활용 툴)

  • 데이터
    • 데이터 수집 파이프라인(Sqoop, Kafka, Spark Streaming, Airflow ...)
    • 데이터 저장 (MySQL, Haddop, S3 ...)
    • 데이터 관리 (TFDV, DVC, Amundsen ...)
  • 모델
    • 모델 개발 (Jupyter Hub, Docker, Kubeflow ...)
    • 모델 버전 관리 (Git, MLflow, Jenkins ...)
    • 모델 학습 스케줄링 관리 (Grafana, Kubernetes ...)
  • 서빙
    • 모델 패키징 (Docker, Kubeflow, FastAPI, BentoML ...)
    • 서빙 모니터링 (Prometheus, Grafana ...)
    • 파이프라인 매니징 (Kubeflow, Airflow, argo workflows ...)

대표적으로 AWS SageMaker, GCP Vertex AI, Azure Machine Learning 은 위의 단계들을 다 제공하고있음 (물론 유로다)

MLOps 와 쿠버네티스?

MLOps는 주로 쿠버네티스를 활용하는데 아래와 같은 기능들에 대해서 만족하기 때문이다.

  • Reproducibility
    • 실행 환경의 일관성 & 독립성
  • Job Scheduling
    • 스케줄 관리, 병렬 작업 관리, 유휴 자원 관리
  • Auto Healing & Auto Scaling
    • 장애 대응, 트래픽 대응

Date Management

모델을 학습하면서 어떤 특정 데이터셋에는 학습이 잘됐었고, 특정 데이터셋에는 학습이 잘안될때가있고. 또한 데이터들의 설명이 존재하지않아 정확하게 어떤 데이터를 써야할지 모를때가 있다. 이를 기억해놓기위해 Data Management가 필요하다.

버전관리하면 당연하게 Github, Gitlab이 생각나겠지만, 대용량 파일을 저장하기에는 유로서비스가 요구된다. 해당 강의에서는 DVC(Data Version Control)이라는 오픈소스를 활용한다고 한다.

https://dvc.org

 

DVC의 장점은 다음과 같다

  • 대부분의 스토리지와 호환 (S3, Google Drive ...)
  • Github외의 Gitlab, Bitbucket등의 대부분의 git 호스팅 서버와 연동
  • Data Pipeline을 DAG으로 관리
  • Git과 유사한 인터페이스

Model Management

모델에 대해서 어떤 정보를 기록해둬야할까? 다음과같이 대표적인 정보들을 나열했다

  1. Model 소스코드
  2. Evaluation Metric 결과
  3. 사용한 parameters
  4. Model.pkl(모델save함수 사용시 남는파일)
  5. 학습에 사용한 data
  6. 데이터 전처리용 코드
  7. 전처리된 data
  8. ...

위와같이 많은 정보들을 과연 "모든사람들이 동일한 약속을하면서 관리를 나아갈 수 있을것인가" 에 대한 질문에 답은 "어렵다"일것같다. 인원이 작은 프로젝트면 몰라도, 현업에서는 수십명이 같이 일을하는 환경이 대다수일것이다. 또한, 휴먼에러가 발생했을때 대응하기에도 매우 어려울것이다.

강의에서는 아래와 같이 다양한 Machine Learning Model Life Cycle관리의 어려움을 나열했다

  • 비슷한 작업이 반복적으로 일어남
  • Dependency 패키지들이 많으며, 버전 관리가 어렵다
  • 사람 Dependency가 생긴다
  • 테스트하기 어렵다
  • Reproduce되지 않는 경우가 많다
  • Model 학습용 코드를 구현하는 사람과 Serving용 코드를 구현하는 사람이 분리되어 있다.
  • ...

이러한 어려움을 극복하기 위해 다양한 툴들이 존재한다

이중에서 강의는 MLFlow에 대해 설명한다

MLFlow의 장점

https://github.com/mlflow/mlflow

  • 쉬운 설치
  • 쉬운 Mirgration
  • 대시보드 제공
  • 다양한 Client API 제공
  • 다양한 Backend Storage 연동 지원
  • 다양한 Artifact Storage 연동 지원
  • ...

MLFlow는 다음과같이 크게 4가지로 구성되어있다

  • MLFlow Tracking(강의에서는 요부분만 설명해줌)
    • 모델의 meta, metric정보를 기록함
    •  
  • MLFlow Projects
    • 모델이 Reproducible하게끔, 모델의 의존성에 관련된 정보를 기록함
  • MLFlow Models
    • 모델이 어떤 언어로 개발했던, 동일하게 포맷화하여 배포 할 수 있게끔 만들어줌
  • MLFlow Model Registry
    • 실험한 모델을 특정단계에 등록할수있게끔 만들어줌
반응형