AI Platform Training の組み込みアルゴリズムを使用すると、トレーニング アプリケーションのコードを一切作成せずに、トレーニング データの送信とアルゴリズムの選択を行い、AI Platform Training による前処理とトレーニングを実施できます。 画像組み込みアルゴリズムを使用すると、最小限の構成を使用し TPU 上でトレーニングできます。結果として生成される TensorFlow SavedModel は、CPU と GPU での処理に対応しています。
概要
このチュートリアルでは、コードを一切作成せずに画像分類モデルをトレーニングします。Flowers データセットを 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 ML サービス エージェントのロールを使用して、Cloud TPU サービス アカウントをプロジェクト内のメンバーとして追加します。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 Flowers データセットに変更を加えて、Cloud Storage の公開バケット gs://cloud-samples-data/ai-platform/built-in/image/flowers/
でホストしました。
Console
アルゴリズムを選択する
Google Cloud コンソールで AI Platform Training の [ジョブ] ページに移動します。
[新規トレーニング ジョブ] ボタンをクリックします。下に表示されたオプションから、[組み込みアルゴリズムによるトレーニング] をクリックします。[新しいトレーニング ジョブの作成] ページが表示されます。
トレーニング ジョブの作成は 4 つのステップに分かれています。最初のステップはトレーニング アルゴリズムです。[画像分類] を選択し、[次へ] をクリックします。
トレーニング データ
[トレーニング データ] セクションで、一般公開の Cloud Storage バケットに置かれているサンプル データセット用のトレーニング データを選択します。
[1 つの 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 バケットでホストされているサンプル データセット用の検証データを選択します。
[1 つの 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 バケットの出力ディレクトリを指定します。バケット内の正確なパスを入力するか、[BROWSE] ボタンをクリックしてパスを選択します。
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。トレーニング ジョブを送信した後、この 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
- 最大ステップ数: 15,000
- トレーニングのバッチサイズ: 128
- 評価画像の数: 1
[アルゴリズムの引数] タブの [モデル セクション] 内:
- [モデルタイプ] には、[Efficientnet-b4] を選択します。
- [Pretrained checkpoint path] は空白のままにします。
- [Label smoothing] と [Weight Decay] はデフォルト値のままにします。
ジョブの設定
[ジョブの設定] タブで次の操作を行います。
- [ジョブ ID] に一意の 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/(TensorFlow SavedModel ディレクトリ。
deployment_config.yaml
ファイルも格納します)- 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
画像分類組み込みアルゴリズムを使用するトレーニング プロセスでは、deployment_config.yaml
ファイルが生成されます。これを使用して、予測用のモデルを AI Platform Training に簡単にデプロイできます。
ファイルをローカル ディレクトリにコピーし、その内容を表示します。
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/* .
1 つの画像の予測入力を準備します。
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 チームが提供しています。
次のステップ
- 画像分類組み込みアルゴリズムの使用方法について詳しく学ぶ。