[AITech][Product Serving] 20220217 - MLflow

2 minute read


본 포스팅은 SOCAR의 ‘변성윤’ 강사 님의 강의를 바탕으로 제작되었습니다.

학습 내용

MLflow 개념 잡기

MLflow란

image-20220217144909637

MLflow가 없던 시절에는 사람들은 자신의 코드를 Jupyter notebook에 작성해서 공유하고, 머신러닝 모델 학습 시 사용한 Parameter, Metric들을 어딘가에 따로 기록해놓아야 했습니다. 이는 다음의 문제들을 가지고 있습니다.

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

MLflow는 머신러닝 실험, 배포를 쉽게 관리할 수 있는 오픈소스로 다음의 핵심 기능들을 제공합니다.

  • MLflow Tracking
    • 머신러닝 관련 실험(Experiment)들을 관리하고, 각 실험의 내용들을 기록할 수 있음
    • 파라미터와 결과를 비교하기 위해 실험 결과를 저장
  • MLflow Projects
    • MLflow로 실행한 머신러닝 모델을 Model Registry(모델 저장소)에 등록할 수 있음
    • 등록된 모델은 다른 사람들과 쉽게 공유하고 활용할 수 있음
  • MLflow Models
    • Model Registry에 등록한 모델을 REST API 형태의 서버로 Serving할 수 있음
    • 다양한 ML 라이브러리에서 모델을 관리하고 배포, Serving, 추론
    • 서버의 input, output은 모델의 input, output과 동일

MLflow 실습하며 알아보기

MLflow 설치

pip install mlflow로 MLflow 설치

image-20220217145709184

MLflow Tracking - Experiment

하나의 Experiment는 진행하고 있는 머신러닝 프로젝트 단위로 구성합니다. 하나의 Experiment는 여러 개의 Run(실행)을 가집니다.

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

    • Experiment 생성

    image-20220217145828371

  • mlflow experiments list

    • Experiment 리스트 확인

    image-20220217145900638

MLflow 머신러닝 코드 작성

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

image-20220217145950873

MLflow Project

Project는 MLflow를 사용한 코드의 프로젝트 메타 정보를 저장하는 것으로, 프로젝트를 어떤 환경에서 어떻게 실행시킬 지 정의합니다. 패키지 모듈의 상단에 위치합니다.

MLProejct를 생성합니다.

image-20220217150257512

MLflow Tracking - Run

Run(실행)은 코드를 1번 실행한 것을 의미하며, 한번의 코드 실행은 곧 하나의 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

image-20220217150613821

MLflow Tracking - UI

  • mlflow ui

image-20220217150658507

image-20220217150706669

위에서 여러 정보들을 확인할 수 있음

Experiment와 Run의 관계

image-20220217150831062

MLflow autolog

autolog를 사용하면 매번 명시해줬던 파라미터들에 대한 코드를 간소화시킬 수 있습니다.

image-20220217151011108

그러나 모든 프레임워크에서 사용 가능한 것은 아니며, MLflow에서 지원해주는 프레임워크들이 존재합니다. 예를 들어 pytorch.nn.Module은 지원하지 않는데 반해 pytorch lightning은 지원합니다. 자세한 내용은 여기에서 확인하세요.

MLFlow Parameter

image-20220217151159631

image-20220217151206316

MLflow Hyper Parameter Tuning

autolog와 하이퍼파라미터 튜닝도 같이 할 수 있습니다.

image-20220217151317027


MLflow 서버로 배포하기

Tracking Server와 외부 스토리지 사용하기

MLflow Architecture

image-20220217151545791

파이썬 코드

image-20220217152022166

Tracking Server&Artifact Store

image-20220217152108673

  • mlflow server --backend-store-uri sqlite:///mlflow.db --default-artifact-root $(pwd)/artifacts
    • mlflow server 명령어로 Backend Store URI 지정

image-20220217152146358

  • 환경변수 지정

image-20220217152218338

  • Experiments를 생성한 후, Run

image-20220217152240265

  • 데이터 확인

image-20220217152306277

  • 파일 확인

image-20220217152328258

MLflow 실제 활용 사례

MLflow Tracking Server는 하나로 통합 운영

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



참고 자료


Leave a comment