ワイド&ディープ組み込みアルゴリズム スタートガイド

AI Platform Training の組み込みアルゴリズムを使用すると、トレーニング アプリケーションのコードを一切作成せずに、トレーニング データの送信とアルゴリズムの選択を行い、AI Platform Training による前処理とトレーニングを実施できます。

概要

このチュートリアルでは、コードを一切作成せずにワイド&ディープモデルをトレーニングします。国勢調査所得データセットを AI Platform Training に送信して前処理とトレーニングを実施し、次にモデルを AI Platform Training にデプロイして予測を取得します。作成したモデルで、個人の年収が $50,000 を超える確率を予測します。

始める前に

コマンドラインでこのチュートリアルを実行するには、Cloud Shell を使用するか、Google Cloud CLI がインストールされている環境を使用します。

次の手順に沿って GCP アカウントの設定、必要な API の有効化、Google Cloud CLI のインストールと有効化を行います。

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  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. Make sure that billing is enabled for your Google Cloud project.

  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

設定

表形式の組み込みアルゴリズムを使用するには、CSV ファイルからヘッダー行を削除し、ターゲット値を最初の列に移動する必要があります。このチュートリアルで使用するため、元の国勢調査データセットに変更を加えて、Cloud Storage の公開バケット gs://cloud-samples-data/ai-platform/census/algorithms/data/ に追加しました。

Console

トレーニング ジョブを開始する前に、Cloud Storage の公開バケットからご使用の Cloud Storage バケットにデータをコピーする必要があります。

サンプルデータを Cloud Storage バケットにコピーする

  1. まず、Cloud Storage の公開バケットからトレーニング データとテストデータをダウンロードします。

    1. Cloud Storage の公開バケットに移動します。

      サンプルデータを取得する

    2. test.csvtrain.csv の両方をダウンロードします。

      1. ファイル名をクリックします。

      2. [オブジェクトの詳細] ページで、[ダウンロード] をクリックします。これらのファイルは、それぞれ ai-platform_census_algorithms_data_test.csvai-platform_census_algorithms_data_train.csv としてローカル環境にダウンロードされます。

  2. 次に、トレーニング データとテストデータをご使用の Cloud Storage バケットにアップロードします。

    1. Cloud Storage バケットの [ブラウザ] ページに移動します。[プロジェクトを選択] プルダウン リストからプロジェクトを選択するか、新しいタブでプロジェクトを開きます。

      Cloud Storage の [ブラウザ] ページ

    2. 使用するバケットの名前をクリックします。バケットが存在しない場合は、新しいバケットを作成します(新しいバケットを作成する場合は、リージョン バケットであることを確認してください。また、AI Platform Training のトレーニング ジョブを実行しているリージョンと同じリージョンを選択してください)。

    3. (省略可)[フォルダを作成] をクリックし、ファイルをアップロードするフォルダを作成します。フォルダの名前(「data」など)を入力して、[作成] をクリックします。次に、フォルダ名をクリックして新しいフォルダに移動します。

    4. [ファイルをアップロード] をクリックして、トレーニング ファイルとテストファイル(ai-platform_census_algorithms_data_train.csvai-platform_census_algorithms_data_test.csv)の両方をバケットにアップロードします。

これでデータがバケットにコピーされたので、使用するアルゴリズムの種類を選択してトレーニング ジョブを開始できます。

アルゴリズムを選択する

  1. Google Cloud コンソールで AI Platform Training の [ジョブ] ページに移動します。

    AI Platform Training の [ジョブ] ページ

  2. [新規トレーニング ジョブ] ボタンをクリックします。下に表示されたオプションから、[組み込みアルゴリズムによるトレーニング] をクリックします。[新しいトレーニング ジョブの作成] ページが表示されます。

  3. トレーニング ジョブの作成は 4 つのステップに分かれています。最初のステップはトレーニング アルゴリズムです。[ワイド&ディープ] を選択して [次へ] をクリックします。

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

# Copy the training data into your Cloud Storage bucket, and set the path
# to your copy of the training data.
TRAINING_DATA_SOURCE=gs://cloud-samples-data/ai-platform/census/algorithms/data/train.csv
TRAINING_DATA_PATH=gs://$BUCKET_NAME/algorithms-demo/data/train.csv
gsutil cp $TRAINING_DATA_SOURCE $TRAINING_DATA_PATH

# Specify the Docker container URI specific to the algorithm.
IMAGE_URI="gcr.io/cloud-ml-algos/wide_deep_learner_cpu: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 リージョンを使用できます。

ワイド&ディープ組み込みアルゴリズムに固有の引数を、次に示します。

アルゴリズムの引数
引数 説明
preprocess AI Platform Training にデータの前処理を行わせるかどうかを示すブール引数。
model_type トレーニングするモデルのタイプ(分類または回帰)を示します。
training_data_path Cloud Storage 上のトレーニング データの場所。トレーニング データは CSV ファイルでなければなりません。
learning_rate 線形オプティマイザーによって使用される学習率。
max_steps トレーニングを実行するステップの数。
batch_size トレーニング ステップあたりの使用するサンプル数。
dnn_learning_rate モデルの DNN 部分によって使用される学習率。
dnn_dropout ドロップアウトの確率。
hidden_units 各レイヤの隠しユニットの数を表すカンマ区切りの文字列。
use_wide 設定した場合、DNN モデルのワイド部分でカテゴリ列が使用されます。
embed_categories 設定した場合、カテゴリ列が埋め込んで使用され、モデルのディープ部分で使用されます。

ワイド&ディープ アルゴリズムのその他すべてのフラグの詳細なリストについては、ワイド&ディープ組み込みアルゴリズムのリファレンスをご覧ください。

Console

  1. [自動データ前処理を有効にする] をオンのままにします。

  2. [トレーニング データパス] の [参照] をクリックします。右パネルで、トレーニング データをアップロードしたバケットの名前をクリックし、ai-platform_census_algorithms_data_train.csv ファイルに移動します。

  3. [検証データ] と [テストデータ] のフィールドはデフォルト設定のままにします。

  4. [出力ディレクトリ] に、AI Platform Training がトレーニング ジョブの出力を保存する Cloud Storage バケットのパスを入力します。Cloud Storage バケットのパスを直接入力するか、[参照] ボタンをクリックしてパスを選択します。

    ストレージを整理するため、このトレーニング ジョブ用の新しいディレクトリを Cloud Storage バケットに作成します。これは [参照] パネルで行うことができます。

    [次へ] をクリックします。

  5. [モデルタイプ] として [分類] を選択します。

  6. 他のフィールドはすべてデフォルト設定のままにして、[次へ] をクリックします。

  7. [ジョブの設定] ページで次のことを行います。

    1. [ジョブ ID] に一意の ID(「wide_deep_example」など)を入力します。
    2. [リージョン] に使用可能なリージョン(「us-central1」など)を入力します。
    3. [スケール階層] で [BASIC] を選択します。

    [完了] をクリックしてトレーニング ジョブを送信します。

gcloud

  1. gcloud でジョブを送信する前に、トレーニング ジョブとアルゴリズムのすべての引数を設定します。

    DATASET_NAME="census"
    ALGORITHM="wide_deep"
    MODEL_TYPE="classification"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    
    # 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 \
      --master-image-uri=$IMAGE_URI --scale-tier=BASIC --job-dir=$JOB_DIR \
      -- \
      --preprocess --model_type=$MODEL_TYPE --batch_size=250 --learning_rate=0.1 \
      --dnn_learning_rate=0.005 --dnn_dropout=0.1 --hidden_units=10,10,10 \
      --use_wide --embed_categories \
      --max_steps=1000 --training_data_path=$TRAINING_DATA_PATH

  3. ジョブが正常に送信されたら、次の gcloud コマンドを使用してログを表示できます。

    gcloud ai-platform jobs describe $JOB_ID
    gcloud ai-platform jobs stream-logs $JOB_ID
    

ジョブ ディレクトリについて

トレーニング ジョブが正常に完了すると、AI Platform Training によってトレーニング済みモデルとその他のアーティファクトが Cloud Storage バケットに作成されます。JOB_DIR 内のディレクトリ構造は次のようになっています。

  • artifacts/
    • metadata.json
  • model/(TensorFlow SavedModel ディレクトリdeployment_config.yaml ファイルも格納します)
    • saved_model.pb
    • deployment_config.yaml
  • processed_data/
    • test.csv
    • training.csv
    • validation.csv

ジョブ ディレクトリには、experiment ディレクトリ内のさまざまなモデル チェックポイント ファイルも格納されます。

JOB_DIR のディレクトリ構造が上記と一致していることを確認します。

gsutil ls -a $JOB_DIR/*

トレーニング済みモデルをデプロイする

AI Platform Prediction は、モデルリソースとバージョン リソースを使用してトレーニング済みモデルを整理します。AI Platform Prediction モデルは、機械学習モデルの複数のバージョンを格納するコンテナに相当します。

モデルをデプロイするには、AI Platform Prediction でモデルリソースを作成し、そのモデルのバージョンを作成してから、そのモデルとバージョンを使用してオンライン予測をリクエストします。

詳しくは、AI Platform Prediction にモデルをデプロイする方法をご覧ください。

Console

  1. [ジョブ] ページには、すべてのトレーニング ジョブが一覧表示されます。先ほど送信したトレーニング ジョブの名前(「wide_deep_example」または実際に使用したジョブ名)をクリックします。

  2. [ジョブの詳細] ページでは、ジョブの全般的な進行状況を確認できます。[ログを表示] をクリックすると、進行状況の詳細が表示されます。

  3. ジョブが成功すると、[モデルをデプロイ] ボタンが上部に表示されます。[モデルをデプロイ] をクリックします。

  4. [新しいモデルとしてデプロイ] を選択し、モデル名を入力します(例: wide_deep_model)。次に、[確認] をクリックします。

  5. [バージョンの作成] ページでバージョン名(「v1」など)を入力します。他のフィールドはすべてデフォルト設定のままにします。[保存] をクリックします。

  6. [モデルの詳細] ページにバージョン名が表示されます。バージョンの作成には数分かかります。バージョンの準備ができると、バージョン名の横にチェックマークのアイコンが表示されます。

  7. バージョン名(v1)をクリックして、[バージョンの詳細] ページに移動します。このチュートリアルの次のステップでは、予測リクエストを送信します。

gcloud

ワイド&ディープ組み込みアルゴリズムを使用するトレーニング プロセスでは、deployment_config.yaml ファイルが生成されます。これを使用して、予測用のモデルを AI Platform Prediction に簡単にデプロイできます。

  1. ファイルをローカル ディレクトリにコピーし、その内容を表示します。

    gsutil cp $JOB_DIR/model/deployment_config.yaml .
    cat deployment_config.yaml
    

    deployment_config.yaml ファイルの内容は次のようになっているはずです。

    deploymentUri: gs://YOUR_BUCKET_NAME/algorithms_training/census_wide_deep_classification/20190227060114/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: census_wide_deep_classification_20190227060114
      accuracy: '86'
    runtimeVersion: '1.14'
    pythonVersion: '2.7'
    
  2. AI Platform Training でモデルとバージョンを作成します。

    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    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
    

    バージョンの作成には数分かかります。

オンライン予測を取得する

予測をリクエストするときは、入力データをトレーニング データと同じような形式にする必要があります。トレーニングの前に、AI Platform Training はデータの前処理を行って、metadata.json で示されるコーパスに変換します。

ワイド&ディープモデルは、予測を行う前に同様の前処理を入力データに適用します。

Console

  1. 作成したバージョン(v1)の [バージョンの詳細] ページで、サンプル予測リクエストを送信できます。

    [テストと使用] タブを選択します。

  2. 次のサンプルを入力フィールドにコピーします。

     {
       "instances": [
         {"csv_row": "44, Private, 160323, Some-college, 10, Married-civ-spouse, Machine-op-inspct, Husband, Black, Male, 7688, 0, 40, United-States", "key": "dummy-key"}
       ]
     }
    
  3. [テスト] をクリックします。

    サンプル予測結果にはいくつかのフィールドがあります。classes リストには、予測されたクラス >50K' が表示されます。

    {
       "predictions": [
         {
           ...
           "classes": [
             ">50K"
           ],
           ...
         }
       ]
     }
    

    この場合、デプロイされたモデルは、情報を入力した個人が $50,000 を超える年収を得ると予測しています(トレーニングは非決定論的であるため、モデルが異なる予測をする可能性もあります)。

gcloud

  1. metadata.json の最後の数行を確認します。

    gsutil cat $JOB_DIR/artifacts/metadata.json | tail
    

    target_column.mapping オブジェクトは、予測結果で予測クラスがどのように表示されるかを示します。

        "target_algorithm": "TensorFlow",
        "target_column": {
          "mapping": {
            "0": "<=50K",
            "1": ">50K"
          },
        "num_category": 2,
        "type": "classification"
      }
    }
    
  2. 1 つのデータ インスタンスについて予測入力を準備します。個々のデータ インスタンスは、次のフィールドを持つ JSON オブジェクトとして準備する必要があります。

    • csv_row。トレーニング中に使用されたインスタンスと同じ形式のカンマ区切り行を含む文字列です。
    • key。各インスタンスに固有の文字列識別子です。これは、予測出力の一部として示されるインスタンス キーの役割を持つため、各予測を対応する入力インスタンスと照合するために使用できます。

      バッチ予測では、予測不能な順序で入力を処理して出力を保存するので、このキーが必要になります。

      オンライン予測では、指定された入力と同じ順序で出力を生成するので、インスタンス キーはそれほど重要ではありません。この例では、1 つのインスタンスにのみ予測を実行するため、インスタンス キーの値は不要です。

    Google Cloud CLI を使用してオンライン予測リクエストを送信するには、次の例のように、改行で区切られた JSON ファイルの行に各インスタンスを書き込みます。

    ターミナルで次のコマンドを実行して、AI Platform Prediction に送信できる単一インスタンスの入力を作成します。

     # A sample record from census dataset. Ground truth is >50K
    RAW_DATA_POINT='44, Private, 160323, Some-college, 10, Married-civ-spouse, Machine-op-inspct, Husband, Black, Male, 7688, 0, 40, United-States'
    
     # Create a prediction request file
    echo "{\"csv_row\": \"$RAW_DATA_POINT\", \"key\": \"dummy-key\"}" > sample_input.json
    
    # Check the prediction request file.
    cat sample_input.json
    
  3. 予測リクエストを送信します。

    gcloud ai-platform predict \
      --model $MODEL_NAME \
      --version $VERSION_NAME \
      --json-instances sample_input.json \
      --format "value(predictions[0].classes[0])" \
      --signature-name "predict"
    

    この予測出力は、予測されたクラスのみを表示するようにフィルタリングされています。

    >50K
    

ほとんどの場合、予測出力は >50K です。デプロイされたモデルは、情報を入力した個人が $50,000 を超える年収を得ると予測しています(トレーニングは非決定論的であるため、モデルが異なる予測をする可能性もあります)。

データの概要

このサンプルでトレーニングに使用している国勢調査所得データセットは、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。

次のステップ