Search
Duplicate

MLflow와 Google Cloud Platform 연동(1) - 사전 준비

태그
MLflow
Google Cloud Platform
<Table of Contents> 개요
이번 포스팅의 주제는 MLflow를 클라우드 환경과 연동하는 것입니다.
이를 통해, ML 실험에 대한 아티팩트(artifact)와 여러 메타 데이터를 클라우드에서 저장하고 관리할 수 있습니다!
또한, 학습된 ML 모델을 Artifact store에서 불러와 추론(inference)을 안정적으로 수행할 수 있도록 도움을 줄 수 있어요.
연동 과정은 총 네 개의 포스팅에 걸쳐서 소개 드릴 예정입니다
사전 준비
본 포스팅에서는 MLflow와 Google Cloud Platform(GCP)를 연동하기 위해 필요한 사전 준비를 하도록 하겠습니다 :)

개요

사견이지만, 아래의 task를 수행하는 데 있어 MLflow와 클라우드의 역할이 상당히 크다고 생각합니다.
ML 실험 메타 데이터 저장
실험 과정 로깅
데이터 및 ML 모델 버전 관리
아티팩트 저장 및 관리
하지만, MLflow와 클라우드 플랫폼을 연동하는 일련의 과정에 대해 상세하게 정리한 포스팅이 많지 않다고 판단하였습니다. 따라서, 이번 기회를 바탕으로 공부한 내용을 정리할 겸, 일종의 ‘연동 가이드라인’을 만들자는 생각이 강하게 들었어요!
본 포스팅에서는 GCP를 통해 과정을 소개하도록 할게요.
MLflow와 GCP를 연동하는 프로세스는 다음 그림과 같습니다.
1.
로컬에서 Artifact Registry에 도커 이미지를 push합니다. 이때, 도커 이미지는 GCP 접근 및 MLflow 서버 구동을 위한 명령어 집합을 내포합니다.
2.
한편, 로컬에서 GCP VM(Virtual Machine) 인스턴스를 생성하는 과정을 수행합니다. GCP VM 인스턴스는 MLflow의 Tracking server 역할을 담당합니다.
3.
VM 인스턴스가 생성될 경우, 자동으로 Artifact Registry에서 도커 이미지를 가져와 도커 컨테이너를 구동합니다. 이때, 도커 컨테이너는 MLflow 서버를 구동하는 역할을 담당합니다.
4.
ML 실험을 수행할 때마다, Tracking server는 Artifact store와 Backend store에 각각 아티팩트와 실험 메타 데이터를 자동으로 저장합니다.

GCloud CLI 설치

1.
연동을 위한 사전 준비 과정으로서, 제일 먼저 수행해야 할 것은 gcloud CLI를 설치하는 것입니다.
gcloud CLI는 로컬 환경에서 구글 클라우드 플랫폼에 접근할 수 있도록 인터페이스를 제공합니다. 저는 WSL2의 Ubuntu 환경을 통해 설치를 수행하였습니다.
운영체제마다 설치 방법이 다를 수 있으니, 자세한 내용은 다음 링크에서 확인해주세요!
2.
설치를 하셨다면, 다음 명령어를 수행해줍시다.
$ gcloud init
Bash
복사
Welcome! This command will take you through the configuration of gcloud. Your current configuration has been set to: [default] You can skip diagnostics next time by using the following flag: gcloud init --skip-diagnostics Network diagnostic detects and fixes local network connection issues. Checking network connection...done. Reachability Check passed. Network diagnostic passed (1/1 checks passed). You must log in to continue. Would you like to log in (Y/n)? Y
Bash
복사
3.
링크를 클릭하여 GCP에서 사용할 Gmail 계정을 선택해주세요.
Your browser has been opened to visit: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=W7CUJyVK8GTwZXqcZcejfaXYVuHAAP&access_type=offline&code_challenge=r2z5OyKczeQLADKYMTCz9Bk3IyVT_8xDDTqo9K7EiFc&code_challenge_method=S256 gio: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=W7CUJyVK8GTwZXqcZcejfaXYVuHAAP&access_type=offline&code_challenge=r2z5OyKczeQLADKYMTCz9Bk3IyVT_8xDDTqo9K7EiFc&code_challenge_method=S256: Operation not supported You are logged in as: [your-gmail-address@gmail.com].
Bash
복사
해당 과정은 gcloud-auth-login 명령어 입력에 대응하며, CLI 상에서 직접 GCP 리소스와 상호작용할 때 사용하는 명령어입니다.
4.
GCP에서 사용할 기본 Gmail 계정을 사용하셨다면, 다음과 같이 기본 프로젝트를 선택할 수 있습니다.
Pick cloud project to use: [1] e2eml-jiho [2] sacred-alliance-412708 [3] Enter a project ID [4] Create a new project Please enter numeric choice or text value (must exactly match list item): 1 Your current project has been set to: [e2eml-jiho].
Bash
복사
저의 경우, e2eml-jiho 라는 프로젝트를 사전에 생성하여 해당 번호를 선택하였습니다. 프로젝트가 없으신 분은 콘솔에서 생성해주시면 됩니다!
5.
해당 과정을 마치셨다면, 다음 명령어를 실행해주세요.
$ gcloud auth application-default login
Bash
복사
해당 명령어는 로컬에 존재하는 어플리케이션(예: .py 파일)과 GCP API를 사용할 수 있도록 인증 과정을 수행합니다.
명령어를 수행할 경우, 다음과 같이 json 파일이 로컬에 저장된 것을 확인하실 수 있습니다. 해당 json 파일은 secret 파일로서, GCP API 기반 애플리케이션 실행을 위한 credential 정보입니다.
Credentials saved to file: [/home/jihoahn9303/.config/gcloud/application_default_credentials.json] These credentials will be used by any library that requests Application Default Credentials (ADC). Quota project "e2eml-jiho" was added to ADC which can be used by Google client libraries for billing and quota. Note that some services may still bill the project owning the resource.
Bash
복사
6.
마지막으로, 아래 두 명령어를 실행하여 클라이언트가 위치한 지역을 등록합시다.
$ gcloud config set compute/region <region-name> $ gcloud config set compute/zone <zone-name>
Bash
복사
저는 region-name으로 asia-northeast3 (서울)을, zone-name으로 asia-northeast3-c 를 지정하였습니다.
올바른 지역 설정은 Registry에서 데이터에 접근하거나, Cloud function을 호출하여 결과를 반환 받을 때 필요한 시간을 최소화할 수 있습니다.

Artifact store 생성

GCloud CLI를 설치하셨다면, GCP 상에서 Artifact store를 생성해야 합니다.
1.
브라우저에서 Google Cloud Console에 접속하신 후, 원하는 프로젝트를 선택해주세요!
2.
Cloud Storage > 버킷을 선택해주세요.
3.
좌측 상단에 만들기 버튼을 클릭해주세요.
4.
버킷 이름의 경우, 원하는 이름으로 입력해주세요.
5.
데이터 저장 위치 선택의 경우, 단일 리전(Region)을 선택합니다. 이때, 지역의 경우 gcloud CLI 설치 과정에서 등록했던 지역과 최대한 가까운 곳(일치하면 최상) 으로 선택해주세요.
6.
스토리지 클래스의 경우, Standard를 선택했습니다. 여러분들 상황에 맞춰 변경하실 수 있습니다.
7.
나머지 설정은 건드리지 않고, 가장 아래에 있는 만들기 버튼을 누르세요.
그럼 위 그림과 같이 버킷(Artifact store)이 만들어진 것을 확인할 수 있습니다.

Backend store 생성

이제는 Backend store를 생성할 시간입니다. 본 포스팅에서는 Backend store로서, Postgresql를 사용하도록 하겠습니다.
1.
SQL 인스턴스를 생성합니다. 콘솔에서 SQL을 선택하세요.
2.
인스턴스 만들기 버튼을 클릭하여 인스턴스를 생성합니다.
3.
데이터베이스는 PostgreSQL을 선택해주세요.
4.
인스턴스 ID는 원하는 것으로 입력해주세요.
5.
비밀번호는 추후 해당 SQL 인스턴스로 접근하기 위해 필요한 매우 중요한 정보입니다. 자동 생성 기능을 이용하셔도 되고 직접 지정하셔도 됩니다. 다만, 반드시 어딘가에 기록하여 비밀번호를 분실하는 일이 없도록 합시다.
6.
원하는 데이터베이스 버전을 선택해주세요. 저는 14 버전을 선택했습니다.
7.
Cloud SQL 버전 선택의 경우, Enterprise의 샌드박스 버전을 사용했습니다. 더 많은 기능 또는 고가용성이 필요하시다면 다른 버전을 선택할 수 있습니다.
8.
리전과 영역 가용성을 선택해주세요. 여기서는 단일 영역으로 합니다.
9.
인스턴스 맞춤설정에서 구성 옵션 표시를 클릭하세요.
10.
연결을 선택해주세요.
11.
연결 설정을 다음 그림과 같이 해주세요.
12.
인스턴스 만들기 버튼을 클릭하여 인스턴스를 생성합니다. 인스턴스 생성을 위해 수 분 이상이 소요될 수 있습니다.
13.
만들어진 인스턴스를 클릭하여 사용자를 선택합니다. Backend store에 접근할 사용자 정보를 등록하기 위함입니다.
14.
사용자 계정 추가 버튼을 클릭하여, 해당 인스턴스에 사용자를 추가합니다. 여기서 사용자 이름은 원하는 것으로 (저는 mlflow), 비밀번호는 5번 과정에서 생성한 SQL 인스턴스의 비밀번호 를 입력해줍니다.
15.
다시 SQL 탭으로 돌아와 데이터베이스를 클릭합니다.
16.
좌측 상단에 데이터베이스 만들기를 선택합니다. 데이터베이스의 이름은 원하는 것으로 지어줍시다.
17.
콘솔에서 보안 > Serect Manager를 선택합니다.
18.
좌측 상단에 보안 비밀 만들기 버튼을 클릭합니다. 이는, 추후 VM 인스턴스(Tracking server)에서 SQL 인스턴스(Backend store)에 접근하기 위해 필요한 키(password)를 저장하기 위함입니다. 세부 내용은 다음 포스팅에서 설명드리겠습니다.
19.
보안 비밀의 이름은 원하는 것으로, 보안 비밀 값에는 SQL 인스턴스의 비밀번호를 입력해주세요.
20.
다음 그림과 같이 비공개 IP가 할당된 SQL 인스턴스가 생성된 것을 확인할 수 있습니다.

Artifact registry 생성

드디어 사전 작업 과정의 마지막이 보이네요
조금만 더 힘을 내봅시다
Artifact registry는 VM 인스턴스에서 GCP 접근 및 MLflow 서버 구동에 필요한 도커 이미지를 저장하는 공간임을 다시 한 번 말씀드립니다 :)
1.
콘솔에서 Artifact Registry를 검색한 후 선택해주세요. 이때, API가 활성화 되어 있지 않다면, 보이는 창에서 활성화를 하시면 됩니다.
2.
좌측 상단에 저장소 만들기 버튼을 클릭합니다.
3.
이름은 원하는 것으로 지정해주세요.
4.
형식은 Docker, 모드는 표준으로 선택해줍니다.
5.
위치 유형의 경우 리전 을 선택해주며, 드롭박스에서 본인에게 적합한 리전을 지정해주세요.
6.
암호화의 경우 Google 관리 암호화 키 를 선택해줍시다.
7.
삭제 정책은 아티팩트 삭제 , 테스트 실행 중 어떤 것으로 하셔도 상관이 없습니다.
8.
다음 그림과 같이 Artifact Registry가 생성된 것을 확인하실 수 있습니다.
9.
마지막으로 아래의 CLI command를 실행해주세요. 추후, Artifact Registry에서 도커 이미지를 pull할 때, 해당 권한을 획득하기 위함입니다.
# gcloud auth configure-docker <region-name>-docker.pkg.dev $ gcloud auth configure-docker asia-northeast3-docker.pkg.dev
Bash
복사
고생하셨습니다

정리

본 포스팅에서는 MLflow와 Google Cloud Platform(GCP)를 연동하기 위해 다음의 사항들을 수행하였습니다.
GCloud CLI 설치
Artifact store 생성
Artifact Registry 생성
Backend Store 생성
이어지는 포스팅에서는 Docker 스크립트와 Shell 스크립트를 바탕으로 어떻게 GCP - MLflow 연동 프로세스를 자동화할 수 있는 지에 대해 설명하도록 하겠습니다.
그럼 안녕히 가세요
위로 올라가기
뒤로 가기
Reference