スタートガイド: TensorFlow Estimator によるトレーニングと予測

このチュートリアルで 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 Platform の課金対象コンポーネントを次の目的で使用します。

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

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

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

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

GCP プロジェクトの設定

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

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

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

    プロジェクト セレクタのページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。 詳しくは、課金を有効にする方法をご覧ください。

  4. AI Platform(Cloud Machine Learning Engine)と 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. コンソール ウィンドウの上部にある [Google 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 ai-platform models list
  2. モデルが作成されていない場合は、空のリストが返されます。

    Listed 0 items.

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

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

    gcloud components update

Python バージョンのサポート

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

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

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

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

サンプルを 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 は、一般公開されている Google Cloud Storage バケットでホストされています。このサンプルで使用する Cloud Storage 上のバージョンはオリジナルのソースデータではなく、データが若干クリーニングされています。詳しくは、データについてをご覧ください。

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

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

    mkdir data
    gsutil -m cp gs://cloud-samples-data/ai-platform/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

前のステップでアクティブにした仮想環境を有効にして、次のコマンドを実行します。

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 でのライブのクラウド トレーニング ジョブとほぼ同じ環境でトレーニング プロセスを開始します。

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

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

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

    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

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

  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 を実行するプロジェクトに含まれていない場合は、明示的に 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 環境変数を設定します。

    AI Platform ジョブを実行する予定のリージョンと同じリージョンを使用してください。詳しくは、AI Platform サービスの利用可能なリージョンをご覧ください。

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

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

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

データファイルを 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 ai-platform jobs submit training $JOB_NAME \
        --job-dir $OUTPUT_PATH \
        --runtime-version 1.14 \
        --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 ai-platform jobs stream-logs $JOB_NAME

gcloud ai-platform 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 ai-platform jobs submit training $JOB_NAME \
        --job-dir $OUTPUT_PATH \
        --runtime-version 1.14 \
        --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 ai-platform 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 ai-platform jobs submit training $JOB_NAME \
        --stream-logs \
        --job-dir $OUTPUT_PATH \
        --runtime-version 1.14 \
        --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 ai-platform 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 ai-platform versions create v1 \
        --model $MODEL_NAME \
        --origin $MODEL_BINARIES \
        --runtime-version 1.14
    

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

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

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

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

    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

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

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

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

Google Cloud 機械学習ドキュメント