Custom Containers with AI Platform Training

Page content

인프런 강의

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`
  • 만약 실제 프로젝트에서 연결이 안되어 있다면 gcloud config set에서 참고합니다.

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를 진행하도록 한다.

Task 2. Create an instance of AI Platform Pipelines

  • Google Cloud Console의 탐색 메뉴에서 AI 플랫폼으로 스크롤하여 Pin 아이콘을 클릭합니다. 이렇게 하면 나중에 실습에서 쉽게 액세스할 수 있도록 메뉴 상단에 바로 가기가 만들어집니다.

  • AI 플랫폼 위에 놓고 파이프라인을 클릭합니다.
  • New instance를 생성합니다.
    • 이 때, 계정 확인이 잘 되었는지 확인합니다.
  • 다음 클라우드 API에 대한 액세스 허용을 선택하고 다른 설정을 변경하지 않은 상태로 둔 다음 클러스터 생성을 클릭합니다. 약 (5분 가량 시간이 소요됩니다.)
  • 생성 되는 동안에, Kubernetes EngineCompute Engine을 선택하여 클러스터가 형성되는 과정을 지켜봅니다.
  • 먼저 Kubernetes Engine입니다.

  • 그 다음, Compute Engine을 선택합니다.

  • 클러스터 생성이 완료되면 서비스 약관 상자를 선택하고 다른 설정을 변경하지 않은 상태로 둔 다음 배포를 클릭합니다. Kubeflow 파이프라인의 개별 서비스가 GKE 클러스터에 배포됩니다. 설치가 진행되는 동안 다음 단계로 진행합니다.

Task 3. Create an instance of AI Platform Notebooks

  • 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 파일에는 아래와 같이 설정이 되어 있다.
kfp==0.2.5
fire
gcsfs
~/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.txtDockerfile을 활용하여 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 플랫폼 > 노트북을 클릭합니다. 이전 단계에서 생성한 노트북 인스턴스가 나열됩니다.

Task 4. Clone the mlops-on-gcp repo within your AI Platform Notebooks instance

  • Jupyter lab에서 터미널을 엽니다.
  • 그리고 홈 폴더로 이동합니다.
$ cd home/jupyter
root@f65dca3b2c68:/home/jupyter# 
  • GCP github 폴더를 가져옵니다.
root@f65dca3b2c68:/home/jupyter# $ git clone https://github.com/GoogleCloudPlatform/mlops-on-gcp
  • 정상적으로 파일이 왔다면 아래와 같이 파일이 확인 될 것입니다.

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