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란 무엇인가?
- 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)
이 포스트에서 진행하는 전체 예제에서는 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