기본 제공 이미지 분류 알고리즘 시작하기

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를 설치 및 활성화합니다.

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  9. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

프로젝트에 액세스하도록 Cloud TPU 승인

다음 단계를 수행하여 Google Cloud 프로젝트와 연결된 Cloud TPU 서비스 계정 이름을 승인합니다.

  1. 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
    
  2. API에서 반환한 serviceAccountProjecttpuServiceAccount 필드 값을 저장합니다.

  3. 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

  1. Google Cloud Console에 로그인하고 TPU를 사용 중인 프로젝트를 선택합니다.
  2. IAM 및 관리자 > IAM을 선택합니다.
  3. 추가 버튼을 클릭하여 프로젝트에 멤버를 추가합니다.
  4. 멤버 입력란에 TPU 서비스 계정을 입력합니다.
  5. 역할 드롭다운 목록을 클릭합니다.
  6. Cloud ML 서비스 에이전트 역할을 사용 설정합니다(서비스 에이전트 > Cloud ML 서비스 에이전트).

gcloud

  1. 프로젝트 ID 및 Cloud TPU 서비스 계정이 포함된 환경 변수를 설정합니다.

    PROJECT_ID=PROJECT_ID
    SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
    
  2. 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

알고리즘 선택

  1. Google Cloud 콘솔의 AI Platform Training 작업 페이지로 이동합니다.

    AI Platform Training 작업 페이지

  2. 새 학습 작업 버튼을 클릭합니다. 아래 표시된 옵션 중에서 기본 제공 알고리즘 학습을 클릭합니다. 새 학습 작업 만들기 페이지가 표시됩니다.

  3. 학습 작업 만들기는 4단계로 구분됩니다. 첫 번째 단계는 학습 알고리즘입니다. 이미지 분류를 선택하고 다음을 클릭합니다.

학습 데이터

  1. 학습 데이터 섹션에서 공개 Cloud Storage 버킷에 호스팅된 샘플 데이터 세트의 학습 데이터를 선택합니다.

    1. Cloud Storage 디렉터리 한곳에 저장된 여러 파일 사용을 선택합니다.

    2. 디렉터리 경로에 'cloud-samples-data/ai-platform/built-in/image/flowers/'를 입력합니다.

    3. 와일드 카드 이름에는 디렉터리에 있는 모든 학습 파일이 선택되도록 'flowers_train*'을 입력합니다.

    4. 전체 GCS 경로'gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_train*'이 표시됩니다.

  2. 검증 데이터 섹션에서 공개 Cloud Storage 버킷에 호스팅된 샘플 데이터 세트의 검증 데이터를 선택합니다.

    1. Cloud Storage 디렉터리 한곳에 저장된 여러 파일 사용을 선택합니다.

    2. 디렉터리 경로에 'cloud-samples-data/ai-platform/built-in/image/flowers/'를 입력합니다.

    3. 와일드 카드 이름에는 디렉터리에 있는 모든 검증 파일이 선택되도록 'flowers_validation*'을 입력합니다.

    4. 전체 GCS 경로'gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_validation*'이 표시됩니다.

  3. 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과 호환되어야 합니다. 예를 들면 다음과 같습니다.
  • 모멘텀 옵티마이저의 경우 momentum=0.9을 허용합니다. 자세한 내용은 tf.train.MomentumOptimizer를 참조하세요.
  • Adam 옵티마이저의 경우 beta1=0.9,beta2=0.999일 수 있습니다. 자세한 내용은 tf.train.AdamOptimizer를 참조하세요.
  • RMSProp 옵티마이저의 경우 decay=0.9,momentum=0.1,epsilon=1e-10일 수 있습니다. 자세한 내용은 RMSPropOptimizer를 참조하세요.
model_type 모델을 학습시키는 데 사용된 모델 아키텍처 유형입니다. 다음 중 하나일 수 있습니다.
  • resnet-(18|34|50|101|152|200)
  • efficientnet-(b0|b1|b2|b3|b4|b5|b6|b7)
label_smoothing softmax_cross_entropy에서 사용되는 라벨 평활화 매개변수입니다.
weight_decay L2 정규화를 위한 가중치 감소 상관 계수입니다. loss = cross_entropy + params['weight_decay'] * l2_loss

다른 모든 이미지 분류 알고리즘 플래그가 포함된 세부 목록은 기본 제공 이미지 분류 참조를 확인하세요.

Console

알고리즘 인수

알고리즘 인수 탭의 첫 번째 부분에서 다음 값을 입력합니다.

  • 클래스 수: 5
  • 최대 단계 수: 15000
  • 학습 배치 크기: 128
  • 평가 이미지 수: 1

알고리즘 인수 탭의 모델 섹션에서 다음을 수행합니다.

  1. 모델 유형에서 Efficientnet-b4를 선택합니다.
  2. 사전 학습된 체크포인트 경로는 비워둡니다.
  3. 라벨 평활화가중치 감소는 기본값 그대로 둡니다.

작업 설정

작업 설정 탭에서 다음을 수행합니다.

  1. 고유한 작업 ID를 입력합니다(예: 'image_classification_example').
  2. 사용 가능한 리전을 입력합니다(예: 'us-central1').
  3. 머신 유형을 선택하려면 확장 등급으로 'CUSTOM'을 선택합니다. 커스텀 클러스터 사양을 제공하는 섹션이 표시됩니다.
    1. 마스터 유형으로 complex_model_m을 선택합니다.
    2. 작업자 유형으로 cloud_tpu를 선택합니다. 작업자 수의 기본값은 1입니다.

완료를 클릭하여 학습 작업을 제출합니다.

gcloud

  1. 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}"
    
  2. 작업을 제출합니다.

    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'

  3. 작업이 성공적으로 제출되면 다음 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

  1. 작업 페이지에 모든 학습 작업의 목록이 표시됩니다. 바로 전에 제출한 학습 작업 이름을 클릭합니다('image_classification' 또는 사용된 작업 이름).

  2. 작업 세부정보 페이지에서 작업의 일반 진행 상태를 확인하거나 로그 보기를 클릭하여 더 자세한 진행 상태를 확인할 수 있습니다.

  3. 작업이 성공하면 모델 배포 버튼이 맨 위에 나타납니다. 모델 배포를 클릭합니다.

  4. 새 모델로 배포를 선택하고 모델 이름을 입력합니다(예: 'algorithms_image_classification_model'). 그런 다음 확인을 클릭합니다.

  5. 버전 만들기 페이지에서 버전 이름(예: 'v1')을 입력하고 다른 모든 필드를 기본 설정으로 유지합니다. 저장을 클릭합니다.

gcloud

기본 제공 이미지 분류 알고리즘을 사용하여 학습을 진행하면 AI Platform Training에 모델을 배포하여 간편하게 예측할 수 있게 해주는 deployment_config.yaml 파일이 생성됩니다.

  1. 이 파일을 로컬 디렉터리에 복사하고 콘텐츠를 확인합니다.

    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'
    
  2. 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인지 확인해야 합니다.

  1. 학습 아티팩트 파일을 다운로드합니다.

    gcloud storage cp $JOB_DIR/artifacts/* .
    
  2. 하나의 이미지에 대한 예측 입력을 준비합니다.

    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))
    
  3. 예측 요청을 전송합니다.

    gcloud ai-platform predict --model $MODEL_NAME \
     --version $VERSION_NAME \
     --json-instances prediction_instances.json
    

대부분의 경우 예측 출력에 daisy 클래스가 포함되며, 이는 배포된 모델에서 입력 이미지를 데이지로 분류했음을 나타냅니다. 학습은 비확정적이므로 모델마다 예측 결과가 다를 수 있습니다.

데이터 정보

이 샘플에서 학습에 사용하는 꽃 데이터 세트는 TensorFlow팀에서 제공합니다.

다음 단계