AI Platform 문서
https://cloud.google.com/ml-engine/docs/
AI Platform으로 머신러닝 기능 활용
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를 의미합니다.
'Biusiness Insight > Gen AI · Data Analytics' 카테고리의 다른 글
[구글 클라우드] Machine Learning APIs 활용하기 (0) | 2020.04.20 |
---|---|
[구글 클라우드] AI Platform Notebooks & BigQuery 를 사용한 데이터 분석 (0) | 2020.04.19 |
[구글 클라우드 플랫폼] 강화학습 활용 예제 (Reinforcement Learning on GCP) (0) | 2020.04.05 |
[구글 클라우드] 영상 분석 예제 (Video Intelligence) (0) | 2020.04.04 |
[구글 클라우드] 음성 처리 API 활용 예제 (Speech API) (0) | 2020.04.03 |