AI Platform Training의 기본 제공 알고리즘을 사용하면 학습 애플리케이션용 코드를 작성하지 않고도 학습 데이터를 제출하고, 알고리즘을 선택한 후 AI Platform Training이 사전 처리 및 학습을 자동으로 처리하도록 할 수 있습니다. 기본 제공 이미지 알고리즘을 사용하면 최소한의 구성으로 TPU를 학습시킬 수 있습니다. 최종 TensorFlow 저장된 모델은 CPU 및 GPU에서 사용할 수 있습니다.
개요
이 튜토리얼에서는 코드를 작성하지 않고 이미지 분류 모델을 학습시킵니다. 학습을 위해 꽃 데이터 세트를 AI Platform Training에 제출한 다음 모델을 AI Platform Prediction에 배포하여 예측을 수행합니다. 결과 모델은 꽃의 종류(데이지, 튤립, 장미, 해바라기, 민들레)에 따라 꽃 이미지를 분류합니다.
시작하기 전에
명령줄에서 이 튜토리얼을 수행하려면 Cloud Shell 또는 Google Cloud CLI가 설치된 환경을 사용합니다.
다음 단계에 따라 GCP 계정을 설정하고, 필요한 API를 사용 설정하고, Google Cloud CLI를 설치 및 활성화합니다.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
프로젝트에 액세스하도록 Cloud TPU 승인
다음 단계를 수행하여 Google Cloud 프로젝트와 연결된 Cloud TPU 서비스 계정 이름을 승인합니다.
projects.getConfig
를 호출하여 Cloud TPU 서비스 계정 이름을 가져옵니다. 예를 들면 다음과 같습니다.PROJECT_ID=PROJECT_ID curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
API에서 반환한
serviceAccountProject
및tpuServiceAccount
필드 값을 저장합니다.Cloud TPU 서비스 계정을 초기화합니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" -d '{}' \ https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
이제 Cloud TPU 서비스 계정을 Cloud ML 서비스 에이전트 역할이 있는 구성원으로 프로젝트에 추가합니다. Google Cloud Console에서 또는 gcloud
명령어를 사용하여 다음 단계를 완료합니다.
Console
- Google Cloud Console에 로그인하고 TPU를 사용 중인 프로젝트를 선택합니다.
- IAM 및 관리자 > IAM을 선택합니다.
- 추가 버튼을 클릭하여 프로젝트에 멤버를 추가합니다.
- 멤버 입력란에 TPU 서비스 계정을 입력합니다.
- 역할 드롭다운 목록을 클릭합니다.
- Cloud ML 서비스 에이전트 역할을 사용 설정합니다(서비스 에이전트 > Cloud ML 서비스 에이전트).
gcloud
프로젝트 ID 및 Cloud TPU 서비스 계정이 포함된 환경 변수를 설정합니다.
PROJECT_ID=PROJECT_ID SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
Cloud TPU 서비스 계정에
ml.serviceAgent
역할을 부여합니다.gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
서비스 계정에 역할을 부여하는 방법에 대한 자세한 내용은 IAM 문서를 참조하세요.
설정
TensorFlow 꽃 데이터 세트는 이 튜토리얼에서 사용할 수 있도록 수정되어 공개 Cloud Storage 버킷(gs://cloud-samples-data/ai-platform/built-in/image/flowers/
)에 호스팅되었습니다.
Console
알고리즘 선택
Google Cloud 콘솔의 AI Platform Training 작업 페이지로 이동합니다.
새 학습 작업 버튼을 클릭합니다. 아래 표시된 옵션 중에서 기본 제공 알고리즘 학습을 클릭합니다. 새 학습 작업 만들기 페이지가 표시됩니다.
학습 작업 만들기는 4단계로 구분됩니다. 첫 번째 단계는 학습 알고리즘입니다. 이미지 분류를 선택하고 다음을 클릭합니다.
학습 데이터
학습 데이터 섹션에서 공개 Cloud Storage 버킷에 호스팅된 샘플 데이터 세트의 학습 데이터를 선택합니다.
Cloud Storage 디렉터리 한곳에 저장된 여러 파일 사용을 선택합니다.
디렉터리 경로에 'cloud-samples-data/ai-platform/built-in/image/flowers/'를 입력합니다.
와일드 카드 이름에는 디렉터리에 있는 모든 학습 파일이 선택되도록 'flowers_train*'을 입력합니다.
전체 GCS 경로에 'gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_train*'이 표시됩니다.
검증 데이터 섹션에서 공개 Cloud Storage 버킷에 호스팅된 샘플 데이터 세트의 검증 데이터를 선택합니다.
Cloud Storage 디렉터리 한곳에 저장된 여러 파일 사용을 선택합니다.
디렉터리 경로에 'cloud-samples-data/ai-platform/built-in/image/flowers/'를 입력합니다.
와일드 카드 이름에는 디렉터리에 있는 모든 검증 파일이 선택되도록 'flowers_validation*'을 입력합니다.
전체 GCS 경로에 'gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_validation*'이 표시됩니다.
AI Platform Training이 학습된 모델, 체크포인트, 기타 학습 작업 출력을 저장할 사용자의 Cloud Storage 버킷에 출력 디렉터리를 지정합니다. 버킷의 정확한 경로를 입력하거나 찾아보기 버튼을 사용하여 경로를 선택할 수 있습니다.
gcloud
프로젝트 ID, Cloud Storage 버킷, 학습 데이터의 Cloud Storage 경로, 알고리즘 선택을 위한 환경 변수를 설정합니다.
AI Platform Training 기본 제공 알고리즘은 Container Registry에 호스팅된 Docker 컨테이너에 있습니다.
PROJECT_ID="YOUR_PROJECT_ID"
BUCKET_NAME="YOUR_BUCKET_NAME"
REGION="us-central1"
gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION
# Set paths to the training and validation data.
TRAINING_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_train*"
VALIDATION_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_validation*"
# Specify the Docker container for your built-in algorithm selection.
IMAGE_URI="gcr.io/cloud-ml-algos/image_classification:latest"
학습 작업 제출
작업을 제출하려면 기본 학습 인수 및 이미지 분류 알고리즘과 관련된 기본 인수를 지정해야 합니다.
학습 작업의 일반 인수는 다음과 같습니다.
학습 작업 인수 | |
---|---|
인수 | 설명 |
job-id |
학습 작업의 고유 ID입니다. 학습 작업을 제출한 후 이 인수를 사용하여 학습 작업의 상태 로그를 찾을 수 있습니다. |
job-dir |
학습 작업이 성공적으로 완료된 후 AI Platform Training이 학습 파일을 저장하는 Cloud Storage 경로입니다. |
scale-tier |
학습용 머신 유형을 지정합니다. 머신이 한 개만 있는 구성을 선택하려면 BASIC 을 사용합니다.
|
master-image-uri |
학습 작업에 사용할 Docker 컨테이너를 지정하는 데 사용되는 Container Registry URI입니다. 앞에서 IMAGE_URI 로 정의된 기본 제공 이미지 분류 알고리즘에 이 컨테이너를 사용합니다.
|
region |
학습 작업을 실행할 사용 가능한 리전을 지정합니다. 이 튜토리얼에서는 us-central1 리전을 사용할 수 있습니다.
|
기본 제공 이미지 분류 알고리즘과 관련된 인수:
알고리즘 인수 | |
---|---|
인수 | 설명 |
training_data_path |
학습에 사용되는 TFRecord 경로 패턴의 경로입니다. |
validation_data_path |
검증에 사용되는 TFRecord 경로 패턴의 경로입니다. |
pretrained_checkpoint_path |
사전 학습된 체크포인트의 경로입니다. 일부 게시된 체크포인트를 사용할 수 있습니다. |
num_classes |
학습/검증 데이터의 클래스 수입니다. |
max_steps |
학습 작업에서 실행할 단계 수입니다. |
train_batch_size |
학습 단계별로 사용할 이미지 수입니다. |
num_eval_images |
평가에 사용된 총 이미지 수입니다. 값이 0이면 validation_data_path 에 있는 모든 이미지가 평가에 사용됩니다.
|
learning_rate_decay_type |
학습 도중 학습률을 감소시키는 메서드입니다. |
warmup_learning_rate |
준비 단계 시작 시점의 학습률입니다. |
warmup_steps |
준비 단계 동안 실행하는 단계 수 또는 준비 단계의 길이입니다.
준비 단계에서 학습 작업은 warmup_learning_rate 를 사용합니다. 준비 단계가 끝나면 학습 작업은 initial_learning_rate 를 사용합니다.
|
initial_learning_rate |
준비 단계가 완료된 후 초기 학습률입니다. |
stepwise_learning_rate_steps |
단계적 학습률 감소 유형의 학습률을 감소/변경하는 단계입니다. 예를 들어 100,200은 100단계와 200단계에서 stepwise_learning_rate_levels 에 따라 학습률이 변경된다는 의미입니다. 이는 learning_rate_decay_type 가 단계적으로 설정된 경우에만 적용됩니다.
|
stepwise_learning_rate_levels |
단계별 학습률 감소 유형에 대한 각 단계의 학습률 값입니다. 이는 learning_rate_decay_type 가 단계적으로 설정된 경우에만 적용됩니다.
|
image_size |
학습에 사용되는 이미지 크기(너비 및 높이)입니다. |
optimizer_type |
학습에 사용되는 옵티마이저입니다. 다음 중 하나여야 합니다. {momentum, adam, rmsprop}
|
optimizer_arguments |
옵티마이저에 대한 인수입니다. 'name=value' 쌍을 쉼표로 구분한 목록입니다. optimizer_type 과 호환되어야 합니다. 예를 들면 다음과 같습니다.
|
model_type |
모델을 학습시키는 데 사용된 모델 아키텍처 유형입니다. 다음 중 하나일 수 있습니다.
|
label_smoothing |
softmax_cross_entropy 에서 사용되는 라벨 평활화 매개변수입니다. |
weight_decay |
L2 정규화를 위한 가중치 감소 상관 계수입니다.
loss = cross_entropy + params['weight_decay'] * l2_loss |
다른 모든 이미지 분류 알고리즘 플래그가 포함된 세부 목록은 기본 제공 이미지 분류 참조를 확인하세요.
Console
알고리즘 인수
알고리즘 인수 탭의 첫 번째 부분에서 다음 값을 입력합니다.
- 클래스 수: 5
- 최대 단계 수: 15000
- 학습 배치 크기: 128
- 평가 이미지 수: 1
알고리즘 인수 탭의 모델 섹션에서 다음을 수행합니다.
- 모델 유형에서 Efficientnet-b4를 선택합니다.
- 사전 학습된 체크포인트 경로는 비워둡니다.
- 라벨 평활화 및 가중치 감소는 기본값 그대로 둡니다.
작업 설정
작업 설정 탭에서 다음을 수행합니다.
- 고유한 작업 ID를 입력합니다(예: 'image_classification_example').
- 사용 가능한 리전을 입력합니다(예: 'us-central1').
- 머신 유형을 선택하려면 확장 등급으로 'CUSTOM'을 선택합니다.
커스텀 클러스터 사양을 제공하는 섹션이 표시됩니다.
- 마스터 유형으로 complex_model_m을 선택합니다.
- 작업자 유형으로 cloud_tpu를 선택합니다. 작업자 수의 기본값은 1입니다.
완료를 클릭하여 학습 작업을 제출합니다.
gcloud
gcloud
를 사용하여 작업을 제출하기 전에 학습 작업과 알고리즘의 모든 인수를 설정합니다.DATASET_NAME="flowers" ALGORITHM="image_classification" MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_model" # Give a unique name to your training job. DATE="$(date '+%Y%m%d_%H%M%S')" JOB_ID="${MODEL_NAME}_${DATE}" # Make sure you have access to this Cloud Storage bucket. JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
작업을 제출합니다.
gcloud ai-platform jobs submit training $JOB_ID \ --region=$REGION \ --config=config.yaml \ --master-image-uri=$IMAGE_URI \ -- \ --training_data_path=$TRAINING_DATA_PATH \ --validation_data_path=$VALIDATION_DATA_PATH \ --job-dir=$JOB_DIR \ --max_steps=30000 \ --train_batch_size=128 \ --num_classes=5 \ --num_eval_images=100 \ --initial_learning_rate=0.128 \ --warmup_steps=1000 \ --model_type='efficientnet-b4'
작업이 성공적으로 제출되면 다음
gcloud
명령어를 사용하여 로그를 볼 수 있습니다.gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
작업 디렉터리 이해
학습 작업이 성공적으로 완료되면 AI Platform Training이 다른 몇 가지 아티팩트와 함께 학습된 모델을 개발자의 Cloud Storage 버킷에 만듭니다. JOB_DIR
내의 디렉터리 구조는 다음과 같습니다.
- model/(
deployment_config.yaml
파일도 포함된 TensorFlow SavedModel 디렉터리)- saved_model.pb
- deployment_config.yaml
- eval/
- events.out.tfevents.[timestamp].cmle-training-[timestamp]
- events.out.tfevents...
- ...
- variables/
- variables.data-00000-of-00001
- variables.index
작업 디렉터리에는 다양한 모델 체크포인트 파일도 포함됩니다.
JOB_DIR
의 디렉터리 구조가 일치하는지 다음 명령어로 확인합니다.
gcloud storage ls $JOB_DIR/* --all-versions
학습된 모델 배포
AI Platform Training은 모델 및 버전 리소스를 사용하여 학습된 모델을 구성합니다. AI Platform Training 모델은 머신러닝 모델 버전의 컨테이너입니다.
모델을 배포하려면 AI Platform Training에서 모델 리소스와 모델 버전을 만든 후 생성된 모델과 버전을 사용하여 온라인 예측을 요청합니다.
AI Platform Training에 모델을 배포하는 방법에 대한 자세한 내용은 TensorFlow 모델 배포 방법을 참조하세요.
Console
작업 페이지에 모든 학습 작업의 목록이 표시됩니다. 바로 전에 제출한 학습 작업 이름을 클릭합니다('image_classification' 또는 사용된 작업 이름).
작업 세부정보 페이지에서 작업의 일반 진행 상태를 확인하거나 로그 보기를 클릭하여 더 자세한 진행 상태를 확인할 수 있습니다.
작업이 성공하면 모델 배포 버튼이 맨 위에 나타납니다. 모델 배포를 클릭합니다.
새 모델로 배포를 선택하고 모델 이름을 입력합니다(예: 'algorithms_image_classification_model'). 그런 다음 확인을 클릭합니다.
버전 만들기 페이지에서 버전 이름(예: 'v1')을 입력하고 다른 모든 필드를 기본 설정으로 유지합니다. 저장을 클릭합니다.
gcloud
기본 제공 이미지 분류 알고리즘을 사용하여 학습을 진행하면 AI Platform Training에 모델을 배포하여 간편하게 예측할 수 있게 해주는 deployment_config.yaml
파일이 생성됩니다.
이 파일을 로컬 디렉터리에 복사하고 콘텐츠를 확인합니다.
gcloud storage cp $JOB_DIR/model/deployment_config.yaml . cat deployment_config.yaml
deployment_config.yaml
파일은 다음과 유사하게 표시됩니다.deploymentUri: gs://BUCKET_NAME/algorithms_training/flowers_image_classification/model framework: TENSORFLOW labels: global_step: '1000' job_id: flowers_image_classification_20190227060114 runtimeVersion: '1.14'
AI Platform Training에서 모델과 버전을 만듭니다.
gcloud ai-platform models create $MODEL_NAME --regions $REGION # Create a model and a version using the file above. VERSION_NAME="v_${DATE}" gcloud ai-platform versions create $VERSION_NAME \ --model $MODEL_NAME \ --config deployment_config.yaml
버전을 만드는 데 몇 분 정도 걸립니다.
온라인 예측 수행
예측을 요청할 때 입력 데이터의 형식이 JSON인지 확인해야 합니다.
학습 아티팩트 파일을 다운로드합니다.
gcloud storage cp $JOB_DIR/artifacts/* .
하나의 이미지에 대한 예측 입력을 준비합니다.
Google Cloud CLI를 사용하여 온라인 예측 요청을 보내려면 이 예시처럼 각 인스턴스를 줄바꿈으로 구분된 JSON 파일의 행에 작성합니다.
터미널에서 다음 명령어를 실행하여 AI Platform Prediction에 보낼 수 있는 단일 인스턴스에 대한 입력을 만듭니다.
다음 Python 스크립트는
base64
를 사용하여 단일 이미지를 인코딩한 후 예측을 수행할 수 있도록 이에 대한 적절한 형식을 지정합니다. 그런 다음 인스턴스 키를 추가하고 결과를prediction_instances.json
파일에 씁니다.import json import base64 import tensorflow as tf IMAGE_URI='gs://cloud-samples-data/ai-platform/built-in/image/tutorial_examples/daisy.jpg' with tf.gfile.Open(IMAGE_URI, 'rb') as image_file: encoded_string = base64.b64encode(image_file.read()).decode('utf-8') image_bytes = {'b64': str(encoded_string)} instances = {'image_bytes': image_bytes, 'key': '1'} with open("prediction_instances.json","w") as f: f.write(json.dumps(instances))
예측 요청을 전송합니다.
gcloud ai-platform predict --model $MODEL_NAME \ --version $VERSION_NAME \ --json-instances prediction_instances.json
대부분의 경우 예측 출력에 daisy
클래스가 포함되며, 이는 배포된 모델에서 입력 이미지를 데이지로 분류했음을 나타냅니다. 학습은 비확정적이므로 모델마다 예측 결과가 다를 수 있습니다.
데이터 정보
이 샘플에서 학습에 사용하는 꽃 데이터 세트는 TensorFlow팀에서 제공합니다.
다음 단계
- 기본 제공 이미지 분류 알고리즘 사용 자세히 알아보기