Azure Databricks - MLflow를 이용한 머신러닝(1) 포스팅에서는 MLflow의 전반에 대해 살펴보고, 어떤 구성요소가 있는지 확인.

 

개발자 커뮤니티 SQLER.com - Azure Databricks - MLflow를 이용한 머신러닝(1)

개발자 커뮤니티 SQLER.com - Azure Databricks - MLflow를 이용한 머신러닝(2) - Tracking

개발자 커뮤니티 SQLER.com - Azure Databricks - MLflow를 이용한 머신러닝(3) - Project

개발자 커뮤니티 SQLER.com - Azure Databricks - MLflow를 이용한 머신러닝(4) - Model Registry

개발자 커뮤니티 SQLER.com - Azure Databricks - MLflow를 이용한 머신러닝(5) - Model 배포

 

 

mlflow-logok.png

 

- MLflow란 무엇인가?

- MLflow가 제공하는 기능

  - MLflow Tracking

  - MLflow Project

  - MLflow Model

  - MLflow Model Registry

 

MLflow란 무엇인가?

MLflow는 모든 머신러닝 라이프사이클을 관리하는 플랫폼이다.

MLflow is an open source platform for managing the end-to-end machine learning lifecycle. 

MLflow - A platform for the machine learning lifecycle | MLflow

 

Azure의 Azure Machine Learning이나 AWS의 SageMaker, GCP의 Vertex AI와 유사하다. 기업들이 머신러닝 프로젝트를 진행하면서 조직간, 업무의 연속성간, 데이터 관리, 모델 관리 등 여러 측면에서 발생하는 난제들을 어떻게 하면 해결할 수 있을까?

개발자 커뮤니티 SQLER.com - MLaaS - (1) 12가지의 머신러닝을 먼저 도입한 기업들의 고민

 

MLaaS와 MLOps가 기업의 머신러닝 프로젝트에서 사용되는 이유기도 하고, Azure Machine Learning(이하, AzureML), SageMaker, Vertex AI와 같은 MLaaS 서비스가 이러한 역할을 수행한다. MLaaS 서비스에 익숙하다면, Databricks의 MLflow 역시 쉽게 접근할 수 있다. 기능적인 측면과 코드 부분을 알아보자.

 

MLflow가 제공하는 기능

MLflow는 다음의 기능들을 제공한다.

  • Tracking experiments to record and compare parameters and results (MLflow Tracking).

  • Packaging ML code in a reusable, reproducible form in order to share with other data scientists or transfer to production (MLflow Projects).

  • Managing and deploying models from a variety of ML libraries to a variety of model serving and inference platforms (MLflow Models).

  • Providing a central model store to collaboratively manage the full lifecycle of an MLflow Model, including model versioning, stage transitions, and annotations (MLflow Model Registry).

 

Microsoft의 Azure의 Azure Machine Learning(이하 AzureML)과 비교.

MLflow Tracking

MLflow Tracking은 개별 ML 작업의 단위인 "Experiment"에서 실행하는 과정에서 필요한 정보를 로깅하고 트레킹 하는 기능을 수행한다. AzureML의 Logging & Metric 기능과 유사하다.

Log & view metrics and log files - Azure Machine Learning | Microsoft Docs

 

Tracking은 이런 패턴으로 로그를 수집하고, 수집된 log metric으로 visualization을 수행한다.

with mlflow.start_run():
    for epoch in range(0, 3):
        mlflow.log_metric(key="quality", value=2*epoch, step=epoch)

 

MLflow.png

 

이 포스트에서 진행하는 전체 예제에서는 autologging을 이용한다. 간략히, 위처럼 명시적으로 logging 구문을 사용할 필요 없이 log, metric, parameter, model에 대한 정보를 자동으로 로깅할 수 있다.

 

MLflow Project

MLflow Project는 "Resuable ML code"를 위해 ML experiment를 실행할 코드가 위치하는 git과 같은 repository와 ML작업에 사용할 python 환경(environment)인 conda 환경 같은 설정, docker 환경 설정, 시스템 설정을 의미한다.

이러한 MLflow Project 설정들을 통해 project를 구성하고, 다른 Data scientist나 개발자와 공유/재현할 수 있다.

AzureML의 Workspace - Experiment & Run과 유사하고, MLflow의 environment는 AzureML의 environment와 비슷하다.

Experiment and Run | Azure Machine Learning

About Azure Machine Learning environments - Azure Machine Learning | Microsoft Docs

 

MLflow Model

MLflow Model은 머신러닝 모델을 REST API로 배포해 serving 하거나 batch inference를 할 수 있도록 지원한다. 

AzureML의 Deploy model과 비슷하다. 

How to deploy machine learning models - Azure Machine Learning | Microsoft Docs

 

예를 들어, sklearn 모델을 배포하고 싶다면 이렇게 file과 directory를 구성한다.

# Directory written by mlflow.sklearn.save_model(model, "my_model")
my_model/
├── MLmodel
├── model.pkl
├── conda.yaml
└── requirements.txt

 

MLmodel 파일을 이렇게 지정하고, "flavors"를 설정한다.

time_created: 2018-05-25T17:28:53.35

flavors:
  sklearn:
    sklearn_version: 0.19.1
    pickled_model: model.pkl
  python_function:
    loader_module: mlflow.sklearn

 

머신러닝 모델 serving을 실행하기 위해서 아래 명령을 실행한다. 

mlflow models serve -m my_model

 

체크할 부분은 "flavors"라는 부분이다. Serving하는 모델이 tensorflow나 keras와 같이 다른 프레임워크로 생성되었다면, 이에 맞춰 REST API를 제공하는 코드가 달라져야 한다. 이러한 차이를 MLflow에서는 flavors로 분류해두고, 코드 부분을 모듈화해 두었다. 

Built-in model flavors로 아래 머신러닝 프레임워크와 툴킷이 제공된다. 

그렇다면, 기본 제공되는 Model이 아니라면?

새로운 머신러닝 프레임워크나 알고리즘, 직접 만든 모델에 대응하려면 어떻게 해야 하나?

이런 경우에는 MLflow의 Model customization을 이용한다. - Custom python model을 생성하거나 Custom flavors를 생성할 수 있다.

MLflow의 Model customization: MLflow Models — MLflow 1.20.2 documentation

 

MLflow Model Registry

Model Registry는 머신러닝 모델의 라이프사이클을 관리하는 중앙집중화된(centralized) 모델 저장소를 제공하며, 모델의 버전관리(Versioning), 스테이지 전환(Stage transition - 최종 배포 Production/Stage간 전환을 의미), 주석(annotation)을 제공한다.

AzureML의 Model과 비슷하다.

azureml.core.model.Model class - Azure Machine Learning Python | Microsoft Docs

 

모델은 머신러닝 과정의 핵심 산출물이자, 가장 중요한 자산이다. 이 모델을 어떻게 관리하고, 어떻게 다양한 기업의 모델을 이용하는 어플리케이션에서 사용하며, 새로운 모델이 만들어질 때마다 모델에 대한 버전이나 정보 및 정확도는 어떻게 관리하고, 최종 Production 환경이나 Staging 환경에서 모델을 어떻게 모델을 유기적으로 조합할 수 있을까?

 

대부분의 MLaaS 서비스는 이러한 Model Registry를 제공한다. 이 과정을 위해서는 Model을 Model Registry에 저장하고, 저장된 모델을 가져올 수 있어야 한다.

...
with mlflow.start_run(run_name="YOUR_RUN_NAME") as run:
    params = {"n_estimators": 5, "random_state": 42}
    sk_learn_rfr = RandomForestRegressor(**params)

    # Log parameters and metrics using the MLflow APIs
    mlflow.log_params(params)
    mlflow.log_param("param_1", randint(0, 100))
    mlflow.log_metrics({"metric_1": random(), "metric_2": random() + 1})

    # Log the sklearn model and register as version 1
    mlflow.sklearn.log_model(
        sk_model=sk_learn_rfr,
        artifact_path="sklearn-model",
        registered_model_name="sk-learn-random-forest-reg-model"
    )

위와 같이 log_model()을 이용하거나, register_model()을 이용하는 두가지 방법이 있다.

 

이어서, create_registered_model을 실행해 모델 등록을 완료한다.

from mlflow.tracking import MlflowClient

client = MlflowClient()
client.create_registered_model("sk-learn-random-forest-reg-model")

 

Registered 모델을 Python의 Serving이나 코드에서 사용하려면 아래의 코드로 불러온다.

import mlflow.pyfunc

model_name = "sk-learn-random-forest-reg-model"
model_version = 1

model = mlflow.pyfunc.load_model(
    model_uri=f"models:/{model_name}/{model_version}"
)

model.predict(data)

 

또는 직접 Serving을 하려면, 아래처럼 bash에서 Model Registry에서 불러와 Serving이 가능하다.

#!/usr/bin/env sh

# Set environment variable for the tracking URL where the Model Registry resides
export MLFLOW_TRACKING_URI=http://localhost:5000

# Serve the production model from the model registry
mlflow models serve -m "models:/sk-learn-random-forest-reg-model/Production"

 

이러한 과정은 코드 기반으로도 가능하고, UI로도 가능하다.

 

MLflow의 흐름을 조금씩 코드로 살펴보았지만, 부족하다. 다음 포스팅들은 위의 MLflow의 기능인, Tracking, Project, Model 및 Model Registry를 코드로 리뷰하는 포스팅을 진행할 예정.

 

참고링크

개발자 커뮤니티 SQLER.com - Azure Databricks - MLflow를 이용한 머신러닝(1)

개발자 커뮤니티 SQLER.com - Azure Databricks - MLflow를 이용한 머신러닝(2) - Tracking

개발자 커뮤니티 SQLER.com - Azure Databricks - MLflow를 이용한 머신러닝(3) - Project

개발자 커뮤니티 SQLER.com - Azure Databricks - MLflow를 이용한 머신러닝(4) - Model Registry

개발자 커뮤니티 SQLER.com - Azure Databricks - MLflow를 이용한 머신러닝(5) - Model 배포

머신러닝을 시작하는 개발자를 위한 - (1) 머신러닝 용어정리, 분류부터 MLOps까지

머신러닝을 시작하는 개발자를 위한 - (2) 머신러닝 서비스/프레임워크/툴킷 분류 및 전체 개발 흐름

머신러닝을 시작하는 개발자를 위한 - (3) 우리 개발자가 머신러닝을 해야 하는 이유는?

머신러닝을 시작하는 개발자를 위한 - (4) 2021년의 ML Trend - MLaaS와 MLOps(Machine Learning + DevOps)

2021년 머신러닝과 인공지능(AI) 트렌드 - MLaaS (서비스로의 머신러닝)

 

MLflow guide - Azure Databricks | Microsoft Docs

mlflow/mlflow: Open source platform for the machine learning lifecycle (github.com)

MLflow Documentation — MLflow 1.20.2 documentation

 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 33689
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 16962
34 Azure Databricks - MLflow를 이용한 머신러닝(5) - Model 배포 file 코난(김대우) 2021.10.14 546
33 Azure Databricks - MLflow를 이용한 머신러닝(4) - Model Registry file 코난(김대우) 2021.10.12 384
32 Azure Databricks - MLflow를 이용한 머신러닝(3) - Project file 코난(김대우) 2021.10.08 362
31 Azure Databricks - MLflow를 이용한 머신러닝(2) - Tracking file 코난(김대우) 2021.10.08 340
» Azure Databricks - MLflow를 이용한 머신러닝(1) file 코난(김대우) 2021.10.08 469
29 Azure Databricks - Spark에서 머신러닝 분산 처리 file 코난(김대우) 2021.10.07 194
28 PySpark cheat sheet 자료 - RDD, 데이터 처리 file 코난(김대우) 2021.10.01 148
27 PySpark을 이용한 머신러닝 튜토리얼 예제 코난(김대우) 2021.10.01 942
26 Form Recognizer로 문서에서 표 데이터 추출 file 코난(김대우) 2021.01.21 388
25 MLaaS - 12가지의 머신러닝을 먼저 도입한 기업들의 고민 file 코난(김대우) 2021.01.15 781
24 Python 머신러닝 강좌 - 15. Matplotlib으로 데이터 시각화(visualization) file 코난(김대우) 2021.01.09 754
23 Python 머신러닝 강좌 - 14. NumPy와 Pandas 코난(김대우) 2021.01.09 734
22 Python 머신러닝 강좌 - 13. 모델의 정확도 평가(accuracy evaluating) 코난(김대우) 2021.01.09 1724
21 Python 머신러닝 강좌 - 12. 머신러닝 모델 테스트 코난(김대우) 2021.01.09 1030
20 Python 머신러닝 강좌 - 11. scikit-learn으로 선형회귀(linear regression) 모델 머신러닝 트레이닝 수행 코난(김대우) 2021.01.08 395
19 Python 머신러닝 강좌 - 10. 머신러닝을 위해 scikit-learn으로 트레이닝 데이터와 테스트 데이터 분할 코난(김대우) 2021.01.08 585
18 Python 머신러닝 강좌 - 9. 중복데이터와 결측값(missing value) 처리 코난(김대우) 2021.01.08 297
17 Python 머신러닝 강좌 - 8. Pandas DataFrame 컬럼(column) 분할(split)과 삭제(remove) 코난(김대우) 2021.01.08 424
16 Python 머신러닝 강좌 - 7. Pandas DataFrame으로 CSV 파일 읽고 쓰기 코난(김대우) 2021.01.08 569
15 Python 머신러닝 강좌 - 6. CSV 파일과 주피터 노트북 file 코난(김대우) 2021.01.08 482





XE Login