はじめに

このチュートリアルで AI Platform を使用する前に、機械学習と TensorFlow について十分に理解しておく必要があります。詳細を学ぶには、TensorFlow API を使用する機械学習(集中講座)をご覧ください。さらに、Learn with Google にも機械学習に関する多数の教育リソースが揃っています。

概要

このドキュメントでは、AI Platform でのトレーニングと予測についてエンドツーエンドのチュートリアルを提供します。国勢調査データセットを使用するサンプルのチュートリアルを進めていき、次の作業を行います。

  • TensorFlow トレーニング アプリケーションを作成し、それをローカルで検証します。
  • クラウドの単一ワーカー インスタンスでトレーニング ジョブを実行します。
  • クラウド内の分散トレーニング ジョブとしてトレーニング ジョブを実行します。
  • ハイパーパラメータ チューニングを使用して、ハイパーパラメータを最適化します。
  • 予測をサポートするモデルをデプロイします。
  • オンライン予測をリクエストし、レスポンスを確認します。
  • バッチ予測をリクエストします。

作業内容

このサンプルでは、米国国勢調査所得データセットに基づいて所得区分を予測するためにワイド&ディープモデルを構築します。2 つの所得区分(ラベルとも呼ばれる)は次のとおりです。

  • >50K: 50,000 ドル超
  • <=50K: 50,000 ドル以下

ワイド&ディープモデルでは、ディープ ニューラル ネット(DNN)を使用して、複雑な特徴や、それらの特徴間の相互作用に関して概要レベルの抽象化を学習します。次にワイド&ディープモデルは、DNN からの出力を、より簡単な特性に対して実行される線形回帰と結合します。これにより、多くの構造化されたデータ問題に有効な、バランスの取れたパワーとスピードを実現できます。

ワイド&ディープモデルについて詳しくは、Google Research Blog の記事、ワイド&ディープ ラーニング: TensorFlow との結合による改善をご覧ください。

このサンプルでは、TensorFlow の既製の DNNCombinedLinearClassifier クラスを使用してモデルを定義します。国勢調査データセットに特有のデータ変換を定義してから、これらの変換された(可能性のある)特徴をモデルの DNN または線形部分に割り当てます。

料金

このチュートリアルでは、Google Cloud Platform の課金対象コンポーネントを次の目的で使用します。

  • AI Platform:
    • トレーニング
    • 予測
  • Cloud Storage:
    • トレーニング用の入力データ格納
    • トレーニング アプリケーション パッケージのステージング
    • トレーニングによる出力の保存
    • バッチ予測で使用する入力データの保存

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。

クラウド環境の設定とテスト

次の操作を行って GCP アカウントを設定し、AI Platform の API を有効にします。さらに、Cloud SDK をインストールして有効にします。

GCP プロジェクトの設定

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

  3. プロジェクトに対して課金が有効になっていることを確認します。

    課金を有効にする方法について

  4. AI Platform と Compute Engine API を有効にします。

    APIを有効にする

  5. Cloud SDK をインストールして初期化します。

環境の設定

以下のいずれかのオプションを選択して、macOS のローカル環境または Cloud Shell のリモート環境を設定します。

macOS の場合、以下の [macOS] タブで環境を設定することをおすすめします。[Cloud Shell] タブに表示される Cloud Shell は、macOS、Linux、Windows で使用できます。Cloud Shell は、AI Platform の機能を試すような場合には便利ですが、継続的な開発作業には適していません。

macOS

  1. Python のインストールを確認する
    Python がインストールされていることを確認します。まだの場合はインストールします。

    python -V
  2. pip のインストールを確認する
    pip は現在のバージョンの Python に含まれる Python のパッケージ マネージャーです。pip --version を実行して、pip がインストール済みかどうかを確認します。インストールされていない場合は、pip のインストール方法をご覧ください。

    次のコマンドを使用すると pip をアップグレードできます。

    pip install -U pip

    詳細については、pip のドキュメントをご覧ください。

  3. virtualenv をインストールする
    virtualenv は、隔離された Python 環境を作成するためのツールです。virtualenv --version を実行して、virtualenv がインストール済みかどうかを確認します。インストールされていない場合は、次のコマンドで virtualenv をインストールします。

    pip install --user --upgrade virtualenv

    このガイド用の隔離された開発環境を作成するために、virtualenv で新しい仮想環境を作成します。たとえば、次のコマンドを実行すると、cmle-env という名前の環境が有効になります。

    virtualenv cmle-env
    source cmle-env/bin/activate
  4. このチュートリアルでは、仮想環境内で残りのコマンドを実行します。

    virtualenv の使用方法に関する詳細をご覧ください。virtualenv を終了するには deactivate を実行します。

Cloud Shell

  1. Google Cloud Platform Console を開きます。

    Google Cloud Platform Console

  2. コンソール ウィンドウの上部にある [Cloud Shell をアクティブにする] ボタンをクリックします。

    Google Cloud Shell をアクティブにする

    コンソールの下部の新しいフレーム内で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。シェル セッションが初期化されるまで、数秒かかる場合があります。

    Cloud Shell セッション

    Cloud Shell セッションが使用できる状態になります。

  3. 選択したプロジェクトを使用するように gcloud コマンドライン ツールを構成します。

    gcloud config set project [selected-project-id]

    [selected-project-id] はプロジェクト ID です。ID を囲んでいる角かっこは不要です。

Google Cloud SDK のコンポーネントを確認する

Google Cloud SDK のコンポーネントがインストールされていることを確認するには:

  1. モデルを一覧表示します。

    gcloud ml-engine models list
  2. モデルが作成されていない場合は、空のリストが返されます。

    Listed 0 items.

    モデルの作成を開始した後は、このコマンドを使用するとそのモデルがリストに表示されます。

  3. 以前に gcloud をインストールしている場合は、gcloud を更新します。

    gcloud components update

TensorFlow をインストールする

TensorFlow をインストールするには、次のコマンドを実行します。

pip install --user --upgrade tensorflow

インストールを確認します。

python -c "import tensorflow as tf; print('TensorFlow version {} is installed.'.format(tf.VERSION))"

特定の命令を使用するための TensorFlow ライブラリがコンパイルされていないという警告は無視してかまいません。

他のインストール オプションやトラブルシューティング情報を含め、TensorFlow のインストールの詳細については、TensorFlow のドキュメントをご覧ください。

Python バージョンのサポート

AI Platform はデフォルトで Python 2.7 を実行します。このチュートリアルのサンプルは Python 2.7 を使用します。

AI Platform のランタイム バージョン 1.4 以上を使用している場合は、トレーニングで Python 3.5 を使用できます。Python 2 または Python 3 でトレーニングを行ったかどうかにかかわらず、オンライン予測とバッチ予測はトレーニングされたモデルで動作します。

Python 3.5 を使用したトレーニング ジョブの送信をご覧ください。

このチュートリアルのコードをダウンロードする

  1. サンプルを GitHub リポジトリからダウンロードします。

macOS

  1. AI Platform のサンプル zip ファイルをダウンロードして抽出します。

    zip ファイルをダウンロード

  2. ターミナル ウィンドウを開き、抽出された cloudml-samples-master ディレクトリが格納されているディレクトリに移動します。

  3. cloudml-samples-master > census > estimator ディレクトリに移動します。このチュートリアルのコマンドは、estimator ディレクトリから実行する必要があります。

    cd cloudml-samples-master/census/estimator
    

Cloud Shell

  1. 次のコマンドを入力して、AI Platform のサンプル zip ファイルをダウンロードします。

    wget https://github.com/GoogleCloudPlatform/cloudml-samples/archive/master.zip
    
  2. ファイルを解凍して cloudml-samples-master ディレクトリを抽出します。

    unzip master.zip
    
  3. cloudml-samples-master > census > estimator ディレクトリに移動します。このチュートリアルのコマンドは、estimator ディレクトリから実行する必要があります。

    cd cloudml-samples-master/census/estimator
    

トレーニング アプリケーションをローカルで開発して検証する

トレーニング アプリケーションをクラウドで実行する前に、ローカルで実行します。ローカル環境は、効率的な開発と検証のワークフローを提供するため、迅速な反復処理が可能です。また、アプリケーションをローカルでデバッグする際にクラウド リソースの課金が発生することもありません。

トレーニング データの入手

関連データファイルの adult.dataadult.test は、一般公開された Cloud Storage バケットでホストされています。このサンプルで使用する Cloud Storage 上のバージョンはオリジナルのソースデータではなく、データが若干クリーニングされています。データの詳細についてはこちらをご覧ください。

データファイルは Cloud Storage から直接読み取ることができ、ローカル環境にコピーすることもできます。このサンプルでは、データをダウンロードしてローカルでトレーニングを行い、次に自分の Cloud Storage バケットにアップロードしてクラウドでトレーニングを行います。

  1. データをローカルのファイル ディレクトリにダウンロードし、ダウンロードしたデータファイルを指す変数を設定します。

    mkdir data
    gsutil -m cp gs://cloud-samples-data/ml-engine/census/data/* data/
    
  2. 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

TensorFlow をローカルにインストールする場合、仮想環境の使用をおすすめします。次の項目をご覧ください。

Docker に精通している場合は、TensorFlow コンテナ内でこのチュートリアルを完了できます。詳細については、Docker で TensorFlow をインストールするをご覧ください。

このサンプルの中にある requirements.txt ファイルを使用すると、このプロジェクトに必要な依存関係をインストールできます。仮想環境内で次のコマンドを入力します。

  pip install --user -r ../requirements.txt

このコマンドを実行すると、チュートリアルで使用する TensorFlow 1.10 がインストールされます。

Cloud Shell

TensorFlow は Cloud Shell にインストールされていますが、サンプルの requirements.txt ファイルを実行して、サンプルで必要な TensorFlow と同じバージョンを使用していることを確認する必要があります。

  pip install --user -r ../requirements.txt

このコマンドを実行すると、チュートリアルで使用する TensorFlow 1.10 がインストールされます。

ローカル トレーニング ジョブを実行する

ローカル トレーニング ジョブは Python で記述されたトレーニング プログラムを読み込み、AI Platform でのライブのクラウド トレーニング ジョブとほぼ同じ環境でトレーニング プロセスを開始します。

  1. 出力ディレクトリを指定し、MODEL_DIR 変数を設定します。次のコマンドは、MODEL_DIRoutput の値に設定します。

    MODEL_DIR=output
    
  2. 以前のトレーニングの結果が出力ディレクトリに残っている場合は、ディレクトリの内容を削除することをおすすめします。次のコマンドは、output ディレクトリ内のすべてのデータを削除します。

    rm -rf $MODEL_DIR/*
    
  3. トレーニングをローカルで実行するには、次のコマンドを実行します。

    gcloud ml-engine 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

  1. TensorBoard の起動:

    tensorboard --logdir=$MODEL_DIR
    
  2. TensorBoard が起動したら、ブラウザで http://localhost:6006 にアクセスします。

Cloud Shell

  1. TensorBoard の起動:

    tensorboard --logdir=$MODEL_DIR --port=8080
    
  2. コマンドラインの上部にある [ウェブでプレビュー] メニューで、ポート 8080 上でのプレビューを選択します。

[精度] をクリックすると、ジョブの進行状況に合わせて精度の変化のグラフィカル表現が表示されます。

Tensorboard 精度グラフ

TensorBoard は、コマンドラインで ctrl+c キーを押して、いつでもシャットダウンできます。

分散モードでローカル トレーニング ジョブを実行する

--distributed フラグを使用してローカル トレーニング ジョブを実行すると、AI Platform の分散実行環境でモデルが機能するかどうかを検証できます。

  1. 出力ディレクトリを指定し、再度 MODEL_DIR 変数を設定します。次のコマンドは、MODEL_DIRoutput-dist の値に設定します。

    MODEL_DIR=output-dist
    
  2. output ディレクトリに以前のトレーニング実行によるデータが残っている場合は、そのディレクトリの内容を削除します。

    rm -rf $MODEL_DIR/*
    
  3. local train オプションを使用して --distributed コマンドを実行します。ユーザー引数とコマンドライン引数を区切る -- の上にフラグを配置してください。

    gcloud ml-engine 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

  1. TensorBoard の起動:

    tensorboard --logdir=$MODEL_DIR
    
  2. TensorBoard が起動したら、ブラウザで http://localhost:6006 にアクセスします。

Cloud Shell

  1. TensorBoard の起動:

    tensorboard --logdir=$MODEL_DIR --port=8080
    
  2. コマンドラインの上部にある [ウェブでプレビュー] メニューで、ポート 8080 上でのプレビューを選択します。

Cloud Storage バケットの設定

このセクションでは、新しいバケットの作成方法を説明します。既存のバケットも使用できますが、AI Platform で使用するプロジェクトに設定されていない場合は、AI Platform のサービス アカウントに対するアクセス権を明示的に付与する必要があります。

  1. 新しいバケットに名前を指定します。名前は Cloud Storage のすべてのバケット全体で重複しないようにする必要があります。

    BUCKET_NAME="your_bucket_name"

    たとえば、プロジェクト名に -mlengine を追加して使用します。

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-mlengine
  2. 作成したバケット名を確認します。

    echo $BUCKET_NAME
  3. バケットのリージョンを選択して、REGION 環境変数を設定します。

    たとえば、次のコードは REGION を作成して、その値を us-central1 に設定します。

    REGION=us-central1
  4. 新しいバケットを作成します。

    gsutil mb -l $REGION gs://$BUCKET_NAME

    注: 使用するリージョンは、AI Platform を実行するリージョンと同一にしてください。この例では us-central1 を使用しています。「使ってみる」の説明でこのリージョンが使用されているためです。

データファイルを Cloud Storage バケットにアップロードします。

  1. gsutil を使用して、2 つのファイルを Cloud Storage バケットにコピーします。

    gsutil cp -r data gs://$BUCKET_NAME/data
    
  2. TRAIN_DATA および EVAL_DATA 変数がファイルを指すように設定します。

    TRAIN_DATA=gs://$BUCKET_NAME/data/adult.data.csv
    EVAL_DATA=gs://$BUCKET_NAME/data/adult.test.csv
    
  3. 再度 gsutil を使用して JSON テストファイル test.json を Cloud Storage バケットにコピーします。

    gsutil cp ../test.json gs://$BUCKET_NAME/data/test.json
    
  4. このファイルを指すように TEST_JSON 変数を設定します。

    TEST_JSON=gs://$BUCKET_NAME/data/test.json
    

クラウド内で単一インスタンスのトレーニング ジョブを実行する

単一インスタンスと分散モードの両方で動作する検証済みトレーニング ジョブを使用することで、クラウド内でトレーニング ジョブを実行する準備が整いました。まず、単一インスタンスのトレーニング ジョブをリクエストします。

単一インスタンスのトレーニング ジョブを実行するには、デフォルトの BASIC スケール階層を使用します。最初のジョブ リクエストは開始に数分かかる場合がありますが、後続のジョブはより迅速に実行されます。これにより、トレーニング ジョブを開発する際にジョブを迅速に反復して検証できます。

  1. 最初のトレーニングに、以降のトレーニングと区別できるような名前を選択します。たとえば、反復を表す番号を追加できます。

    JOB_NAME=census_single_1
    
  2. トレーニングと予測ジョブをリクエストする際に指定する OUTPUT_PATH 変数に、AI Platform から生成される出力のディレクトリを指定します。OUTPUT_PATH は、モデルのチェックポイント、概要、およびエクスポート用の Cloud Storage の場所を完全修飾パスで表します。前の手順で定義した BUCKET_NAME 変数を使用できます。

    ジョブ名を出力ディレクトリとして使用することをおすすめします。たとえば、以下の OUTPUT_PATH は、census_single_1 という名前のディレクトリを指しています。

    OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
    
  3. 以下のコマンドを実行して、クラウドで単一のプロセスを使用するトレーニング ジョブを送信します。ここでは、--verbosity タグを DEBUG に設定して、ロギング出力全体を検査し、精度、損失、およびその他の指標を取得できるようにします。出力に含まれる他の多くの警告メッセージは、このサンプルでは無視してかまいません。

    gcloud ml-engine jobs submit training $JOB_NAME \
        --job-dir $OUTPUT_PATH \
        --runtime-version 1.10 \
        --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 Platform Console で、[AI Platform] > [ジョブ] に移動してトレーニング ジョブの進行状況をモニタリングできます。

出力の検査

クラウドのトレーニングでは、出力は Cloud Storage に生成されます。このサンプルでは、出力は OUTPUT_PATH に保存されます。それらを一覧表示するには、次のコマンドを実行します。

gsutil ls -r $OUTPUT_PATH

ローカルのトレーニングからの出力(上記)に類似した出力が表示されます。

Stackdriver ログの検査

ログは、クラウド上のトレーニング コードの動作を理解するために便利な方法です。AI Platform がトレーニング ジョブを実行すると、すべての stdout ストリームと stderr ストリーム、ロギング ステートメントが収集されます。このようなログは Stackdriver Logging に保存されます。このログは処理の実行中でも表示できます。

ジョブのログを確認するには、GCP Console で [AI Platform] > [ジョブ] に移動し、[ログの表示] をクリックするのが最も簡単な方法です。

[すべてのログ] を選択したままにすると、すべてのワーカーのすべてのジョブが表示されます。また、特定のタスクを選択することもできます。master-replica-0 は、マスターの観点からのジョブ実行の概要を示します。

詳細ロギングを選択したため、ロギング出力全体を検査できます。ログの中から accuracy という用語を探します。

AI Platform ジョブの Stackdriver Logging コンソールのスクリーン ショット

ターミナルでこれらのログを表示するには、コマンドラインから次のコマンドを実行します。

gcloud ml-engine jobs stream-logs $JOB_NAME

gcloud ml-engine jobs stream-logs のすべてのオプションを参照してください。

TensorBoard を使用した要約ログの検査

TensorBoard を起動し、トレーニングの間に生成された要約ログを参照することにより、実行中でも、実行後でもトレーニング ジョブの動作を検査することができます。

トレーニング プログラムは Cloud Storage の場所に要約を直接書き込むため、TensorBoard はイベント ファイルを手動でコピーすることなく自動的に読み取ることができます。

macOS

  1. TensorBoard の起動:

    tensorboard --logdir=$OUTPUT_PATH
    
  2. TensorBoard が起動したら、ブラウザで http://localhost:6006 にアクセスします。

Cloud Shell

  1. TensorBoard の起動:

    tensorboard --logdir=$OUTPUT_PATH --port=8080
    
  2. コマンドラインの上部にある [ウェブでプレビュー] メニューで、ポート 8080 上でのプレビューを選択します。

[精度] をクリックすると、ジョブの進行状況に合わせて精度の変化のグラフィカル表現が表示されます。

TensorBoard は、コマンドラインで ctrl+c キーを押して、いつでもシャットダウンできます。

クラウドで分散トレーニングを実行する

トレーニング ジョブを実行する際に Google のスケーラブルなインフラストラクチャを活用するには、トレーニング ジョブを分散モードで実行するように構成します。

このモデルを AI Platform の分散プロセスとして実行するために、コードを変更する必要はありません。

分散ジョブを実行するには、--scale-tier を BASIC より上の階層に設定します。スケール階層について詳しくは、スケール階層のドキュメントをご覧ください。

  1. 分散トレーニング ジョブに、他のトレーニング ジョブと区別できるような名前を選択します。たとえば、dist を使用して分散を表し、番号を付加して反復を表すことができます。

    JOB_NAME=census_dist_1
    
  2. ジョブ間でチェックポイントを誤って再利用しないよう、ジョブ名を含めた OUTPUT_PATH を指定します。BUCKET_NAME を最後に定義した後に新しくコマンドライン セッションを開始した場合は、再定義する必要があります。たとえば、以下の OUTPUT_PATH は、census-dist-1 という名前のディレクトリを指しています。

    OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
    
  3. 以下のコマンドを実行し、クラウドで複数のワーカーを使用するトレーニング ジョブを送信します。ジョブの開始には数分かかる場合があります。

    ユーザー引数とコマンドライン引数を区切る -- の上に --scale-tier を配置します。たとえば、以下のコマンドは、STANDARD_1 というスケール階層を使用します。

    gcloud ml-engine jobs submit training $JOB_NAME \
        --job-dir $OUTPUT_PATH \
        --runtime-version 1.10 \
        --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 Platform Console で、[AI Platform] > [ジョブ] に移動してジョブの進行状況をモニタリングできます。

ログの検査

単一インスタンスのトレーニング ジョブと同じ方法で、Stackdriver のログと要約ログを調べます。

Stackdriver ログの場合: GCP Console で [AI Platform] > [ジョブ] の順に移動して [ログを表示] をクリックします。あるいは、ターミナルから次のコマンドを実行します。

gcloud ml-engine jobs stream-logs $JOB_NAME

TensorBoard の場合:

macOS

  1. TensorBoard の起動:

    tensorboard --logdir=$OUTPUT_PATH
    
  2. TensorBoard が起動したら、ブラウザで http://localhost:6006 にアクセスします。

Cloud Shell

  1. TensorBoard の起動:

    tensorboard --logdir=$OUTPUT_PATH --port=8080
    
  2. コマンドラインの上部にある [ウェブでプレビュー] メニューで、ポート 8080 上でのプレビューを選択します。

ハイパーパラメータの調整

AI Platform は、モデルの予測精度を最大限に高められるように、ハイパーパラメータ調整を行います。国勢調査のサンプルでは、hptuning_config.yaml という名前の YAML ファイルにハイパーパラメータ構成設定値を格納し、--config 変数を使用して、トレーニング リクエストにそのファイルを含めています。

  1. 新しいジョブ名を選択し、構成ファイルを参照する変数を作成します。

    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
    
  2. ジョブ間でチェックポイントを誤って再利用しないよう、ジョブ名を含めた OUTPUT_PATH を指定します。BUCKET_NAME を最後に定義した後に新しくコマンドライン セッションを開始した場合は、再定義する必要があります。たとえば、次の OUTPUT_PATH は、census_core_hptune_1 という名前のディレクトリを指しています。

    OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
    
  3. 次のコマンドを実行して、複数のワーカーを使用するだけでなくハイパーパラメータ調整も使用するトレーニング ジョブを送信します。

    gcloud ml-engine jobs submit training $JOB_NAME \
        --stream-logs \
        --job-dir $OUTPUT_PATH \
        --runtime-version 1.10 \
        --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
    

ハイパーパラメータ調整の詳細については、ハイパーパラメータ調整の概要をご覧ください。

予測をサポートするモデルをデプロイする

  1. モデルの名前を選択します。先頭は英字にしてください。その後には英字、数字、アンダースコアのみ使用できます。次に例を示します。

    MODEL_NAME=census
    
  2. AI Platform モデルを作成します。

    gcloud ml-engine models create $MODEL_NAME --regions=$REGION
    
  3. 使用するジョブ出力を選択します。次のサンプルでは、census_dist_1 というジョブを使用しています。

    OUTPUT_PATH=gs://$BUCKET_NAME/census_dist_1
    
  4. エクスポートしたトレーニング済みモデルのバイナリのフルパスを調べます。

    gsutil ls -r $OUTPUT_PATH/export
    
  5. $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 は出力ディレクトリです。

  6. 次のコマンドを実行して、バージョン v1 を作成します。

    gcloud ml-engine versions create v1 \
        --model $MODEL_NAME \
        --origin $MODEL_BINARIES \
        --runtime-version 1.10
    

models list コマンドを使用して、モデルの一覧を取得できます。

gcloud ml-engine models list

デプロイ済みモデルにオンライン予測リクエストを送信する

モデルに予測リクエストを送信できるようになりました。たとえば、次のコマンドは、サンプル GitHub リポジトリの一部としてダウンロードした test.json ファイルを使用してオンライン予測リクエストを送信します。

gcloud ml-engine 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 に保存する必要があります。

  1. ジョブの名前を設定します。

    JOB_NAME=census_prediction_1
    
  2. 出力パスを設定します。

    OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
    
  3. 予測ジョブを送信します。

    gcloud ml-engine 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 ml-engine jobs describe $JOB_NAME

ジョブが完了すると、state: SUCCEEDED が表示されます。これには数分間かかる場合があります。また、次のコマンドを使用しても、ターミナルでジョブログを確認できます。

gcloud ml-engine jobs stream-logs $JOB_NAME

GCP 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 ディレクトリの GCP アカウントに追加料金が発生することを回避できます。

  1. ターミナル ウィンドウを開きます(まだ開いていない場合)。

  2. 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 について学習する際に役立ちます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

TensorFlow 用 AI Platform