XGBoost 組み込みアルゴリズムを使ってみる

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

概要

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

始める前に

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

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

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

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

  4. AI Platform Training & Prediction and Compute Engine API を有効にします。

    API を有効にする

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

設定

表形式の組み込みアルゴリズムを使用するには、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 Console で AI Platform Training の [ジョブ] ページに移動します。

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

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

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

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/boosted_trees:latest"

トレーニング ジョブを送信する

ジョブを送信するには、基本的なトレーニング引数と、XGBoost アルゴリズムに関する基本的な引数を指定する必要があります。

トレーニング ジョブの一般的な引数:

トレーニング ジョブの引数
引数 説明
job-id トレーニング ジョブの一意の ID。トレーニング ジョブを送信した後、この ID を使用してログを検索しトレーニング ジョブのステータスを確認できます。
job-dir トレーニング ジョブが正常に完了した後に AI Platform Training がトレーニング ファイルを保存する Cloud Storage のパス。
scale-tier トレーニング用のマシンタイプを指定します。単一マシン構成を選択するには、BASIC を使用します。
master-image-uri トレーニング ジョブに使用する Docker コンテナを指定するための Container Registry URI。すでに IMAGE_URI として定義されている XGBoost 組み込みアルゴリズムのコンテナを使用します。
region トレーニング ジョブを行うために利用可能なリージョンを指定します。このチュートリアルでは、us-central1 リージョンを使用できます。

XGBoost 組み込みアルゴリズムに固有の引数:

アルゴリズムの引数
引数 説明
preprocess AI Platform Training にデータの前処理を行わせるかどうかを示すブール引数。
objective 学習タスクとそのタスクに対応する学習目標を指定します。この例では、「binary:logistic」を指定します。
training_data_path Cloud Storage 上のトレーニング データの場所。トレーニング データは CSV ファイルでなければなりません。

XGBoost アルゴリズムに関する他のあらゆるフラグの詳細リストについては、XGBoost 組み込みアルゴリズムのリファレンスをご覧ください。

Console

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

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

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

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

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

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

  5. [目的] として [binary:logistic] を選択します。これは、バイナリ学習タスクでロジスティック回帰を目的とすることを示します。

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

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

  8. [ジョブの設定] ページで次の操作を行います。

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

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

gcloud

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

    DATASET_NAME="census"
    ALGORITHM="xgboost"
    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 --objective=binary:logistic \
      --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 内のディレクトリ構造は次のようになっています。

  • model/
    • model.pkl
    • deployment_config.yaml
  • artifacts/
    • instance_generator.py
    • metadata.json
  • processed_data/
    • training.csv
    • validation.csv
    • test.csv

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

gsutil ls -a $JOB_DIR/*

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

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

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

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

Console

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

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

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

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

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

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

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

gcloud

XGBoost 組み込みアルゴリズムを使用するトレーニング プロセスでは、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_xgboost_classification/20190227060114/model
    framework: XGBOOST
    labels:
      job_id: census_xgboost_classification_20190227060114
      error_percentage: '14'
    runtimeVersion: '0.81'
    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 で示されるコーパスに変換します。

instance_generator.py を使用して、AI Platform Training がトレーニング データに適用するものと同じ前処理変換を入力インスタンスに適用できます。このファイルは、metadata.json ファイルに格納されているマッピング情報を読み取ります。また、モジュール内で transform_string_instance 関数を使用して、未加工の文字列をモデルが受け入れる形式に変換することもできます。

  1. トレーニング アーティファクト ファイルをダウンロードして、metadata.json を確認します。

    gsutil cp $JOB_DIR/artifacts/* .
    
    # Let's look at the metadata.json file
    head metadata.json
    
  2. instance_generator.py を使用して、予測入力として 1 つのデータ インスタンスを準備します。

     # 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"
    
     # Now let's create a JSON prediction request
    python instance_generator.py --raw_data_string="${RAW_DATA_POINT}" > sample_input.json
    
    # Let's look at the prediction request file.
    cat sample_input.json
    
  3. 予測リクエストを送信します。

    gcloud ai-platform predict \
      --model $MODEL_NAME \
      --version $VERSION_NAME \
      --json-instances sample_input.json
    

予測の結果は 0.5 より大きい値になるはずです。これは、この個人の年収が $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。

次のステップ