Amazon SageMaker AI の XGBoost アルゴリズム - Amazon SageMaker AI

Amazon SageMaker AI の XGBoost アルゴリズム

XGBoost (eXtreme Gradient Boosting) は、勾配ブーストツリーアルゴリズムのよく知られた効率的なオープンソースの実装です。勾配ブースティングは教師あり学習アルゴリズムの 1 つで、より単純なモデルのセットからの推定を複数組み合わせることで、ターゲット変数の正確な予測を試みます。XGBoost アルゴリズムは、次の理由で機械学習のコンペティションにおいて優れたパフォーマンスを発揮しています。

  • さまざまなデータ型、関係、分布の堅牢な処理。

  • ファインチューニングできるさまざまなハイパーパラメータ。

XGBoost は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

XGBoost アルゴリズムの新しいリリースは、次のいずれかの方法で使用できます。

  • Amazon SageMaker AI 組み込みアルゴリズムとして使用する。

  • ローカル環境でトレーニングスクリプトを実行するフレームワークとして使用する。

この実装では、元のバージョンよりも、メモリのフットプリントが縮小し、ログ記録が強化され、ハイパーパラメータ検証が向上し、メトリクスセットが拡大しています。マネージド型の XGBoost 環境でトレーニングスクリプトを実行する XGBoost estimator も提供されています。SageMaker AI XGBoost の現在のリリースは、XGBoost の元のバージョン 1.0、1.2、1.3、1.5、1.7 をベースにしています。

Amazon SageMaker AI XGBoost アルゴリズムの詳細については、次のブログ記事を参照してください。

サポートバージョン

  • フレームワーク (オープンソース) モード: 1.2-1、1.2-2、1.3-1、1.5-1、1.7-1

  • アルゴリズムモード: 1.2-1、1.2-2、1.3-1、1.5-1、1.7-1

警告

必要なコンピューティングキャパシティのため、SageMaker AI XGBoost のバージョン 1.7-1 は、トレーニングまたは推論用の P2 インスタンスファミリーの GPU インスタンスと互換性がありません。

重要

SageMaker AI XGBoost イメージ URI を取得する場合は、イメージ URI タグに :latest または :1 を使用しないでください。使用するネイティブ XGBoost パッケージバージョンの SageMaker AI が管理する XGBoost コンテナを選択するには、サポートバージョン のいずれかを指定する必要があります。SageMaker AI XGBoost コンテナに移行されたパッケージバージョンを確認するには、「Docker Registry Paths and Example Code」を参照してください。次に、AWS リージョンを選択し、「XGBoost (algorithm)」セクションに移動します。

警告

XGBoost 0.90 バージョンは廃止されました。XGBoost 0.90 のセキュリティアップデートまたはバグ修正のサポートは終了しました。XGBoost のバージョンを新しいバージョンにアップグレードすることを強くお勧めします。

注記

XGBoost v1.1 は SageMaker AI ではサポートされていません。XGBoost 1.1 では、テスト入力の特徴量が LIBSVM 入力のトレーニングデータよりも少ないと、予測の実行が機能しません。この機能は XGBoost v1.2 で復元されています。SageMaker AI XGBoost 1.2-2 以降の使用を検討してください。

注記

XGBoost v1.0-1 は使用できますが、正式にはサポートされていません。

XGBoost アルゴリズムの EC2 インスタンスに関する推奨事項

SageMaker AI XGBoost は CPU と GPU のトレーニングと推論をサポートしています。インスタンスの推奨事項は、XGBoost アルゴリズムのバージョンだけでなく、トレーニングや推論のニーズによっても異なります。詳細については、次のいずれかのタブを選択してください。

トレーニング

SageMaker AI XGBoost アルゴリズムは CPU と GPU のトレーニングをサポートします。

CPU トレーニング

SageMaker AI XGBoost 1.0-1 以前では、CPU を使用した場合にのみトレーニングできます。これは (CPU バウンドではなく) メモリバウンドアルゴリズムです。そのため、コンピューティング最適化インスタンス (C4 など) よりも汎用コンピューティングインスタンス (M5 など) を選択することをお勧めします。さらに、トレーニングデータを保持するために、選択したインスタンスに十分なメモリを用意することを推奨します。メインメモリに収まらないデータを扱う場合はディスク領域を使用できます。これは、libsvm 入力モードで利用できる out-of-core 機能の 1 つです。ただし、ディスクにキャッシュファイルを書き込むとアルゴリズムの処理速度が低下します。

GPU トレーニング

SageMaker AI XGBoost バージョン 1.2-2 以降では、GPU トレーニングがサポートされています。インスタンスごとのコストは高いものの、GPU はトレーニングをより迅速に行うため、費用対効果が高くなります。

SageMaker AI XGBoost バージョン 1.2-2 以降は、P2、P3、G4dn、および G5 GPU インスタンスファミリーをサポートしています。

SageMaker AI XGBoost バージョン 1.7-1 以降は、P3、G4dn、および G5 GPU インスタンスファミリーをサポートしています。コンピューティングキャパシティの要件により、バージョン 1.7-1 以降は P2 インスタンスファミリーをサポートしていないことに注意してください。

GPU トレーニングを活用するには、以下を実行します。

  • インスタンスタイプを GPU インスタンスの 1 つ (P3 など) として指定します。

  • 既存の XGBoost スクリプトで tree_method ハイパーパラメータを gpu_hist に設定します。

分散トレーニング

SageMaker AI XGBoost は、分散トレーニング用の CPU インスタンスと GPU インスタンスをサポートしています。

分散 CPU トレーニング

CPU トレーニングを複数のインスタンスで実行するには、推定器の instance_count パラメータを 1 より大きい値に設定します。入力データをインスタンスの総数で割る必要があります。

入力データを複数のインスタンスに分割

次の手順を使用して入力データを分割します。

  1. 入力データを小さなファイルに分割します。ファイルの数は分散トレーニングに使用されるインスタンスの数と等しいか、それ以上である必要があります。1 つの大きなファイルではなく、小さいファイルを複数使用すると、トレーニングジョブのデータダウンロード時間も短縮されます。

  2. TrainingInput を作成するときは、分散パラメータを ShardedByS3Key に設定します。これにより、トレーニングジョブで n 個のインスタンスが指定されている場合、各インスタンスが取得するのは S3 のファイル数の約 1/n になります。

分散 GPU トレーニング

分散トレーニングは、単一の GPU インスタンスでもマルチ GPU インスタンスでも使用できます。

単一 GPU インスタンスによる分散トレーニング

SageMaker AI XGBoost バージョン 1.2-2 から 1.3-1 では、単一 GPU インスタンスのトレーニングのみがサポートされています。つまり、マルチ GPU インスタンスを選択しても、インスタンスごとに 1 つの GPU しか使用されません。

次の場合は、入力データをインスタンスの総数で割る必要があります。

  • XGBoost バージョン 1.2-2 ~ 1.3-1 を使用している場合。

  • マルチ GPU インスタンスを使用する必要がない場合。

詳細については、「入力データを複数のインスタンスに分割」を参照してください。

注記

SageMaker AI XGBoost のバージョン 1.2-2 から 1.3-1 までは、マルチ GPU インスタンスを選択しても、インスタンスごとに 1 つの GPU しか使用しません。

マルチ GPU インスタンスによる分散トレーニング

バージョン 1.5-1 以降、SageMaker AI XGBoost は Dask による分散 GPU トレーニングを提供します。Dask では、1 つ以上のマルチ GPU インスタンスを使用するときに、すべての GPU を利用できます。Dask は単一 GPU インスタンスを使用する場合にも機能します。

Dask でトレーニングを行うには、次の手順を使用します。

  1. TrainingInputdistribution パラメータを省略するか、FullyReplicated に設定します。

  2. ハイパーパラメータを定義するときは、use_dask_gpu_training"true"に設定します。

重要

Dask による分散トレーニングは CSV と Parquet の入力形式のみをサポートします。LIBSVM や PROTOBUF などの他のデータ形式を使用すると、トレーニングジョブは失敗します。

Parquet データの場合は、列名が文字列として保存されていることを確認してください。他のデータ型の名前を持つ列は読み込めません。

重要

Dask による分散トレーニングではパイプモードはサポートされません。パイプモードが指定されている場合、トレーニングジョブは失敗します。

SageMaker AI XGBoost を Dask でトレーニングする際に注意すべき点がいくつかあります。データは必ず小さいファイルに分割してください。Dask は各 Parquet ファイルをパーティションとして読み取ります。Dask ワーカーは GPU ごとに存在します。そのため、ファイル数は GPU の総数 (インスタンス数 x インスタンスあたりの GPU 数) よりも大きい数である必要があります。ファイル数が非常に多いと、パフォーマンスが低下する可能性もあります。詳細については、「Dask Best Practices」を参照してください。

出力のバリエーション

指定された tree_method ハイパーパラメータによって、XGBoost トレーニングに使用されるアルゴリズムが決まります。approxhist、および gpu_hist の 3 つの方法はすべて近似法であり、分位数の計算にはスケッチを使用します。詳細については、XGBoost ドキュメントの「Tree Methods」を参照してください。スケッチは近似アルゴリズムです。そのため、分散トレーニングの対象となるワーカーの数などの要因によって、モデルにばらつきが生じることが予想されます。変動の有意性はデータによって異なります。

推論

SageMaker AI XGBoost は推論用に CPU インスタンスと GPU インスタンスをサポートしています。推論用のインスタンスタイプについては、「Amazon SageMaker AI ML Instance Types」を参照してください。