1줄 요약
UCI Machine Learning Repository
데이터를 활용해서 MLOps를 구축해본다.
- 본 장에서는 MLOps의 간단한 흐름을 파악하는데 주력한다.
- 실제로는 하나부터 열까지 모든 코드를 따 짜야 한다.
- 관련 내용은 추후에 여유가 될 때 업데이트를 해보도록 한다.
감사 인사
- God Google 감사합니다.
- God Coursera 감사합니다.
Objectives
- Create a train and a validation split with BigQuery.
- Wrap a machine learning model into a Docker container and train it on AI Platform.
- Use the hyperparameter tuning engine on Google Cloud to find the best hyperparameters.
- Deploy a trained machine learning model on Google Cloud as a REST API and query it.
Task 0: Setup
- 클라우드 창에서 Cloud Shell을 활성화 합니다. (그림 생략)
- 현재 프로젝트가 잘 연결이 되어 있는지 확인합니다.
$ student_02_2523be913322@cloudshell:~ (qwiklabs-gcp-02-9960bd90e36a)$ gcloud auth list
Credentialed Accounts
ACTIVE ACCOUNT
* student-02-2523be913322@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
Task 1: Enable Cloud Services
- 여러 형태의 클라우드 서비스를 실행해야 하는 코드를 작성한다.
- 먼저, Cloud Shell에서 프로젝트 ID를 Google Cloud Project로 설정하려면 다음 명령을 실행합니다.
$ export PROJECT_ID=$(gcloud config get-value core/project)
$ gcloud config set project $PROJECT_ID
- 필요한 클라우드 서비스를 활용하기 위해 다음 명령어를 추가합니다.
$ gcloud services enable \
cloudbuild.googleapis.com \
container.googleapis.com \
cloudresourcemanager.googleapis.com \
iam.googleapis.com \
containerregistry.googleapis.com \
containeranalysis.googleapis.com \
ml.googleapis.com \
dataflow.googleapis.com
- Cloud Build 서비스 계정에 대한 Editor 사용 권한 추가 합니다.
$ PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
CLOUD_BUILD_SERVICE_ACCOUNT="${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$CLOUD_BUILD_SERVICE_ACCOUNT \
--role roles/editor
Updated IAM policy for project [qwiklabs-gcp-02-9960bd90
e36a].
bindings:
- members:
- serviceAccount:qwiklabs-gcp-02-9960bd90e36a@qwiklabs
-gcp-02-9960bd90e36a.iam.gserviceaccount.com
- user:student-02-2523be913322@qwiklabs.net
role: roles/appengine.appAdmin
- members:
- serviceAccount:qwiklabs-gcp-02-9960bd90e36a@qwiklabs
-gcp-02-9960bd90e36a.iam.gserviceaccount.com
.
.
.
- members:
- serviceAccount:qwiklabs-gcp-02-9960bd90e36a@qwiklabs-gcp-02-9960bd90e36a.iam.gserviceaccount.com
- user:student-02-2523be913322@qwiklabs.net
role: roles/viewer
etag: BwXBj7nBxIk=
version: 1
- 각각의 Role의 역할이 바뀐것을 확인했다면, 다음 Task를 진행하도록 한다.
- Google Cloud Console의 탐색 메뉴에서 AI 플랫폼으로 스크롤하여 Pin 아이콘을 클릭합니다. 이렇게 하면 나중에 실습에서 쉽게 액세스할 수 있도록 메뉴 상단에 바로 가기가 만들어집니다.
![](https://dschloe.github.io/img/mlops/ch03_ai_platform/ch01_custom_containers/tutorial_01.png)
- AI 플랫폼 위에 놓고 파이프라인을 클릭합니다.
- New instance를 생성합니다.
- 이 때, 계정 확인이 잘 되었는지 확인합니다.
- 다음 클라우드 API에 대한 액세스 허용을 선택하고 다른 설정을 변경하지 않은 상태로 둔 다음 클러스터 생성을 클릭합니다. 약 (5분 가량 시간이 소요됩니다.)
- 생성 되는 동안에,
Kubernetes Engine
과 Compute Engine
을 선택하여 클러스터가 형성되는 과정을 지켜봅니다.
- 먼저
Kubernetes Engine
입니다.
![](https://dschloe.github.io/img/mlops/ch03_ai_platform/ch01_custom_containers/tutorial_02.png)
- 그 다음,
Compute Engine
을 선택합니다.
![](https://dschloe.github.io/img/mlops/ch03_ai_platform/ch01_custom_containers/tutorial_03.png)
- 클러스터 생성이 완료되면 서비스 약관 상자를 선택하고 다른 설정을 변경하지 않은 상태로 둔 다음 배포를 클릭합니다. Kubeflow 파이프라인의 개별 서비스가 GKE 클러스터에 배포됩니다. 설치가 진행되는 동안 다음 단계로 진행합니다.
![](https://dschloe.github.io/img/mlops/ch03_ai_platform/ch01_custom_containers/tutorial_04.png)
- Cloud Shell에서 홈 디렉토리에 폴더를 생성합니다.
$ cd
$ mkdir tmp-workspace
$ cd tmp-workspace
~/tmp-workspace (qwiklabs-gcp-02-9960bd90e36a)$ gsutil cp gs://cloud-training/OCBL203/requirements.txt .
requirements.txt
파일에는 아래와 같이 설정이 되어 있다.
~/tmp-workspace (qwiklabs-gcp-02-9960bd90e36a)$ gsutil cp gs://cloud-training/OCBL203/Dockerfile .
Dockerfile
에는 아래와 같이 설정이 되어 있다.
FROM gcr.io/deeplearning-platform-release/base-cpu
SHELL ["/bin/bash", "-c"]
RUN apt-get update -y && apt-get -y install kubectl
COPY requirements.txt .
RUN python -m pip install -U -r requirements.txt
requirements.txt
와 Dockerfile
을 활용하여 Docker Image를 만든다.
~/tmp-workspace (qwiklabs-gcp-02-9960bd90e36a)$ IMAGE_NAME=kfp-dev
~/tmp-workspace (qwiklabs-gcp-02-9960bd90e36a)$ TAG=latest
~/tmp-workspace (qwiklabs-gcp-02-9960bd90e36a)$ IMAGE_URI="gcr.io/${PROJECT_ID}/${IMAGE_NAME}:${TAG}"
~/tmp-workspace (qwiklabs-gcp-02-9960bd90e36a)$ gcloud builds submit --timeout 15m --tag ${IMAGE_URI} .
.
.
.
latest: digest: sha256:ec1f40b078a0e3e46b316e57a9b28a4146b078847acbdd17e72fa8b905590f25 size: 4917
DONE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE
IMAGES STATUS
5a28221f-77e0-42d8-afe4-55f775bfbf79 2021-05-05T07:38:00+00:00 2M15S gs://qwiklabs-gcp-02-9960bd90e36a_cloudbuild/source/1620200278.303062-a86f73ed9e5d45648c0727b97085b146.tgz
gcr.io/qwiklabs-gcp-02-9960bd90e36a/kfp-dev (+1 more) SUCCESS
AI Platform Notebook
을 생성합니다.
$ ZONE=us-central1-a
$ INSTANCE_NAME=ai-notebook
- 다른 ZONE과 Instance_NAME을 사용하려면 us-central1-a를 선택한 [YOUR_ZONE]으로 바꾸고 ai-notebook을 선택한 인스턴스 이름으로 [YOUR_INSTANCE_NAME]로 바꾸십시오.
IMAGE_FAMILY="common-container"
IMAGE_PROJECT="deeplearning-platform-release"
INSTANCE_TYPE="n1-standard-4"
METADATA="proxy-mode=service_account,container=$IMAGE_URI"
gcloud compute instances create $INSTANCE_NAME \
--zone=$ZONE \
--image-family=$IMAGE_FAMILY \
--machine-type=$INSTANCE_TYPE \
--image-project=$IMAGE_PROJECT \
--maintenance-policy=TERMINATE \
--boot-disk-device-name=${INSTANCE_NAME}-disk \
--boot-disk-size=100GB \
--boot-disk-type=pd-ssd \
--scopes=cloud-platform,userinfo-email \
--metadata=$METADATA
- 완료하는 데 최대 5분이 걸릴 수 있습니다.
- 이 작업이 완료가 되면, AI 플랫폼 > 노트북을 클릭합니다. 이전 단계에서 생성한 노트북 인스턴스가 나열됩니다.
![](https://dschloe.github.io/img/mlops/ch03_ai_platform/ch01_custom_containers/tutorial_05.png)
Jupyter lab
에서 터미널
을 엽니다.
- 그리고 홈 폴더로 이동합니다.
$ cd home/jupyter
root@f65dca3b2c68:/home/jupyter#
root@f65dca3b2c68:/home/jupyter# $ git clone https://github.com/GoogleCloudPlatform/mlops-on-gcp
- 정상적으로 파일이 왔다면 아래와 같이 파일이 확인 될 것입니다.
![](https://dschloe.github.io/img/mlops/ch03_ai_platform/ch01_custom_containers/tutorial_06.png)
Task 5. Navigate to the mlops-on-gcp notebook
- 노트북 인터페이스에서 mlops-on-gcp > on_demand > kfp-caip-sklearn > lab-01-caip-containers > exercise 이동하고 lab-01.ipynb를 엽니다.
- 중간 중간 마다, #TO DO에 해당하는 영역은 직접 코딩을 진행해야 합니다.
- 만약 Solution.ipynb 파일 확인을 원한다면 mlops-on-gcp > on_demand > kfp-caip-sklearn > lab-01-caip-containers에서 lab-01.ipynb파일을 확인합니다.
- 최종 정답 파일은 다음 링크를 확인합니다.
Reference