このチュートリアルで AI Platform を使用する前に、機械学習と TensorFlow について十分に理解しておく必要があります。詳細については、TensorFlow API を使用する機械学習集中講座(英語)をご覧ください。さらに、Learn with Google AI にも機械学習に関する多数の教育リソースが揃っています。
概要
このドキュメントでは、AI Platform でのトレーニングと予測についてエンドツーエンドのチュートリアルを提供します。国勢調査データセットを使用するサンプルのチュートリアルを進めていき、次の作業を行います。
- TensorFlow 1.14 トレーニング アプリケーションを作成し、それをローカルで検証します。
- クラウド内の単一ワーカー インスタンスでトレーニング ジョブを実行します。
- クラウド内の分散トレーニング ジョブとしてトレーニング ジョブを実行する。
- ハイパーパラメータ チューニングを使用して、ハイパーパラメータを最適化する。
- 予測をサポートするモデルをデプロイする。
- オンライン予測をリクエストし、レスポンスを確認する。
- バッチ予測をリクエストする。
作業内容
このサンプルでは、米国国勢調査所得データセットに基づいて所得区分を予測するためにワイド&ディープモデルを構築します。2 つの所得区分(ラベルとも呼ばれる)は次のとおりです。
- >50K: 50,000 ドル超
- <=50K: 50,000 ドル以下
ワイド&ディープモデルでは、ディープ ニューラル ネット(DNN)を使用して、複雑な特徴や、それらの特徴間の相互作用に関して概要レベルの抽象化を学習します。次にワイド&ディープモデルは、DNN からの出力を、より簡単な特性に対して実行される線形回帰と結合します。これにより、多くの構造化されたデータ問題に有効な、バランスの取れたパワーとスピードを実現できます。
ワイド&ディープモデルについて詳しくは、Google Research Blog の記事、ワイド&ディープ ラーニング: TensorFlow との結合による改善をご覧ください。
このサンプルでは、TensorFlow の既製の DNNCombinedLinearClassifier
クラスを使用してモデルを定義します。国勢調査データセットに特有のデータ変換を定義してから、これらの変換された(可能性のある)特徴をモデルの DNN または線形部分に割り当てます。
費用
このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。
- AI Platform:
- トレーニング
- 予測
- Cloud Storage:
- トレーニング用の入力データ格納
- トレーニング アプリケーション パッケージのステージング
- トレーニングによる出力の保存
- バッチ予測で使用する入力データの保存
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。
クラウド環境の設定とテスト
次の操作を行って GCP アカウントを設定し、AI Platform API を有効にします。さらに、Cloud SDK をインストールして有効にします。
GCP プロジェクトの設定
- Google アカウントにログインします。
Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する。
- AI Platform Training & Prediction and Compute Engine API を有効にします。
- Cloud SDK をインストールして初期化します。
環境の設定
以下のいずれかのオプションを選択して、macOS のローカル環境または Cloud Shell のリモート環境を設定します。
macOS の場合、以下の [MACOS] タブで環境を設定することをおすすめします。[CLOUD SHELL] タブに表示される Cloud Shell は、macOS、Linux、Windows で使用できます。Cloud Shell は、AI Platform の機能を試すような場合には便利ですが、継続的な開発作業には適していません。
macOS
-
Python のインストールを確認する
Python がインストールされていることを確認します。されていない場合はインストールします。python -V
-
pip
のインストールを確認するpip
は、Python のパッケージ マネージャーであり、Python の現在のバージョンに含まれています。pip --version
コマンドを実行して、pip
がすでにインストールされているかどうかを確認します。インストールされていない場合は、pip
のインストール方法をご覧ください。次のコマンドを使用すると、
pip
をアップグレードできます。pip install -U pip
詳細については、pip のドキュメントをご覧ください。
-
virtualenv
をインストールするvirtualenv
は隔離された Python 環境を作成するツールです。次のコマンドを実行して、virtualenv
がすでにインストールされているかどうかを確認します。virtualenv --version
。インストールされていない場合は、virtualenv
をインストールします。pip install --user --upgrade virtualenv
このガイド用に隔離された開発環境を作成するために、
virtualenv
で新しい仮想環境を作成します。たとえば、次のコマンドは、aip-env
という名前の環境をアクティブにします。virtualenv aip-env source aip-env/bin/activate
-
このチュートリアルでは、仮想環境内で残りのコマンドを実行します。
virtualenv
の使用方法の詳細をご覧ください。virtualenv
を終了するには、deactivate
を実行します。
Cloud Shell
-
Google Cloud Console を開きます。
-
コンソール ウィンドウの上部にある [Google Cloud Shell をアクティブにする] ボタンをクリックします。
コンソールの下部の新しいフレーム内で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。シェル セッションが初期化されるまで、数秒かかる場合があります。
Cloud Shell セッションが使用できる状態になります。
-
選択したプロジェクトを使用するように
gcloud
コマンドライン ツールを構成します。gcloud config set project [selected-project-id]
ここで、
[selected-project-id]
はプロジェクト ID です(ID を囲んでいる角かっこは不要です)。
Python バージョンのサポート
このチュートリアルのサンプルでは Python 2.7 を使用します。AI Platform Training と AI Platform Prediction では Python 3 もサポートされています。トレーニング ジョブの送信時に Python バージョンを選択する方法をご覧ください。
このチュートリアルのコードをダウンロードする
サンプルを GitHub リポジトリからダウンロードします。
macOS
AI Platform のサンプル zip ファイルをダウンロードして抽出します。
ターミナル ウィンドウを開き、抽出された
cloudml-samples-master
ディレクトリを含むディレクトリに移動します。cloudml-samples-master > census > estimator
ディレクトリに移動します。このチュートリアルのコマンドは、estimator
ディレクトリから実行する必要があります。cd cloudml-samples-master/census/estimator
Cloud Shell
次のコマンドを入力して、AI Platform のサンプル zip ファイルをダウンロードします。
wget https://github.com/GoogleCloudPlatform/cloudml-samples/archive/master.zip
ファイルを解凍して、
cloudml-samples-master
ディレクトリを抽出します。unzip master.zip
cloudml-samples-master > census > estimator
ディレクトリに移動します。このチュートリアルのコマンドは、estimator
ディレクトリから実行する必要があります。cd cloudml-samples-master/census/estimator
トレーニング アプリケーションをローカルで開発して検証する
トレーニング アプリケーションをクラウドで実行する前に、まずローカルで実行します。ローカル環境は、効率的な開発と検証のワークフローを提供するため、迅速な反復処理が可能です。また、アプリケーションをローカルでデバッグする際にクラウド リソースの課金が発生することもありません。
トレーニング データの入手
ここで使用するデータファイルの adult.data
と adult.test
は、一般公開されている Google Cloud Storage バケットでホストされています。このサンプルで使用する Cloud Storage 上のバージョンはオリジナルのソースデータではなく、データが若干クリーニングされています。詳しくは、データについてをご覧ください。
データファイルは Cloud Storage から直接読み取ることができ、ローカル環境にコピーすることもできます。このサンプルでは、データをダウンロードしてローカルでトレーニングを行い、次に自分の Cloud Storage バケットにアップロードしてクラウドでトレーニングを行います。
データをローカルのファイル ディレクトリにダウンロードし、ダウンロードしたデータファイルを指す変数を設定します。
mkdir data gsutil -m cp gs://cloud-samples-data/ai-platform/census/data/* data/
TRAIN_DATA
およびEVAL_DATA
変数をローカル ファイルパスに設定します。たとえば、次のコマンドは変数をローカルパスに設定します。TRAIN_DATA=$(pwd)/data/adult.data.csv EVAL_DATA=$(pwd)/data/adult.test.csv
データは、次の adult.data
ファイルのプレビューに示すようにカンマ区切りの値形式で格納されます。
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 ...
依存関係のインストール
macOS
前のステップでアクティブにした仮想環境を有効にして、次のコマンドを実行します。
pip install tensorflow==1.14.*
このコマンドを実行すると、チュートリアルで使用する TensorFlow 1.14 がインストールされます。
Cloud Shell
TensorFlow は Cloud Shell にインストールされていますが、次のコマンドを実行して、サンプルで必要な TensorFlow と同じバージョンを使用していることを確認する必要があります。
pip install --user tensorflow==1.14.*
このコマンドを実行すると、チュートリアルで使用する TensorFlow 1.14 がインストールされます。
ローカル トレーニング ジョブの実行
ローカル トレーニング ジョブは Python で記述されたトレーニング プログラムを読み込み、AI Platform でのライブのクラウド トレーニング ジョブとほぼ同じ環境でトレーニング プロセスを開始します。
出力ディレクトリを指定し、
MODEL_DIR
変数を設定します。次のコマンドは、MODEL_DIR
をoutput
の値に設定します。MODEL_DIR=output
以前のトレーニングの結果が出力ディレクトリに残っている場合は、ディレクトリの内容を削除することをおすすめします。次のコマンドは、
output
ディレクトリ内のすべてのデータを削除します。rm -rf $MODEL_DIR/*
トレーニングをローカルで実行するには、次のコマンドを実行します。
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
に設定します。後のコマンド例で有効にする方法を示しています。
TensorBoard を使用して要約ログを検査する
評価結果を確認するには、TensorBoard という可視化ツールを使用します。TensorBoard を使用すると、TensorFlow グラフを可視化できます。グラフの実行に関する定量メトリックをプロットし、グラフを通過するイメージなどの追加データを表示できます。Tensorboard は、TensorFlow インストールの一部として利用できます。
以下の手順に従って、TensorBoard を起動し、トレーニング中、実行中および実行後に生成された概要ログを対象に指定します。
macOS
TensorBoard の起動:
tensorboard --logdir=$MODEL_DIR
TensorBoard が起動したら、ブラウザで http://localhost:6006 にアクセスします。
Cloud Shell
TensorBoard の起動:
tensorboard --logdir=$MODEL_DIR --port=8080
コマンドラインの上部にある [ウェブでプレビュー] メニューで、ポート 8080 上でのプレビューを選択します。
[精度] をクリックすると、ジョブの進行状況に合わせて精度の変化のグラフィカル表現が表示されます。
TensorBoard は、コマンドラインで ctrl+c
を入力すれば、いつでもシャットダウンできます。
分散モードでローカル トレーニング ジョブを実行する
--distributed
フラグを使用してローカル トレーニング ジョブを実行すると、AI Platform の分散実行環境でモデルが機能するかどうかを検証できます。
出力ディレクトリを指定し、再度
MODEL_DIR
変数を設定します。次のコマンドは、MODEL_DIR
をoutput-dist
の値に設定します。MODEL_DIR=output-dist
output
ディレクトリに以前のトレーニング実行によるデータが残っている場合は、そのディレクトリの内容を削除します。rm -rf $MODEL_DIR/*
--distributed
オプションを指定してlocal train
コマンドを実行します。ユーザー引数とコマンドライン引数を区切る--
の上にフラグを配置してください。gcloud ai-platform local train \ --module-name trainer.task \ --package-path trainer/ \ --job-dir $MODEL_DIR \ --distributed \ -- \ --train-files $TRAIN_DATA \ --eval-files $EVAL_DATA \ --train-steps 1000 \ --eval-steps 100
出力の検査
出力ファイルは --job-dir
で指定したディレクトリに書き込まれます。この例では output-dist
に設定されています。
ls -R output-dist/
次のような出力が表示されます。
checkpoint
eval
events.out.tfevents.1488577094.<host-name>
export
graph.pbtxt
model.ckpt-1000.data-00000-of-00001
model.ckpt-1000.index
model.ckpt-1000.meta
model.ckpt-2.data-00000-of-00001
model.ckpt-2.index
model.ckpt-2.meta
output-dist//eval:
events.out.tfevents.<timestamp>.<host-name>
events.out.tfevents.<timestamp><host-name>
events.out.tfevents.<timestamp>.<host-name>
output-dist//export:
census
output-dist//export/census:
<timestamp>
output-dist//export/census/<timestamp>:
saved_model.pb
variables
...
ログの検査
単一インスタンスのトレーニング ジョブと同じように、TensorBoard を使用して要約ログを調べます。ただし、--logdir
の値を分散モードで使用した出力ディレクトリ名と一致するように変更する必要があります。
macOS
TensorBoard の起動:
tensorboard --logdir=$MODEL_DIR
TensorBoard が起動したら、ブラウザで http://localhost:6006 にアクセスします。
Cloud Shell
TensorBoard の起動:
tensorboard --logdir=$MODEL_DIR --port=8080
コマンドラインの上部にある [ウェブでプレビュー] メニューで、ポート 8080 上でのプレビューを選択します。
Cloud Storage バケットの設定
このセクションでは、新しいバケットを作成する方法を説明します。既存のバケットを使用することもできますが、AI Platform ジョブを実行する予定のリージョンと同じリージョンにある必要があります。また、AI Platform を実行するプロジェクトに含まれていない場合は、明示的に AI Platform サービス アカウントへのアクセスを許可する必要があります。
-
新しいバケットに名前を指定します。名前は Cloud Storage のすべてのバケット全体で重複しないようにする必要があります。
BUCKET_NAME="your_bucket_name"
たとえば、プロジェクト名に
-aiplatform
を追加したものを使います。PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
作成したバケット名を確認します。
echo $BUCKET_NAME
-
バケットのリージョンを選択して、
REGION
環境変数を設定します。AI Platform ジョブを実行する予定のリージョンと同じリージョンを使用してください。詳しくは、AI Platform サービスの利用可能なリージョンをご覧ください。
たとえば、次のコードは
REGION
を作成し、us-central1
に設定します。REGION=us-central1
-
新しいバケットを作成します。
gsutil mb -l $REGION gs://$BUCKET_NAME
データファイルを Cloud Storage バケットにアップロードします。
gsutil
を使用して、2 つのファイルを Cloud Storage バケットにコピーします。gsutil cp -r data gs://$BUCKET_NAME/data
TRAIN_DATA
およびEVAL_DATA
変数がファイルを指すように設定します。TRAIN_DATA=gs://$BUCKET_NAME/data/adult.data.csv EVAL_DATA=gs://$BUCKET_NAME/data/adult.test.csv
再度
gsutil
を使用して JSON テストファイルtest.json
を Cloud Storage バケットにコピーします。gsutil cp ../test.json gs://$BUCKET_NAME/data/test.json
このファイルを指すように
TEST_JSON
変数を設定します。TEST_JSON=gs://$BUCKET_NAME/data/test.json
クラウドで単一インスタンスのトレーニング ジョブを実行する
単一インスタンスと分散モードの両方で動作する検証済みトレーニング ジョブを使用することで、クラウド内でトレーニング ジョブを実行する準備が整いました。まず、単一インスタンスのトレーニング ジョブをリクエストします。
単一インスタンスのトレーニング ジョブを実行するには、デフォルトの BASIC
スケール階層を使用します。最初のジョブ リクエストは開始に数分かかる場合がありますが、後続のジョブはより迅速に実行されます。これにより、トレーニング ジョブを開発する際にジョブを迅速に反復して検証できます。
最初のトレーニングに、以降のトレーニングと区別できるような名前を選択します。たとえば、イテレーションを表す番号を追加できます。
JOB_NAME=census_single_1
トレーニングと予測ジョブをリクエストする際に指定する
OUTPUT_PATH
変数に、AI Platform から生成される出力のディレクトリを指定します。OUTPUT_PATH
は、モデルのチェックポイント、概要、およびエクスポート用の Cloud Storage の場所を完全修飾パスで表します。前の手順で定義したBUCKET_NAME
変数を使用できます。ジョブ名を出力ディレクトリとして使用することをおすすめします。たとえば、以下の
OUTPUT_PATH
は、census_single_1
という名前のディレクトリを指しています。OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
以下のコマンドを実行して、クラウドで単一のプロセスを使用するトレーニング ジョブを送信します。ここでは、
--verbosity
タグをDEBUG
に設定することにより、ロギング出力全体を検査して精度、損失、その他の指標を取得できるようにします。出力に含まれる他の多くの警告メッセージは、このサンプルでは無視してかまいません。gcloud ai-platform jobs submit training $JOB_NAME \ --job-dir $OUTPUT_PATH \ --runtime-version 1.14 \ --python-version 2.7 \ --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
コマンドラインの出力を確認するか、Google Cloud Console で [AI Platform] > [ジョブ] に移動して、トレーニング ジョブの進行状況をモニタリングできます。
出力の検査
クラウドのトレーニングでは、出力は Cloud Storage に生成されます。このサンプルでは、出力は OUTPUT_PATH
に保存されます。出力を一覧表示するには、次のコマンドを実行します。
gsutil ls -r $OUTPUT_PATH
ローカルのトレーニングからの出力(上記)に類似した出力が表示されます。
Cloud Logging のログを検査する
ログは、クラウド上のトレーニング コードの動作を理解するために便利な方法です。AI Platform がトレーニング ジョブを実行すると、すべての stdout
ストリームと stderr
ストリーム、ロギング ステートメントが収集されます。これらのログは Cloud Logging に保存されます。これらは実行中でも、実行後でも表示できます。
ジョブのログを確認するには、Cloud Console で [AI Platform] > [ジョブ] に移動し、[ログを表示] をクリックするのが最も簡単な方法です。
[すべてのログ] を選択したままにすると、すべてのワーカーのすべてのジョブが表示されます。また、特定のタスクを選択することもできます。master-replica-0
は、マスターの観点からのジョブ実行の概要を示します。
詳細ロギングを選択したため、ロギング出力全体を検査できます。AI Platform ジョブのログの中から accuracy
という用語を探します。
ターミナルでこれらのログを表示するには、コマンドラインから次のコマンドを実行します。
gcloud ai-platform jobs stream-logs $JOB_NAME
gcloud ai-platform jobs stream-logs で使用できるすべてのオプションをご確認ください。
TensorBoard を使用した要約ログの検査
TensorBoard を起動し、トレーニングの間に生成された要約ログを参照することにより、実行中でも、実行後でもトレーニング ジョブの動作を検査することができます。
トレーニング プログラムは Cloud Storage の場所に要約を直接書き込むため、TensorBoard はイベント ファイルを手動でコピーすることなく自動的に読み取ることができます。
macOS
TensorBoard の起動:
tensorboard --logdir=$OUTPUT_PATH
TensorBoard が起動したら、ブラウザで http://localhost:6006 にアクセスします。
Cloud Shell
TensorBoard の起動:
tensorboard --logdir=$OUTPUT_PATH --port=8080
コマンドラインの上部にある [ウェブでプレビュー] メニューで、ポート 8080 上でのプレビューを選択します。
[精度] をクリックすると、ジョブの進行状況に合わせて精度の変化のグラフィカル表現が表示されます。
TensorBoard は、コマンドラインで ctrl+c
を入力すれば、いつでもシャットダウンできます。
クラウドで分散トレーニングを実行する
トレーニング ジョブを実行する際に Google のスケーラブルなインフラストラクチャを活用するには、トレーニング ジョブを分散モードで実行するように構成します。
このモデルを AI Platform の分散プロセスとして実行するために、コードを変更する必要はありません。
分散ジョブを実行するには、--scale-tier
を BASIC より上の階層に設定します。スケール階層について詳しくは、スケール階層のドキュメントをご覧ください。
分散トレーニング ジョブに、他のトレーニング ジョブと区別できるような名前を選択します。たとえば、
dist
を使用して分散を表し、番号を付加してイテレーションを表すことができます。JOB_NAME=census_dist_1
ジョブ間でチェックポイントを誤って再利用しないよう、ジョブ名を含めた
OUTPUT_PATH
を指定します。BUCKET_NAME
を最後に定義した後に新しくコマンドライン セッションを開始した場合は、再定義する必要があります。たとえば、以下のOUTPUT_PATH
は、census-dist-1
という名前のディレクトリを指しています。OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
以下のコマンドを実行し、クラウドで複数のワーカーを使用するトレーニング ジョブを送信します。ジョブの開始には数分かかる場合があります。
ユーザー引数とコマンドライン引数を区切る
--
の上に--scale-tier
を配置します。たとえば、以下のコマンドは、STANDARD_1
というスケール階層を使用します。gcloud ai-platform jobs submit training $JOB_NAME \ --job-dir $OUTPUT_PATH \ --runtime-version 1.14 \ --python-version 2.7 \ --module-name trainer.task \ --package-path trainer/ \ --region $REGION \ --scale-tier STANDARD_1 \ -- \ --train-files $TRAIN_DATA \ --eval-files $EVAL_DATA \ --train-steps 1000 \ --verbosity DEBUG \ --eval-steps 100
ジョブの進行状況は、コマンドラインの出力を確認するか、Google Cloud Console で [AI Platform] > [ジョブ] に移動するとモニタリングできます。
ログの検査
単一インスタンスのトレーニング ジョブと同じ方法で、Cloud Logging のログと概要ログを調べます。
Cloud Logging ログの場合: Cloud Consoleで、[AI Platform] > [ジョブ] でジョブを選択し、[ログを表示] をクリックするか、ターミナルから次のコマンドを使用します。
gcloud ai-platform jobs stream-logs $JOB_NAME
TensorBoard の場合:
macOS
TensorBoard の起動:
tensorboard --logdir=$OUTPUT_PATH
TensorBoard が起動したら、ブラウザで http://localhost:6006 にアクセスします。
Cloud Shell
TensorBoard の起動:
tensorboard --logdir=$OUTPUT_PATH --port=8080
コマンドラインの上部にある [ウェブでプレビュー] メニューで、ポート 8080 上でのプレビューを選択します。
ハイパーパラメータの調整
AI Platform は、モデルの予測精度を最大限に高められるように、ハイパーパラメータ調整を行います。国勢調査のサンプルでは、hptuning_config.yaml
という名前の YAML ファイルにハイパーパラメータ構成設定値を格納し、--config
変数を使用して、トレーニング リクエストにそのファイルを含めています。
新しいジョブ名を選択し、構成ファイルを参照する変数を作成します。
HPTUNING_CONFIG=../hptuning_config.yaml JOB_NAME=census_core_hptune_1 TRAIN_DATA=gs://$BUCKET_NAME/data/adult.data.csv EVAL_DATA=gs://$BUCKET_NAME/data/adult.test.csv
ジョブ間でチェックポイントを誤って再利用しないよう、ジョブ名を含めた
OUTPUT_PATH
を指定します。BUCKET_NAME
を最後に定義した後に新しくコマンドライン セッションを開始した場合は、再定義する必要があります。たとえば、以下のOUTPUT_PATH
は、census_core_hptune_1
という名前のディレクトリを指しています。OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
次のコマンドを実行して、複数のワーカーを使用するだけでなくハイパーパラメータ調整も使用するトレーニング ジョブを送信します。
gcloud ai-platform jobs submit training $JOB_NAME \ --stream-logs \ --job-dir $OUTPUT_PATH \ --runtime-version 1.14 \ --python-version 2.7 \ --config $HPTUNING_CONFIG \ --module-name trainer.task \ --package-path trainer/ \ --region $REGION \ --scale-tier STANDARD_1 \ -- \ --train-files $TRAIN_DATA \ --eval-files $EVAL_DATA \ --train-steps 1000 \ --verbosity DEBUG \ --eval-steps 100
ハイパーパラメータ調整の詳細については、ハイパーパラメータ調整の概要をご覧ください。
予測をサポートするモデルをデプロイする
モデルの名前を選択します。先頭は英字にしてください。その後には英字、数字、アンダースコアのみ使用できます。例:
MODEL_NAME=census
AI Platform モデルを作成します。
gcloud ai-platform models create $MODEL_NAME --regions=$REGION
使用するジョブ出力を選択します。次のサンプルでは、
census_dist_1
というジョブを使用しています。OUTPUT_PATH=gs://$BUCKET_NAME/census_dist_1
エクスポートしたトレーニング済みモデルのバイナリのフルパスを調べます。
gsutil ls -r $OUTPUT_PATH/export
$OUTPUT_PATH/export/census/<timestamp>
というディレクトリを探し、このディレクトリ パス(末尾に : なし)をコピーして、環境変数MODEL_BINARIES
にその値を設定します。例:MODEL_BINARIES=gs://$BUCKET_NAME/census_dist_1/export/census/1487877383942/
ここで、
$BUCKET_NAME
は Cloud Storage バケット名で、census_dist_1
は出力ディレクトリです。次のコマンドを実行して、バージョン
v1
を作成します。gcloud ai-platform versions create v1 \ --model $MODEL_NAME \ --origin $MODEL_BINARIES \ --runtime-version 1.14 \ --python-version 2.7
models list
コマンドを使用して、モデルのリストを取得できます。
gcloud ai-platform models list
デプロイ済みモデルにオンライン予測リクエストを送信する
モデルに予測リクエストを送信できるようになりました。たとえば、次のコマンドは、サンプル GitHub リポジトリの一部としてダウンロードした test.json
ファイルを使用してオンライン予測リクエストを送信します。
gcloud ai-platform predict \
--model $MODEL_NAME \
--version v1 \
--json-instances ../test.json
レスポンスには、test.json
のデータエントリに基づく各ラベル(>50K と <=50K)の確率が含まれます。これは、予測される所得が 50,000 ドル超と 50,000 ドル以下のどちらであるかを示しています。
レスポンスは次のようになります。
CLASSES PROBABILITIES [u'0', u'1'] [0.9969545602798462, 0.0030454816296696663]
バッチ予測ジョブの送信
バッチ予測サービスは、大量のデータがあり、予測結果の受信にレイテンシ要件がない場合に便利です。これはオンライン予測と同じ形式を使用しますが、データを Cloud Storage に保存する必要があります。
ジョブの名前を設定します。
JOB_NAME=census_prediction_1
出力パスを設定します。
OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
予測ジョブを送信します。
gcloud ai-platform jobs submit prediction $JOB_NAME \ --model $MODEL_NAME \ --version v1 \ --data-format text \ --region $REGION \ --input-paths $TEST_JSON \ --output-path $OUTPUT_PATH/predictions
前のコマンドとは異なり、このコマンドはすぐに戻ります。ジョブの進行を確認し、終了するのを待ちます。
gcloud ai-platform jobs describe $JOB_NAME
ジョブが完了すると、state: SUCCEEDED
が表示されます。これには数分間かかる場合があります。また、次のコマンドを使用しても、端末でジョブログを確認できます。
gcloud ai-platform jobs stream-logs $JOB_NAME
Cloud Console で [AI Platform] > [ジョブ] に移動しても進行状況を確認できます。
ジョブが成功したら、以下の操作を実行できます。
出力の要約を確認します。
gsutil cat $OUTPUT_PATH/predictions/prediction.results-00000-of-00001
出力は次のようになります。
{"probabilities": [0.9962924122810364, 0.003707568161189556], "logits": [-5.593664646148682], "classes": 0, "logistic": [0.003707568161189556]}
gsutil ls
コマンドを使用して、ジョブが生成した他のファイルを一覧表示します。gsutil ls -r $OUTPUT_PATH
オンライン予測と比較した場合のバッチ予測:
- インスタンスが少ない場合は遅くなります(インスタンスが多数ある場合に適しています)。
- 入力とは異なる順序で出力を返す可能性があります(ただし、数値インデックスにより、それぞれの出力を対応する入力インスタンスに適合させることができます。オンライン予測では、出力が元の入力インスタンスと同じ順序で返されるため、数値インデックスは必要ありません)。
予測が利用できるようになったら、次の手順としては、通常、これらの予測をデータベースまたはデータ処理パイプラインに取り込みます。
このサンプルでは、バッチ予測を実行する前にモデルをデプロイしましたが、バッチ予測ジョブを送信するときにモデルのバイナリ URI を指定することで、このステップをスキップできます。モデルをデプロイする前にそのモデルから予測を生成する利点の 1 つは、さまざまな評価データセットでモデルのパフォーマンスを評価して、そのモデルがデプロイ基準を満たすかどうかを判断できることです。
クリーンアップ
トレーニングと予測実行の出力の分析が完了している場合は、このガイドで使用されている Cloud Storage ディレクトリについて Google Cloud アカウントに追加料金が発生しないようにできます。
ターミナル ウィンドウを開きます(まだ開いていない場合)。
gsutil rm コマンドに -r フラグを付けて実行します。これにより、最新のジョブが格納されているディレクトリが削除されます。
gsutil rm -r gs://$BUCKET_NAME/$JOB_NAME
コマンドが正常終了した場合は、次のようなメッセージが返されます。
Removing gs://my-awesome-bucket/just-a-folder/cloud-storage.logo.png#1456530077282000... Removing gs://my-awesome-bucket/...
このサンプル用に作成したディレクトリが他にもある場合は、このコマンドを繰り返し実行します。
バケットにその他のデータが格納されていない場合は、gsutil rm -r
コマンドをバケットそのものに対して実行することもできます。
データについて
このサンプルでトレーニングに使用している国勢調査所得データセットは、UC Irvine Machine Learning Repository でホストされています。
国勢調査データ転載元: Lichman, M.(2013)。UCI Machine Learning Repository http://archive.ics.uci.edu/ml。Irvine, CA: University of California, School of Information and Computer Science。このデータセットは、データセット ソース(http://archive.ics.uci.edu/ml)で指定される次の条件の下ですべてのユーザーが使用できるように公開されています。Google はこのデータセットを「現状有姿」で提供し、明示または黙示を問わず、いかなる保証も行いません。Google は、このデータセットの使用で、直接または間接の損害が発生したとしても一切の責任を負いません。
次のステップ
これで、人口統計データをトレーニングと予測に使用する AI Platform サンプルのチュートリアルを完了しました。トレーニング ジョブをローカルで検証し、それをクラウド上で単一インスタンス モードと分散モードの両方で実行し、ハイパーパラメータ調整を使用してモデルを改善し、モデルを使用してオンライン予測とバッチ予測を取得しました。
以下のリソースは、引き続き AI Platform について学習する際に役立ちます。
- AI Platform の基本について知る。
- GPU と Cloud TPU ノードを使用して AI Platform でモデルをトレーニングする方法を学習する。
- 下位レベルの TensorFlow を使用してトレーニングおよび予測を行う例を試す。