간략히, Azure Databricks에서 MLOps를 구현한 케이스를 리뷰하고, 실제 구현 코드를 살펴보기 위한 포스팅.

 

Azure Databricks MLOps 코드는 아래 Github Repository의 내용으로 리뷰

Azure-Samples/azure-databricks-mlops-mlflow: Azure Databricks MLOps sample for Python based source code using MLflow without using MLflow Project. (github.com)

 

Azure Databricks와 MLOps

Azure Databricks는 Spark 코어를 사용해 훌륭한 머신러닝 분산 트레이닝 과정을 수행할 수 있으며, MLflow를 활용해 머신러닝 프로젝트의 전체 라이프사이클을 관리할 수 있다. AzureML로 여러 MLOps 프로젝트를 진행하였으며, Databricks에서는 이런 MLOps를 어떻게 구축하는지 실제 코드와 실행 패턴을 살펴보고 리뷰한다.

 

Databricks MLOps 아키텍처

머신러닝 Training 아키텍처와 Batch scoring 아키텍처로 구성된다. Batch scoring 부분은 Training이 완료된 머신러닝 모델을 MLflow Model Registry로부터 가져와 진행하게 된다.

 

model_training.png

MLOps 경험이 있다면 알겠지만, 어플리케이션 개발자와 협업해 시너지를 내기 위한 CI(일부만 존재)/CD 부분이나 Serving 모듈이 없다. 일반적으로 Databricks-Spark을 이용하는 Batch scoring이 목표이지 실시간 Serving이 목표가 아니기 때문이다. 이부분을 염두에 두고 리뷰하자.

 

Azure Databricks MLOps 실행

진행하면서 여러 오류로 시행착오가 있었다. 관련 부분도 문서에 추가해 두었다.

특이하게 대부분의 코드를 make로 bash를 모듈화 했으며, 코드 배포는 Python wheel package로 만들어 처리한다. Databricks가 권장하는 방안인지 정확치 않다.

Repository Clone 및 make 수행

전체 과정은 모두 WSL의 Ubuntu에서 수행했다.

 

- github repository clone 수행

git clone https://github.com/Azure-Samples/azure-databricks-mlops-mlflow.git

 

- make 수행

Python 3.8+ Conda 환경을 하나 생성하고 수행하였다. 혹시 make 과정에서 matplotlib 이 없다는 오류가 나오면 "pip install matplotlib" 으로 추가하고 다시 수행한다.

cd azure-databricks-mlops-mlflow
make install
make dist

추가적으로, make test하면 flake8 lint 및 coverage로 unit test를 수행한다.

Azure resource 생성 - ARM template

Azure ARM template script를 제공해 스크립트로 설치한다. az cli 설치 관련해서는 아래 링크를 참조한다.

개발자 커뮤니티 SQLER.com - Azure cli - command line interface 명령줄 인터페이스 도구를 쓰는 이유와 방법

ARM template 파일은 "ml_ops/deployment/arm_templates/databricks_and_storage.json" 경로에 위치한다.

 

# azure에 interactive login수행
az login

# resource group 생성
# az group create --name <리소스그룹이름> --location <지역>
az group create --name rg-dbmlops02 --location koreacentral

# ARM script를 이용해 리소스 배포
az deployment group create --resource-group rg-dbmlops02 --template-file ./ml_ops/deployment/arm_templates/databricks_and_storage.json


Databricks cli로 설정 수행

- Databricks cli 설치

Databricks CLI - Azure Databricks | Microsoft Docs 문서를 참조해 아래 명령으로 Databricks cli를 설치한다.

pip install databricks-cli

 

Databricks에서 PAT(Personal Access Token)를 생성해 잘 기록해 둔다.

Authentication using Azure Databricks personal access tokens - Azure Databricks | Microsoft Docs

 

- Authentication을 수행

# Databricks URI와 PAT를 입력
make databricks-authenticate

Azure에서 ARM Template 스크립트로 생성한 Databricks에 접속하면 Databricks Workspace URI를 볼 수 있다. 아래와 같은 패턴이다.

- https://adb-XXXXXXXXXXX.azuredatabricks.net/

PAT는 조금 전에 생성한 PAT를 입력한다.

 

- Databricks init 과정 수행

make databricks-init

수행하면, Databricks에 Cluster, Workspace, Experiment, secret scope 등을 구성한다.

 

참고: jq가 없을 경우 오류가 발생한다.

/bin/bash: line 10: jq: command not found

jq가 없을 경우 아래 명령으로 설치하고 수행한다. (Ubuntu 기준)

sudo curl -L -o /usr/bin/jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
sudo chmod +x /usr/bin/jq

jq 프로젝트 Github의 Release에 여러 OS용 버전이 제공된다. 자신의 OS에 맞는 jq를 설치한다.

 

저장소 - Azure Data Lake Storage Gen2 구성

ARM Template 스크립트로 생성한 리소스 그룹의 Storage를 열고, Storage account name과 key를 가져와 명령 실행에 사용한다.

Storage account name과 key를 확인하는 방법은 아래 문서 참조.

Manage account access keys - Azure Storage | Microsoft Docs

 

- Blob storage에 "diabetes" container 생성 cli 명령

az storage container create -n diabetes --account-name <STORAGE_ACCOUNT_NAME> --account-key <STORAGE_ACCOUNT_KEY>

조금 전 확인한 Name과 Key를 입력해 수행한다.

 

- Diabetes container에 파일 업로드 cli 명령

data_batch_input.csv 파일과 data_raw.csv 파일 두개를 diabetes container에 업로드한다.

az storage blob upload \
    --account-name <STORAGE_ACCOUNT_NAME> \
    --account-key <STORAGE_ACCOUNT_KEY> \
    --container-name diabetes \
    --name data_batch_input.csv \
    --file ./ml_data/data_batch_input.csv

az storage blob upload \
    --account-name <STORAGE_ACCOUNT_NAME> \
    --account-key <STORAGE_ACCOUNT_KEY> \
    --container-name diabetes \
    --name data_raw.csv \
    --file ./ml_data/data_raw.csv

 

- Databricks에 storage account "shared key"(storage account key와 같다)를 secret scope에 추가

make databricks-secrets-put

storage account key를 입력한다.

 

- Application Insight Key 추가

어플리케이션 로깅에 사용될 Application Insight Key(Instrumental Key)를 추가한다.

Azure 리소스 그룹을 확인하면, ARM Template 스크립트로 자동 생성된 Application Insight이 있다. 이곳에서 Instrumental Key를 볼 수 있다.

make databricks-add-app-insights-key

 

Azure Databricks로 코드 배포 후 머신러닝 Training / Scoring 수행

- 생성했던 패키지 코드를 Azure Databricks로 배포

make deploy

 

- Databricks에서 training 작업 수행

make run-diabetes-model-training

명령을 수행하면, 수행 중인 run의 링크가 나온다. 또는 Azure Databricks Workspace의 Experiment에서 Run을 볼 수 있다.

MLOps orchestration으로 수행되는 diabetes training 코드는 이곳에서 확인할 수 있다.

 

- Databricks에서 batch scoring 작업 수행

make run-diabetes-batch-scoring

마찬가지로, scoring 과정 수행 중인 run을 볼 수 있다. 위의 training 과정이 완료된 후 수행해야 한다. Batch scoring 코드는 이곳에서 볼 수 있다.

 

 

Data scientist를 위한 MLOps - CI/CD 없음

이렇게 간략히, Azure Databricks MLOps 프로젝트를 살펴보았다.

Data scientist 입장에서 좋은 흐름과 MLOps 과정을 진행하지만, 어플리케이션 개발팀과 함께 시너지를 내어 model과 코드를 배포하는 과정이 아닌, 일반적인 batch scoring을 목표로 하는 코드이다. 그렇다 보니, 개발자와 협업이 필요한 CI/CD 부분과 model serving을 위한 deployment 부분이 없다.

 

batch_scoring.png

Batch scroing 아키텍처 - Training이 완료되어 MLflow Model Registry에 publish된 모델을 Load해 Batch Scoring을 수행한다.

 

다음 포스팅에서는 다른 Databricks MLOps repository를 살펴보고, Azure Databricks와 MLflow를 활용해 serving까지 진행하는 코드를 살펴보도록 하겠다.

 

참고자료

Azure-Samples/azure-databricks-mlops-mlflow: Azure Databricks MLOps sample for Python based source code using MLflow without using MLflow Project. (github.com)

개발자 커뮤니티 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 배포

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 40012
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 21950
54 AI, 머신러닝, MLOps – Azure에서 톺아보기! | Developer Digital Meetup Tour 코난(김대우) 2022.11.15 169
53 자동화된 ML, 나도 해보자! | ep4-1. 자동화된ML 결과 해석하기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.11 84
52 자동화된 ML, 나도 해보자! | ep3-2. GUI로 자동화된ML 직접 해보기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.09 129
51 자동화된 ML, 나도 해보자! | ep3-1. GUI로 자동화된ML 직접 해보기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.05 138
50 자동화된 ML, 나도 해보자! | ep2. 애저ML 처음 시작하기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.02 107
49 자동화된 ML, 나도 해보자! | ep1. 자동화된 ML이 왜 필요한가 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.01 126
48 자동화된 ML, 나도 해보자! | ep0. 인트로 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.31 140
47 마이크로소프트 신텍스(Syntex) file 코난(김대우) 2022.10.27 113
46 텍스트로 3D 오브젝트를 생성 - 구글의 DreamFusion file 코난(김대우) 2022.10.21 456
45 콘텐츠가 데이터 분석을 만났을 때 - #hashTECH Start-Up 코난(김대우) 2022.10.18 88
44 DALL-E 2 - Azure OpenAI 서비스 file 코난(김대우) 2022.10.18 201
43 Ignite 2022의 Codex 데모 - 2022년 10월 버전 file 코난(김대우) 2022.10.16 117
42 kakaobrain pororo - Natural Language Inference 리뷰 코난(김대우) 2021.10.29 852
41 (4) AzureML - Azure Machine Learning 모델 배포(Deploy) [1] file 코난(김대우) 2021.10.27 542
40 (3) AzureML - Azure Machine Learning 구성요소 file 코난(김대우) 2021.10.27 326
39 (2) AzureML - Azure Machine Learning 이란 무엇인가? file 코난(김대우) 2021.10.25 476
38 kakaobrain pororo - Automated Essay Scorer 리뷰 코난(김대우) 2021.10.21 400
37 kakobrain에서 발표한 pororo 리뷰 file 코난(김대우) 2021.10.20 1342
36 Azure Databricks MLflow를 이용한 MLOps - CI/CD 및 deployment 포함 file 코난(김대우) 2021.10.15 324
» Azure Databricks MLflow를 이용한 MLOps file 코난(김대우) 2021.10.14 396





XE Login