[AITech][Product Serving] 20220217 - MLflow
본 포스팅은 SOCAR의 ‘변성윤’ 강사 님의 강의를 바탕으로 제작되었습니다.
학습 내용
MLflow 개념 잡기
MLflow란
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 설치
MLflow Tracking - Experiment
하나의 Experiment는 진행하고 있는 머신러닝 프로젝트 단위로 구성합니다. 하나의 Experiment는 여러 개의 Run(실행)을 가집니다.
-
mlflow experiments create --experiment-name my-first-experiment
- Experiment 생성
-
mlflow experiments list
- Experiment 리스트 확인
MLflow 머신러닝 코드 작성
폴더를 생성한 후, 머신러닝 코드 생성
MLflow Project
Project는 MLflow를 사용한 코드의 프로젝트 메타 정보를 저장하는 것으로, 프로젝트를 어떤 환경에서 어떻게 실행시킬 지 정의합니다. 패키지 모듈의 상단에 위치합니다.
MLProejct를 생성합니다.
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
MLflow Tracking - UI
mlflow ui
위에서 여러 정보들을 확인할 수 있음
Experiment와 Run의 관계
MLflow autolog
autolog를 사용하면 매번 명시해줬던 파라미터들에 대한 코드를 간소화시킬 수 있습니다.
그러나 모든 프레임워크에서 사용 가능한 것은 아니며, MLflow에서 지원해주는 프레임워크들이 존재합니다. 예를 들어 pytorch.nn.Module은 지원하지 않는데 반해 pytorch lightning은 지원합니다. 자세한 내용은 여기에서 확인하세요.
MLFlow Parameter
MLflow Hyper Parameter Tuning
autolog와 하이퍼파라미터 튜닝도 같이 할 수 있습니다.
MLflow 서버로 배포하기
Tracking Server와 외부 스토리지 사용하기
MLflow Architecture
파이썬 코드
Tracking Server&Artifact Store
mlflow server --backend-store-uri sqlite:///mlflow.db --default-artifact-root $(pwd)/artifacts
- mlflow server 명령어로 Backend Store URI 지정
- 환경변수 지정
- Experiments를 생성한 후, Run
- 데이터 확인
- 파일 확인
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