分散型 XGBoost 組み込みアルゴリズムを使用したトレーニング

AI Platform Training での組み込みアルゴリズムを使用したトレーニングでは、トレーニング コードを記述することなく、データセットを送信してモデルをトレーニングできます。このページでは、分散型 XGBoost 組み込みアルゴリズムの仕組みと使用方法について説明します。

概要

分散型 XGBoost 組み込みアルゴリズムは、AI Platform 上で実行できる互換性を備えた XGBoost アルゴリズムのラッパーです。

XGBoost 単一レプリカ組み込みアルゴリズムとは異なり、このアルゴリズムでは複数の仮想マシンを並列に使用して大規模なデータセットをトレーニングできます。このアルゴリズムでは、GPU をトレーニングに使用することもできます。これにより、トレーニング プロセスをスピードアップできます。

AI Platform Training は、ユーザーのデータセットとユーザーが指定したモデル パラメータに基づき、XGBoost 分散型アルゴリズムを使用したトレーニングを実行します。現在の実装は XGBoost の 0.81 バージョンに基づいています。

制限事項

次の機能は、分散型 XGBoost 組み込みアルゴリズムを使用したトレーニングではサポートされていません。

  • 前処理。このアルゴリズムは自動前処理には対応していません。トレーニング データと検証データは、入力データの書式設定に関するセクションで説明されている要件を満たす個別のファイル グループに手動で作成する必要があります。
  • 単一レプリカ トレーニング。このアルゴリズムは、トレーニングに複数の仮想マシンを使用するように設計されています。単一の仮想マシンを使用してトレーニングを行う場合は、XGBoost 単一レプリカ組み込みアルゴリズムを使用します。

サポートされているマシンタイプ

構成が次の要件を満たしていれば、このアルゴリズムとともに、任意の AI Platform トレーニング スケール階層または有効なマシンタイプの組み合わせを使用できます。

  • 1 つのマスター ワーカーと、1 つ以上のワーカーを指定します。
  • 最適なパフォーマンスを得るために、マスター ワーカーとワーカーには同じマシンタイプを指定します。
  • パラメータ サーバーは指定しないでください。
  • 指定した仮想マシンの合計メモリが、トレーニング データの合計ファイルサイズより、少なくとも 20% 大きくなるようにしてください。これにより、仮想マシンはすべてのトレーニング データをメモリに読み込むことができるようになり、トレーニング用に追加のメモリも使用できるようになります。
  • GPU を使用する場合は、各仮想マシンで 1 つの GPU のみが使用され、マスター ワーカーとワーカーには同じタイプの GPU が使用されていることを確認します。指定したマシンタイプで GPU 構成がサポートされていることを確認します。
  • TPU は使用しないでください。

入力データを整形する

分散型 XGBoost 組み込みアルゴリズムは、表形式の数値データに対応しています。データセットでは、各行が 1 つのインスタンスを表し、各列が特徴値を表します。ターゲット列は予測対象の値を表します。

CSV ファイルを準備する

入力データは、UTF-8 でエンコードされた 1 つ以上の CSV ファイルでなければなりません。各ファイルは次の要件を満たす必要があります。

  • CSV ファイルにヘッダー行を含めることはできません。各列にラベルを付けるヘッダー行が CSV ファイルにある場合は、各ファイルからその最初の行を削除します。
  • ターゲット列は 1 列目にする必要があります。
  • 分類トレーニング ジョブの場合、ターゲット列には数値以外の値を含めることができます。他のすべての列には、数値データのみを含める必要があります。
  • 回帰トレーニング ジョブでは、各値が 0~1 になるようにターゲット値を正規化します。他のすべての列には、数値データのみを含める必要があります。

分散トレーニング用のデータの分割

トレーニング ジョブを送信するときに複数の CSV ファイルからデータを提供するには、training_data_path 引数と validation_data_path 引数に対して指定する Cloud Storage パス内にワイルドカードを使用します。すべての CSV ファイルは、前のセクションで説明されている要件を満たす、同じ列スキーマを使用する必要があります。

分散型 XGBoost 組み込みアルゴリズムは、次のいずれかの方法で仮想マシン間でトレーニング データを分散します。

  • CSV ファイルの数が仮想マシンの数以上である場合は、アルゴリズムにより、ラウンドロビン順でファイルごとにデータが分散されます。つまり、マスター ワーカーは最初の CSV ファイルを読み込み、1 番目のワーカーは 2 番目の CSV ファイルを読み込むというように続きます。各仮想マシンがほぼ同じ数のファイルを読み込むように、ファイルを割り当てるこの方法はループします。

  • CSV ファイルの数が仮想マシンの数より少ない場合は、アルゴリズムにより、ラウンドロビン順でインスタンスごとにデータが分散されます。つまり、マスター ワーカーは各 CSV ファイルの 1 行目を読み込み、最初のワーカーは各 CSV ファイルの 2 行目を読み込むというように続きます。各仮想マシンがほぼ同じ数のインスタンスを読み込むように、インスタンスを割り当てるこの方法はループします。

validation_data_path 引数を指定すると、次のいずれかの方法で検証データも読み込まれます。ただし、このアルゴリズムではトレーニング データと検証データが独立して読み込まれることに注意してください。たとえば、トレーニング データファイルを多数提供していて、検証データファイルは 1 つしか提供していない場合、アルゴリズムによって、ファイルごとにトレーニング データが読み込まれ、インスタンスごとに検証データが読み込まれる場合があります。

最適なパフォーマンスを得るには、トレーニング データを次のガイドラインに準拠する複数の CSV ファイルに分割します。

  • 各ファイルのサイズは 1 GB 未満である。
  • 各ファイルにはほぼ同じ数のインスタンスが含まれている。
  • ファイルの数は、仮想マシンの合計数で割り切れる。たとえば、1 つのマスターと 2 つのワーカーでトレーニングする場合、ファイルの数は 3 の倍数になります。

Cloud Storage バケットの権限を確認する

データを保存するには、AI Platform Training ジョブの実行に使用している Google Cloud プロジェクトの Cloud Storage バケットを使用します。それ以外の場合は、データが保存されている Cloud Storage バケットへのアクセス権を AI Platform Training に付与します。

GPU の使用

マシンタイプに関する前のセクションの説明のとおり、分散型 XGBoost 組み込みアルゴリズムでは、仮想マシンごとに単一の GPU を使用してトレーニングを実施できます。

GPU を活用するために、トレーニング ジョブを送信するときに、tree_method ハイパーパラメータgpu_exact または gpu_hist に設定します。

GPU に対する XGBoost のサポートについて学習します。

XGBoost 分散型トレーニング ジョブを送信する

このセクションでは、分散型 XGBoost 組み込みトレーニング ジョブを送信する方法について説明します。Google Cloud Console または Google Cloud CLI を使用して、ジョブを送信します。

分散型 XGBoost 組み込みアルゴリズムのリファレンスでこのアルゴリズムに関して調整できるその他の引数とハイパーパラメータの包括的な説明を確認できます。

次の例では、3 つのトレーニング データファイルと 3 つの検証データファイルに分割した Census データの分類子をトレーニングすることを想定しています。

  • train-0.csv
  • train-1.csv
  • train-2.csv
  • eval-0.csv
  • eval-1.csv
  • eval-2.csv

これらのファイルにはいずれもヘッダー行がなく、それらを Cloud Storage にアップロードするとします。この例では、個々に NVIDIA Tesla P100 GPU を採用している 3 つの仮想マシンを使用したトレーニング ジョブを作成します。ジョブは us-central1 リージョンで実行されます。

Google Cloud コンソール

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

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

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

  3. [新しいトレーニング ジョブの作成] ページで、[アルゴリズムを選択] プルダウン リストを選択して [Distributed XGBoost] をクリックします。[次へ] をクリックします。

  4. [トレーニング データ] セクションでプルダウン リストから [1 つの Cloud Storage ディレクトリに保存されている複数のファイルを使用する] を選択します。[ディレクトリ パス] フィールドを使用して、トレーニング ファイルが格納されている Cloud Storage ディレクトリを選択します。[ワイルドカードの名前] フィールドに train-*.csv を入力します。

  5. [検証データ(オプション)] セクションでプルダウン リストから [1 つの Cloud Storage ディレクトリに保存されている複数のファイルを使用する] を選択します。[ディレクトリ パス] フィールドを使用して、検証ファイルが格納されている Cloud Storage ディレクトリを選択します。[ワイルドカードの名前] フィールドに eval-*.csv を入力します。

  6. [トレーニング出力] セクションで [出力ディレクトリ] フィールドを使用して、Cloud Storage バケットの個別のディレクトリを選択して、トレーニング出力を保管します。[次へ] をクリックします。

  7. トレーニング ジョブ用に [アルゴリズムの引数] をカスタマイズするか、デフォルト値をそのまま使用します。引数の詳細については、Google Cloud コンソール内のリンクをたどって、分散型 XGBoost 組み込みのリファレンスをご覧ください。[次へ] をクリックします。

  8. [ジョブ ID] フィールドに任意の名前を入力してください。[リージョン] プルダウン リストで、us-central1 を選択します。

    [スケール階層] プルダウン リストで、CUSTOM を選択します。[カスタム クラスタ構成] セクションの [マスタータイプ] と [ワーカータイプ] のプルダウン リストで、standard_p100 を選択します。[ワーカー数] フィールドに 2 を入力します。[完了] をクリックします。

  9. [ジョブ] ページで新しいジョブの ID をクリックすると、その [ジョブの詳細] ページが表示されます。[ログを表示] をクリックして、トレーニング ログを表示します。

gcloud ツール

  1. ジョブの環境変数を設定します。BUCKET は、Cloud Storage バケットの名前に置き換えます。DATA_DIRECTORY は、データが含まれているバケットのディレクトリへのパスに置き換えます。

    # Specify the Docker container for your built-in algorithm selection.
    IMAGE_URI='gcr.io/cloud-ml-algos/xgboost_dist:latest'
    
    # Specify the Cloud Storage wildcard paths to your training and validation data.
    TRAINING_DATA='gs://BUCKET/DATA_DIRECTORY/train-*.csv'
    VALIDATION_DATA='gs://BUCKET/DATA_DIRECTORY/eval-*.csv'
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME='census'
    ALGORITHM='xgboost_dist'
    MODEL_TYPE='classification'
    DATE='date '+%Y%m%d_%H%M%S''
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    
    # Specify an ID for this job
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Specify the directory where you want your training outputs to be stored
    JOB_DIR="gs://BUCKET/algorithm_training/${MODEL_NAME}/${DATE}"
    
  2. gcloud ai-platform jobs training submit コマンドを使用して、トレーニング ジョブを送信します。

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=us-central1 \
      --master-image-uri=$IMAGE_URI \
      --job-dir=$JOB_DIR \
      --scale-tier=CUSTOM \
      --master-machine-type=n1-standard-4 \
      --master-accelerator count=1,type=nvidia-tesla-p100 \
      --worker-machine-type=n1-standard-4 \
      --worker-count=2 \
      --worker-accelerator count=1,type=nvidia-tesla-p100 \
      -- \
      --training_data_path=$TRAINING_DATA \
      --validation_data_path=$VALIDATION_DATA \
      --objective=binary:logistic \
      --tree_method=gpu_hist
    
  3. gcloud でログを確認して、トレーニング ジョブのステータスをモニタリングします。gcloud ai-platform jobs describegcloud ai-platform jobs stream-logs を参照します。

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

次のステップ