본문 바로가기
MLOps/MLflow

[MLflow] MLflow (1) - 설명

by Toritol 2023. 7. 21.
728x90

 

출처 : https://www.databricks.com/blog/2020/04/15/databricks-extends-mlflow-model-registry-with-enterprise-features.html

 

 이번 글에서는 전반적인 머신러닝 Life Cycle을 관리할 수 있는 오픈소스 플랫폼, MLflow에 대해 설명하고자 합니다. MLflow에 대한 설명은 1) MLflow를 실무에서 어떠한 이유로 사용하게 되었는지, 2) MLflow의 기능에는 어떠한 것이 있는지, 3) 실무에서는 어떻게 활용하고 있는지 등 실무 적용을 위주로 설명하려고 합니다. 실무 위주로 설명하는 이유는 대부분의 MLflow 관련 글들이 간단한 예제만을 바탕으로 작성되어 있어, 막상 실무에 적용하려고 했을 때 추가적으로 검색해야 하는 부분이 많았기 때문입니다.

 

1. MLflow 활용 배경

 제가 실무에서 활용하고 있는 AI 알고리즘은 주단위로 예측을 진행하여 모델 서빙까지 필요한 케이스는 아니었습니다. 하지만 딥러닝 모델을 가중치 파일로 관리하고 있었기 때문에, 주기적으로 학습을 진행할 때마다 가중치 파일 자체를 대체하고, 모델의 버전 관리도 간단하게 파일명으로 진행해야 했었습니다. 또한, 모델의 고도화를 위한 하이퍼 파라미터 튜닝 결과를 보고할 때, 엑셀과 같은 개별적인 파일로 관리하다 보니 기존 결과들을 탐색하고 합치는데 불편함이 있었습니다. 이와 같이 운영적인 측면에서는 개선해야 할 부분들이 존재하여, 머신러닝 워크플로우 플랫폼 중 Python 기반이고 오픈소스 플랫폼인 MLflow의 적용을 고려하게 되었습니다.

 

2. MLflow 구성요소

 MLflow는 크게 네 가지의 구성요소를 가지고 있습니다. 

 

1) MLflow Tracking : ML/DL 모델을 학습시키기 위해 활용했던 하이퍼 파라미터들을 비롯하여, 모델 평가 지표(Accuracy, Loss 등), 태그(부가적인 정보) 등 모델의 학습 결과들을 관리해주는 저장소 역할을 수행합니다.

 

1-1) Table View

 

  • 1번 부분은 Experiments 목록으로, 여러 모델을 관리해야할 경우 목록을 구분하여 사용하면 모델 관리가 보다 용이
  • 2번 부분은 각 모델의 하이퍼 파라미터 및 평가 결과를 테이블 형태로 보여주는 것으로, 보고 싶은 지표만 선택하거나 특정 항목으로 정렬하는 것이 가능

1-2) Chart View : Table 형태가 아닌 Chart 형태로도 결과를 비교하는 것이 가능합니다.

 

2) MLflow Projects : 학습된 모델의 재생산성, 재사용성을 위해 모델 관련 코드를 재현 가능한 형태로 변환하여, 다른 환경에서도 활용 가능하도록 패키징 하는 역할을 수행합니다. 아래의 예시는 Github의 Repository 형태로 패키지 한 것으로, 실무에서는 사용하지 않아 해당 블로그(https://zzsza.github.io/mlops/2019/01/16/mlflow-basic/)의 예시를 가져왔습니다.

 

  mlflow run --no-conda git@github.com:mlflow/mlflow-example.git -P alpha=5
  >>> Elasticnet model (alpha=5.000000, l1_ratio=0.100000):
  RMSE: 0.8594260117338262
  MAE: 0.6480675144220314
  R2: 0.046025292604596424
  
  mlflow run tutorial -P alpha=0.5

 

3) MLflow Models : Scikit-learn, Tensorflow 등의 다양한 ML 라이브러리를 통해 구축된 모델을 Docker, Kubernetes 등 여러 환경에서 손쉽게 관리하고 배포할 수 있도록 표준 형태로 패키징하는 역할을 수행합니다.

출처 : https://blog.dataiku.com/introducing-mlflow-saved-models

 

  • 표준 형태로 패키징된 모델은 아래 그림의 왼쪽과 같은 파일 구조를 나타내며, 오른쪽의 예시 코드와 같이 MLflow에 저장된 모델을 API 형태로 load 하여 활용하는 것이 가능

 

4) MLflow Registry : 모델의 하이퍼 파라미터 및 구조 변경에 따른 여러 모델의 버전 및 단계 등을 관리하는 역할을 수행합니다. 모델의 단계는 Staging, Production, Archived로 구분되며, Staging은 모델 테스트 단계, Production은 테스트 완료 후 실제 어플리케이션에 배포 단계, Archived는 Production 이후 필요 없어진 단계를 의미합니다.

출처 : https://www.databricks.com/blog/2019/10/17/introducing-the-mlflow-model-registry.html

 

  • 등록된 모델에 새로운 모델을 추가하면 아래 그림과 같이 버전이 올라가며, 버전별로 어떠한 단계인지 설정하는 것이 가능

 

 위의 네 가지 구성요소 외에도 배포를 위한 Model Serving 기능도 존재하지만, 모델 배포는 MLflow보다는 BentoML이라는 프레임워크를 주로 사용한다고 합니다. 현재 LINE에서도 배포는 BentoML을 사용하지만 모델 관리는 MLflow를 사용할 정도로, 모델 관리 측면에서는 강점이 있는 플랫폼이라고 생각합니다.

 

 이번 글에서는 MLflow를 활용하게 된 배경과 MLflow를 구성하고 있는 요소, 각 구성요소들이 실제 실무에서 활용하고 있는 UI에서는 어떻게 표현되는지 간단하게 살펴봤습니다. 다음 글에서는 MLflow의 각 구성요소들을 코드로 어떻게 구현하는지 자세하게 설명하도록 하겠습니다. 궁금한 점이나 글에서 틀린 부분이 있다면 언제든지 댓글 남겨주시길 바랍니다.

 

 

[다음 글]

1) https://dslyh01.tistory.com/37

 

[MLOps] MLflow (2) - 활용

이번 글에서는 저번 글인 MLflow에 대한 설명에 이어서 MLflow 활용에 대한 내용을 설명하고자 합니다. MLflow에 대한 설명이 궁금하신 분들은 이전 글을 읽어주시면 감사하겠습니다. MLflow의 구성요

dslyh01.tistory.com

 

 

 

 

728x90

'MLOps > MLflow' 카테고리의 다른 글

[MLflow] MLflow Timeout 오류 해결  (3) 2023.10.16
[MLflow] MLflow (2) - 활용  (2) 2023.08.02

댓글