본문 바로가기

Biusiness Insight/Data Science

[구글 클라우드] AI 플랫폼 활용

반응형

 

AI Platform 문서

https://cloud.google.com/ml-engine/docs/

 

AI Platform 문서  |  Google Cloud

머신러닝 모델을 위한 관리형 서비스입니다.

cloud.google.com

 

AI Platform으로 머신러닝 기능 활용

 

Harness the Power of Machine Learning with Cloud ML Engine | Google Cloud Labs

 

source : GCP qwiklabs

 

Google Cloud Shell 활성화하기

1. GCP Console의 오른쪽 상단 툴바에서 Cloud Shell 열기 버튼 클릭

 

2. 계속(Continue) 클릭

 

결과 화면 : 

 

 

가상 환경을 만들기

1. 패키지 목록 다운로드 & 업데이트

sudo apt-get update

 

2. Python 가상 환경 설치 (가상환경은 시스템 기본 패키지와 분리된 패키지 설치 가능)

sudo apt-get install virtualenv

- [Y / n] 프롬프트가 표시되면 Enter 클릭

.virtualenv -p python3 venv

 

3. 가상 환경 활성화

source venv/bin/activate

 

예제 repo 클로닝

1. cloudml-samples repo 클론

git clone https://github.com/GoogleCloudPlatform/cloudml-samples.git

 

2. cloudml-samples > census > estimator 디렉터리로 이동 (estimator 디렉터리에서 실행)

cd cloudml-samples/census/estimator

 

> 현재 디렉터리는 ~/cloudml-samples/census/estimator

 

 

로컬에서 학습 애플리케이션 개발 및 검증

학습 애플리케이션을 로컬에서 실행. 로컬 환경에서 제공하는  개발 및 검증 워크플로를 통해 빠르게 반복 가능.

** 애플리케이션을 로컬에서 디버깅하면 클라우드 리소스 관련 비용이 발생하지 않음

 

학습 데이터 가져오기

- 관련 데이터 파일인 adult.data  adult.test는 공개 Google Cloud Storage 버킷에서 호스팅됨

- 로컬 학습을 위해 샘플을 다운로드한 다음 나중에 클라우드 학습을 위해 자체 Cloud Storage 버킷에 업로드 예정

 

1. 데이터를 로컬 파일 디렉터리에 다운로드하고 다운로드한 데이터 파일을 가리키는 변수 설정

mkdir data gsutil -m cp gs://cloud-samples-data/ml-engine/census/data/* data/

 

2. TRAIN_DATA  EVAL_DATA 변수를 로컬 파일 경로로 설정

export TRAIN_DATA=$(pwd)/data/adult.data.csv export EVAL_DATA=$(pwd)/data/adult.test.csv

 

3. adult.data.csv 파일 오픈

head data/adult.data.csv

 

4. 데이터 확인 : 쉼표로 구분된 값 형식

39, State-gov, 77516, Bachelors, 13, Never-married, Adm-clerical, 
Not-in-family, White, Male, 2174, 0, 40, United-States, 
<=50K 50, Self-emp-not-inc, 83311, Bachelors, 13, Married-civ-spouse, Exec-managerial, 
Husband, White, Male, 0, 0, 13, United-States, 
<=50K 38, Private, 215646, HS-grad, 9, Divorced, Handlers-cleaners, 
Not-in-family, White, Male, 0, 0, 40, United-States, 
<=50K 53, Private, 234721, 11th, 7, Married-civ-spouse, Handlers-cleaners, 
Husband, Black, Male, 0, 0, 40, United-States, <=50K ...

 

 

 

종속 항목 설치

- Cloud Shell에는 TensorFlow가 설치되어 있지만 샘플에 필요한 버전과 동일한 TensorFlow 버전인지 확인 필요

1. 샘플의 requirements.txt 파일 실행 

pip install -r ../requirements.txt

 

출력 결과 예시 :

Successfully installed Keras-2.3.1 
absl-py-0.8.0 astor-0.8.0 future-0.16.0 gast-0.3.2 google-pasta-0.1.7
grpcio-1.24.1 h5py-2.10.0 keras-applications-1.0.8 keras-preprocessing-1.1.0 
markdown-3.1.1 numexpr-2.7.0 numpy-1.17.2 pandas-0.25.1 
protobuf-3.10.0 python-dateutil-2.8.0 pytz-2019.3 pyyaml-5.1.2 
scipy-1.3.1 six-1.12.0 tensorboard-1.14.0 tensorflow-1.14.0 
tensorflow-estimator-1.14.0 termcolor-1.1.0 werkzeug-0.16.0 wrapt-1.11.2

 

2. pandas 설치 : 버전 <0.25이어야 함

pip install pandas==0.24.2

 

3. 설치 확인

python -c "import tensorflow as tf; print('TensorFlow version {} is installed.'.format(tf.__version__))"

 

※ TensorFlow 라이브러리가 특정 명령어를 사용하도록 컴파일되지 않았다는 경고 무시

 

로컬 학습 작업 실행

- 로컬 학습 작업은 Python 학습 프로그램을 로드하고 실제 AI Platform클라우드 학습 작업과 비슷한 환경에서 학습 프로세스 시작

 

1. 출력 디렉터리를 지정하고 MODEL_DIR 변수 설정

export MODEL_DIR=output

 

2. 학습 작업을 로컬에서 실행

gcloud ai-platform local train \ 
  --module-name trainer.task \ 
  --package-path trainer/ \ 
  --job-dir $MODEL_DIR \ 
  -- \ 
  --train-files $TRAIN_DATA \ 
  --eval-files $EVAL_DATA \ 
  --train-steps 1000 \ 
  --eval-steps 100

 

※ 상세 로깅은 기본적으로 해제되어 있음 --verbosity 태그를 DEBUG로 설정 가능

 

 

텐서보드로 요약 로그 검사

텐서보드라는 시각화 도구를 사용하여 평가 결과를 확인할 수 있음.

- 텐서보드로 TensorFlow 그래프를 시각화하고, 그래프 실행에 대한 측정항목을 수치로 나타내고, 그래프를 통과하는 이미지와 같은 추가 데이터를 표시 가능

- 텐서보드는 TensorFlow를 설치할 때 함께 설치됨

 

1. 텐서보드 실행

tensorboard --logdir=$MODEL_DIR --port=8080

 

2. 웹 미리보기 아이콘을 클릭한 다음 포트 8080에서 미리보기를 클릭. 텐서보드가 실행 중인 상태로 새 탭이 열림

 

3. Accuracy를 클릭하여 작업 진행에 따른 정확성의 변화를 그래프로 확인합니다.

4. Cloud Shell에서 Ctrl+C를 입력하여 텐서보드 종료

 

5. output/export/census 디렉터리에는 로컬에서 학습을 실행한 결과로 내보낸 모델이 저장됨

- 해당 디렉터리를 나열하여 생성된 타임스탬프 하위 디렉터리 확인

ls output/export/census/

 

결과 예시 :

1547669983

 

(생성된 타임스탬프를 복사)

 

6. Cloud Shell에서 다음 명령어 실행 <timestamp>는 위에서 복사한 타임스탬프로 변경

gcloud ai-platform local predict \ 
  --model-dir output/export/census/<timestamp> \ 
  --json-instances ../test.json

 

RuntimeError: Bad magic number in .pyc file가 표시되는 경우에는 아래 명령을 실행하고 위의 명령어를 재실행

sudo rm -rf /google/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine/*.pyc

 

결과 예시 :

CLASS_IDS CLASSES LOGISTIC LOGITS PROBABILITIES [0] [u'0'] 
[0.0583675391972065] [-2.780855178833008] [0.9416324496269226, 0.0583675354719162]

 

여기서 클래스 0은 소득 <= 50k이고 클래스 1은 소득 > 50k를 의미

 

학습된 모델을 사용하여 예측

TensorFlow 모델을 학습시킨 후에는 이 모델을 사용하여 새로운 데이터를 예측할 수 있음

- 예제 : 인구조사 모델을 학습하여 몇 가지 정보가 주어진 한 개인에 대한 소득 범주 예측 (test.json 사용 : GitHub 저장소의 census 디렉터리)

 

클라우드에서 학습 작업 실행

로컬에서 모델을 실행하여 검증 → AI Platform을 사용

 

Google Cloud Storage 버킷 설정

AI Platform 서비스는 모델 학습 및 일괄 예측 중에 데이터를 읽고 쓸 수 있도록 GCS(Google Cloud Storage)에 액세스할 수 있어야 함

 

1. 변수 설정

PROJECT_ID=$(gcloud config list project --format "value(core.project)") 
BUCKET_NAME=${PROJECT_ID}-mlengine echo $BUCKET_NAME REGION=us-central1

 

2. 새 버킷을 생성

gsutil mb -l $REGION gs://$BUCKET_NAME

 

3. Cloud Storage 버킷에 데이터 파일 업로드

 

4. gsutil을 사용하여 Cloud Storage 버킷에 두 파일을 복사

gsutil cp -r data gs://$BUCKET_NAME/data

 

5. TRAIN_DATA 및 EVAL_DATA 변수가 해당 파일을 가리키도록 설정

TRAIN_DATA=gs://$BUCKET_NAME/data/adult.data.csv 
EVAL_DATA=gs://$BUCKET_NAME/data/adult.test.csv

 

6. gsutil을 다시 사용하여 Cloud Storage 버킷에 JSON 테스트 파일 test.json을 복사

gsutil cp ../test.json gs://$BUCKET_NAME/data/test.json

 

7. TEST_JSON 변수가 해당 파일을 가리키도록 설정

TEST_JSON=gs://$BUCKET_NAME/data/test.json

 

 

클라우드에서 단일 인스턴스 트레이너 실행

 

1. 최초 학습 실행의 이름을 이후의 학습 실행과 구분할 수 있는 이름으로 선택

JOB_NAME=census_single_1

 

2. AI Platform이 생성하는 출력에 대한 디렉터리를 지정

- 학습 및 예측 작업을 요청할 때 포함할 OUTPUT_PATH 변수를 설정하면 됨

- OUTPUT_PATH는 모델 체크포인트, 요약, 내보내기에 대한 정규화된 Cloud Storage 위치를 나타냄

- 이전 단계에서 정의한 BUCKET_NAME 변수를 사용할 수 있음 (job name을 출력 디렉터리로 사용하는 것이 좋음)

OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME

 

3. 클라우드에서 단일 프로세스를 사용하는 학습

- 전체 로깅 출력을 검사하고 정확성, 손실, 기타 측정항목을 검사할 수 있도록 --verbosity 태그를 DEBUG로 설정

- 출력에 경고 메시지가 포함되지만 이 샘플에서는 무시해도 무방함

gcloud ai-platform jobs submit training $JOB_NAME \ 
  --job-dir $OUTPUT_PATH \ 
  --runtime-version 1.14 \ 
  --python-version 3.5 \ 
  --module-name trainer.task \ 
  --package-path trainer/ \ 
  --region $REGION \ 
  -- \ 
  --train-files $TRAIN_DATA \ 
  --eval-files $EVAL_DATA \ 
  --train-steps 1000 \ 
  --eval-steps 100 \ 
  --verbosity DEBUG

 

4. 명령줄에서 로그를 보고 학습 작업의 진행 상황을 모니터링할 수 있음.

gcloud ai-platform jobs stream-logs $JOB_NAME

 

- 또는 콘솔의 AI Platform > 작업에서도 모니터링 가능

 

 

출력 검사

1. Cloud Shell에서 작업을 모니터링한 경우 다음과 같은 출력이 나타나면 작업이 완료된 것

INFO 2019-01-16 12:58:34 -0800 master-replica-0 Task completed successfully.

 

2. 클라우드 학습에서는 출력이 Cloud Storage에 생성됨

- 이 샘플에서는 출력이 OUTPUT_PATH에 저장되며, 출력을 나열하려면 다음을 실행

gsutil ls -r $OUTPUT_PATH

 

(로컬 학습 출력과 비슷한 출력이 표시됨)

 

3. 선택사항: 텐서보드가 이 디렉터리를 가리키게 하고 학습 중 또는 학습 후에 Cloud Shell 상단의 웹 미리보기 메뉴를 사용하여 포트 8080에서 미리보기를 다시 선택할 수 있음

tensorboard --logdir=$OUTPUT_PATH --port=8080

 

4. 명령줄에서 ctrl+c를 입력하면 텐서보드 종료

 

 

모델을 배포하여 예측 지원

- 학습된 모델을 AI Platform에 배포하여 온라인 예측 요청에 응답하게 함으로써 확장 가능한 서비스 제공의 이점을 누릴 수 있음 (이 방법은 학습된 모델이 짧은 시간 내에 많은 예측 요청에 직면할 것으로 예상될 경우 유용)

- AI Platform 학습이 끝날 때까지 대기. Cloud Console의 작업 이름 옆에 녹색 확인 표시가 나타나거나 Cloud Shell 명령줄에 Job completed successfully 메시지가 표시되면 작업이 완료된 것

 

1. AI Platform 모델 생성

MODEL_NAME=census

 

 

gcloud ai-platform models create $MODEL_NAME --regions=$REGION

 

 

2. 학습된 모델 바이너리 내보내기의 전체 경로를 찾아 사용할 내보낸 모델을 선택

gsutil ls -r $OUTPUT_PATH/export

 

3. 출력을 스크롤하여 $OUTPUT_PATH/export/census/<timestamp>/ 값을 찾아

- 타임스탬프를 복사하고 다음 명령어에 추가하여 환경 변수 MODEL_BINARIES를 해당 값으로 설정

MODEL_BINARIES=$OUTPUT_PATH/export/census/<timestamp>/

 

참고: 타임스탬프는 위의 로컬 학습 실행 중에 생성된 타임스탬프와 동일하지 않음. ( gsutil ls 출력을 스크롤하여 이 타임스탬프 찾기)

 

학습 모델 배포

4. 다음 명령어를 실행하여 모델 버전 v1을 만듬

gcloud ai-platform versions create v1 \ 
  --model $MODEL_NAME \ 
  --origin $MODEL_BINARIES \ 
  --runtime-version 1.14 \ 
  --python-version 3.5

 

- 학습된 모델을 배포하는 데는 몇 분 정도 걸릴 수 있음

 

5. 완료되면 models list 명령어를 사용하여 모델 목록 확인 가능

gcloud ai-platform models list

 

 

배포된 모델에 온라인 예측 요청 보내기

 

1. 다음 명령어는 GitHub 저장소에 포함된 test.json 파일을 사용하여 예측 요청을 보냄

gcloud ai-platform predict \ 
  --model $MODEL_NAME \ 
  --version v1 \ 
  --json-instances ../test.json

 

2. 응답에는 test.json 파일에 있는 데이터 항목을 기반으로 각 라벨(>50K  <=50K)의 확률이 포함되므로 예상 소득이 50,000달러보다 높은지 아니면 낮은지를 알 수 있음

CLASS_IDS CLASSES LOGISTIC LOGITS PROBABILITIES [0] [u'0'] 
[0.06142739951610565] [-2.726504325866699] [0.9385725855827332, 0.061427392065525055]

 

여기서 클래스 0은 소득 <= 50k이고 클래스 1은 소득 > 50k를 의미합니다.

 

반응형