쉬엄쉬엄블로그

(AI 서비스 개발 기초) MLflow 본문

부스트캠프 AI Tech 4기

(AI 서비스 개발 기초) MLflow

쉬엄쉬엄블로그 2023. 8. 10. 15:02
728x90

이 색깔은 주석이라 무시하셔도 됩니다.

Part 3. 더 완성된 제품으로 개발하기

MLflow 개념 잡기

MLflow가 없던 시절

  • 사람들이 각자 자신의 코드를 Jupyter Notebook에서 작성
  • 머신러닝 모델 학습시 사용한 Parameter, Metric을 따로 기록
  • 개인 컴퓨터, 연구실 서버를 사용하다가 메모리 초과로 Memory Exceed 오류 발생
  • 학습하며 생긴 Weight File을 저장해 다른 동료들에게 공유
  • Weight File 이름으로 Model Versioning을 하거나 아예 Versioning을 하지 않음

MLflow가 해결하려고 했던 Pain Point

  1. 실험을 추적하기 어렵다
  2. 코드를 재현하기 어렵다
  3. 모델을 패키징하고 배포하는 방법이 어렵다
  4. 모델을 관리하기 위한 중앙 저장소가 없다

MLflow

  • 머신러닝 실험, 배포를 쉽게 관리할 수 있는 오픈소스

  • 관련 오픈소스 중 제일 빠르게 성장 중

  • 맛보기

    • CLI, GUI(웹 인터페이스) 지원

    • Code 예시

MLflow의 핵심 기능

  1. Experiment Management & Tracking
    • 머신러닝 관련 “실험”들을 관리하고, 각 실험의 내용들을 기록할 수 있음
      • 예를 들어, 여러 사람이 하나의 MLflow 서버 위에서 각자 자기 실험을 만들고 공유할 수 있음
    • 실험을 정의하고, 실험을 실행할 수 있음. 이 실행은 머신러닝 훈련 코드를 실행한 기록
      • 각 실행에 사용한 소스 코드, 하이퍼 파라미터, Metric, 부산물(모델 Artifact, Chart Image) 등을 저장
  2. Model Registry
    • MLflow로 실행한 머신러닝 모델을 Model Registry(모델 저장소)에 등록할 수 있음
    • 모델 저장소에 모델이 저장될 때마다 해당 모델에 버전이 자동으로 올라감(Version 1→2→3…)
    • Model Registry에 등록된 모델은 다른 사람들에게 쉽게 공유 가능하고, 쉽게 활용할 수 있음
  3. Model Serving
    • Model Registry에 등록한 모델을 REST API 형태의 서버로 Serving 할 수 있음
    • Input = Model의 Input
    • Output = Model의 Output
    • 직접 Docker Image 만들지 않아도 생성할 수 있음

MLflow Component

  1. MLflow Tracking
    • 머신러닝 코드 실행, 로깅을 위한 API, UI 제공
    • MLflow Tracking을 사용해 결과를 Local, Server에 기록해 여러 실행과 비교할 수 있음
    • 팀에선 다른 사용자의 결과와 비교하며 협업할 수 있음
  2. MLflow Project
    • 머신러닝 프로젝트 코드를 패키징하기 위한 표준
    • Project
      • 간단하게는 소스 코드가 저장된 폴더
      • Git Repo
      • 의존성과 어떻게 실행해야 하는지 저장
    • MLflow Tracking API를 사용하면 MLflow는 프로젝트 버전을 모든 파라미터와 자동으로 로깅
  3. MLflow Model
    • 모델은 모델 파일과 코드로 저장
    • 다양한 플랫폼에 배포할 수 있는 여러 도구 제공
    • MLflow Tracking API를 사용하면 MLflow는 자동으로 해당 프로젝트에 대한 내용을 사용함
  4. MLflow Registry
    • MLflow Model의 전체 Lifecycle에서 사용할 수 있는 중앙 모델 저장소

설치

  • pip install mlflow

MLflow Tracking - Experiment

  • MLflow에서 제일 먼저 Experiment를 생성

  • 하나의 Experiment는 진행하고 있는 머신러닝 프로젝트 단위로 구성

    • 예) “개/고양이 이미지 분류 실험”, “택시 수요량 예측 분류 실험”
  • 정해진 Metric으로 모델을 평가

    • 예) RMSE, MSE, MAE, Accuracy
  • 하나의 Experiment는 여러 Run(실행)을 가짐

  • Experiment 생성

    • mlflow experiments create --experiment-name my-first-experiment

  • ls -al을 사용해 폴더 확인하면 mlruns라는 폴더가 생김

  • 리스트 확인

    • mlflow experiments list

MLflow 머신러닝 코드 작성

  • 모델에 필요한 라이브러리 설치

  • 폴더를 생성한 후, 머신러닝 코드 생성

MLflow Project

  • 프로젝트(MLProject)

    • MLflow를 사용한 코드의 프로젝트 메타 정보 저장
    • 프로젝트를 어떤 환경에서 어떻게 실행시킬지 정의
    • 패키지 모듈의 상단에 위치
  • MLProject 생성

MLflow Tracking - Run

  • Run(실행)

    • 하나의 Run은 코드를 1번 실행한 것을 의미
    • 보통 Run은 모델 학습 코드를 실행
    • 즉, 한번의 코드 실행 = 하나의 Run 생성
    • Run을 하면 여러가지 내용이 기록됨
  • Run에서 로깅하는 것들

    • Source : 실행한 Project의 이름
    • Version : 실행 Hash
    • Start & end time
    • Parameters : 모델 파라미터
    • Metrics : 모델의 평가 지표, Metric을 시각화할 수 있음
    • Tags : 관련된 Tag
    • Artifacts : 실행 과정에서 생기는 다양한 파일들(이미지, 모델 Pickle 등)
  • Run으로 실행

    • mlflow run logistic_regression --experiment-name my-first-experiment --no-conda
      mlflow run logistic_regression --experiment-name my-first-experiment

MLflow Tracking - UI

  • UI 실행

    • mlflow ui

    • localhost:5000로 mlflow UI 접속










MLflow Tracking - Experiment / Run 관계

  • 여러 실험을 가질 수 있음
  • 실험에 대한 실행(run)이 여러가지 있을 수 있음
  • run 안에서는 파라미터와 메트릭이 다를 수 있음

MLflow autolog

  • 파라미터를 매번 명시해야 할까?

  • Run으로 실행

    • mlflow run logistic_regression_with_autolog --experiment-name my-first-experiment --no-conda

  • 주의사항

    • 모든 프레임워크에서 사용 가능한 것은 아님

    • MLflow에서 지원해주는 프레임워크들이 존재

      • 예) pytorch.nn.Module은 지원하지 않음(반면 Pytorch Lightning은 지원)
    • 자세한 내용은 https://mlflow.org/docs/latest/tracking.html#id2 에서 확인

MLflow Parameter

MLflow Hyper Paramter Tuning

  • autolog와 하이퍼 파라미터 튜닝도 같이 할 수 있음

MLflow 서버로 배포하기

MLflow Architecture

MLflow Tracking Server와 외부 Storage 사용하기

  • mlflow server 명령어로 Backend Store URI 지정

  • mlflow server --backend-store-uri sqlite:///mlflow.db --default-artifact-root $(pwd)/artifacts

  • 환경변수 지정

  • Experiments를 생성한 후, Run

  • 데이터 확인

  • artifacts, mlflow.db 생성 확인

MLflow 실제 활용 사례

  • MLflow Trackign Server는 하나로 통합 운영
    • Tracking Server를 하나 배포하고, 팀 내 모든 Researcher가 이 Tracking Server에 실험 기록
      • 배포할 때는 Docker Image, Kubernetes 등에 진행(회사의 인프라에 따라 다름)
    • 로그나 모델이 한 곳에 저장되므로, 팀 내 모든 실험을 공유할 수 있음
    • Artifact Storage와 DB 역시 하나로 운영
      • Artifact Storage는 GCS나 S3같은 스토리지 이용
      • DB는 CloudSQL이나 Aurora RDS 같은 DB 이용
      • 이 두 저장소는 Tracking Server에 의해 관리

출처: 부스트캠프 AI Tech 4기(NAVER Connect Foundation)

Comments