MLOps 란
MLOps는 머신러닝 시스템을 위한 자동화된 프로세스이다. 좀더 자세히 말하자면, 머신러닝 모델을 효과적으로 배포하고, 성능을 향상시키기 위한 절차들이다. MLOps 는 아래의 DevOps, DataOps, ModelOps 를 포함하게 되기도 한다. MLOps 파이프라인의 코드 변경이 일어난 경우 진행되는 CICD 작업 (DevOps), 모델 학습에 필요한 데이터를 수집하고, 가공하는 파이프라인 (DataOps), 모델을 학습하고 배포하는 단계의 파이프라인 (ModelOps) 로 이루어지게 된다.
MLOps 에서 모델의 스테이징 단계
특히, MLOps 에서 Model 은 크게 세 단계로 나뉘게 된다. 어플리케이션 배포 전략과 유사하게 어떻게 정의하느냐에 따라 달라질 수 있지만, Databricks 공식 도큐먼트에 따르면 Development, Staging, Production 세 단계로 나누어 관리하는 것을 일반적이라고 소개하고 있다.
1. Development Stage
- 작업 내용
모델의 성능 최적화를 위해서 개발과 실험을 진행하는 단계이다. EDA(Exploratory Data Analysis, 탐색적 데이터 분석) 과정을 거쳐 분석계 데이터 마트를 조사하고 비즈니스 문제를 해결하기 위한 데이터를 선택한다. 모델학습과 검증을 한 후 초기 배포 테스트를 진행한다.
2. Statging Stage
- 작업 내용
Staging 단계는 ML 파이프라인 코드를 프로덕션 환경에 배포하기 전에 검증하는 과정이다. 단위 테스트 및 CI (Code Integration)과정을 실행한다. 코드가 테스트를 통과하면 dev branch 에서 main branch 로 병합하게 된다. Development 단계에서 모델이 특정 성능 스코어 이상을 기록하면 Staging 단계로 승격하도록 설계를 추가할 수 도 있다. 이 단계에서 CI/CD를 통해 코드 품질을 검증하고, 프로덕션 수준의 모델 성능을 보장하게 된다.
3. Production Stage
- 작업 내용
Production 환경에서는 앞 단계에서 개발하고 테스트한 ML pipeline 을 배포하고 실행하게 된다. 새로운 버전으로 버전이 올라간 Model 은 Serving Endpoint 를 통해 배포된다. 배포가 된 모델은 MLOps Pipeline 을 통해서 다시 retraining 하여 성능을 최적화 할 수 있다. retrainging 의 경우, Batch 성격으로 스케줄을 걸어서 특정 주기마다 학습을 하게 될 수도 있으며, Trigger가 걸릴 때 학습을 하게 설계할 수도 있다. 더 나아가서, 실시간으로 업데이트가 필요한 모델의 경우에는 실시간으로 학습이 이루어지도록 설계할 수 있을 것이다.
- 운영 가이드라인
Databricks 공식 문서에서는 Data Scientist 에게는 프로덕션 레벨에서 read-only 권한만 최소한으로 부여하는것이 일반적이라고 설명하고 있다. 모델의 테스트 결과, 로그, 모델 아티팩트, 파이프라인 상태 등을 모니터링하기 위해서이다. 그리고 computing 자원에 대해서는 데이터 엔지니어 (혹은 MLOps Engineer) 가 권한을 가지고 관리하는 것이 일반적이다. role에 기반해서 가버넌스 정책이 필요한 경우 좋은 가이드라인이라고 생각한다.
MLflow 란
MLflow는 머신러닝 수명 주기를 관리하기 위한 오픈소스 플랫폼으로, Databricks에서 개발했다. https://github.com/mlflow/mlflow
MLflow는 다음과 같은 세 가지 주요 기능을 제공한다.
- Tracking : MLflow 의 실험 (experiment)를 관리하고 기록한다. 학습에 사용된 하이퍼파라미터와 모델 성능에 대한 매트릭 결과를 기록할 수 있다. 웹 UI를 통해 실험 결과를 시각화하고 비교할 수도 있다.
- Models : 표준화된 포맷으로 학습된 모델을 저장하고, 다양한 환경 (AWS SageMaker, Kubernetes, Docker)에서 배포할 수 있도록 도와준다.
- Projects : 머신러닝 코드와 모델을 실행하는 환경을 표준화하기 위한 구성요소이다. YAML 형식으로 작성되어 환경(conda 환경이나 Docker Image)을 정의할 수 있다.
MLOps 파이프라인 설계
MLOps 파이프라인의 구조는 다음과 같이 설계했다. MLOps 파이프라인을 설계해보기 이전에, 상품의 재고 테이블에 대해 EDA 과정을 진행했다. 그리고 머신러닝을 통해 상품 주문 수량을 예측하기 위해 아래와 같은 MLOps 파이프라인을 설계했다.
- Step1. 데이터 전처리
- ML 학습에 사용할 데이터를 준비한다. Data ETL Pipeline을 거쳐 정제된 Data Mart의 데이터를 바로 사용할 수 있는 상황이라면 생략할 수도 있다.
- 작업내용
- 컬럼 타입에 맞도록 타입을 변환했다. string 타입으로 들어온 날짜 데이터의 경우 date 타입으로 형변환을 했다. 날짜 데이터의 날짜 format 도 일정하게 맞추어 주었다.
- 실제 column의 값들이 모두 null 이어서 사실상 무의미한 데이터인 경우 column 을 제거(drop 대상) 했다.
- Step2. Feature Engineering
- 전처리 작업을 한 데이터를 기반으로 모델 학습에 필요한 feature 를 생성하는 과정이다. 범주형 데이터의 경우 인코딩 과정을 통해 one-hot encoding 로 만드는 과정도 추가될 수 있다.
- 작업내용
- 간단하게 실험하기 위해서 수치형 데이터만 사용했다.
- 날짜 데이터의 경우 년도 / 월 / 일로 구분하여 피쳐를 생성했다.
- 가공한 피처 데이터들을 feature table에 등록하였다.
- Step3. Model Training
- feature table의 데이터를 로드하여 학습 및 테스트 세트로 분리한 후, 모델을 학습시키는 과정이다.
- 작업내용
- feature table에 저장한 데이터를 로드하여 학습한다.
- mlflow api를 통해 hyperparameter와 metric 결과를 기록했다.
- 학습이 진행된 후, mlflow 기능을 통해 새로운 버전의 모델을 저장했다.
- Step4. Model Evaluation
- 학습한 모델을 평가하는 과정이다.
- 작업내용
- 일정 이상의 점수를 기록하면 Staging 단계로 모델을 등록했다.
MLOps 및 MLflow의 기본 개념과 파이프라인 설계 방법을 정리해보았다. 다음 글에서는 MLflow API와 예제 코드를 통해 이를 더 자세히 다룰 예정이다.
참고 자료
'Data Engineering > Databricks & Delta Lake' 카테고리의 다른 글
[Databricks] Delta Live Table 로 파이프라인 개발 & 데이터 퀄리티 모니터링하기 (0) | 2024.04.14 |
---|---|
[Databricks] 데이터브릭스의 Unity Catalog 기능에 대해 살펴보기 (0) | 2024.03.31 |
[TIL] Delta Table에 upsert 하기 (0) | 2024.02.14 |
[Databricks] 데이터브릭스 무료 버전 사용하는 방법 (Databricks Community Edition) (0) | 2023.10.29 |
[AWS/Databricks] Databricks Workspace Private Link로 구성하기 - Private Link를 사용해야 하는 이유 & VPC Endpoint 유형 (0) | 2023.07.03 |