XGBoost アルゴリズム - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

XGBoost アルゴリズム

XGBoost (eXtreme Gradient Boosting) は、勾配ブーストツリーアルゴリズムのよく知られた効率的なオープンソースの実装です。勾配ブースティングは教師あり学習アルゴリズムで、より単純で弱いモデルのセットから推定のアンサンブルを組み合わせることで、ターゲット変数の正確な予測を試行します。XGBoost アルゴリズムは、さまざまなデータ型、関係、分布、および微調整できるさまざまなハイパーパラメータを堅牢に処理できるため、機械学習のコンペティションにおいて優れた結果を出しています。XGBoost は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

XGBoost アルゴリズムの新しいリリースは、Amazon SageMaker 組み込みアルゴリズムまたはフレームワークとして使用して、ローカル環境でトレーニングスクリプトを実行できます。この実装では、元のバージョンよりも、メモリのフットプリントは縮小し、ロギングは強化され、ハイパーパラメータ検証は向上し、メトリクスセットは拡張されています。マネージド型の XGBoost 環境でトレーニングスクリプトを実行する XGBoost estimator も提供されています。 SageMaker XGBoost の現在のリリースは、元の XGBoost バージョン 1.0、1.2、1.3、1.5、および 1.7 に基づいています。

サポートバージョン

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

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

警告

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

重要

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

警告

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

注記

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

SageMaker XGBoost の使用方法

では SageMaker、XGBoost を組み込みアルゴリズムまたはフレームワークとして使用できます。XGBoost をフレームワークとして使用することで、独自のトレーニングスクリプトをカスタマイズできるため、柔軟性が高まり、K 分割交差検証などのより高度なシナリオを利用できるようになります。以下のセクションでは、 SageMaker Python SDK で XGBoost を使用する方法について説明します。Amazon SageMaker Studio Classic UI から XGBoost を使用する方法については、「」を参照してくださいSageMaker JumpStart

  • XGBoost をフレームワークとして使用する

    XGBoost をフレームワークとして使用して、追加のデータ処理をトレーニングジョブに組み込むことができるカスタマイズされたトレーニングスクリプトを実行します。次のコード例では、 SageMaker Python SDK が 、MXNet 、 などの他のフレームワーク API を提供するのと同じ方法で XGBoost APIs TensorFlowをフレームワークとして提供する方法を示しています PyTorch。

    import boto3 import sagemaker from sagemaker.xgboost.estimator import XGBoost from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "verbosity":"1", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-framework' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework') # construct a SageMaker XGBoost estimator # specify the entry_point to your xgboost training script estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", framework_version='1.7-1', hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})

    SageMaker XGBoost をフレームワークとして使用する end-to-end 例については、「Amazon SageMaker XGBoost での回帰」を参照してください。

  • XGBoost を組み込みアルゴリズムとして使用する

    次のコード例に示すように、XGBoost 組み込みアルゴリズムを使用して、XGBoost トレーニングコンテナを構築します。API (または Amazon Python SDK バージョン 1 を使用している場合は SageMaker image_uris.retrieve get_image_uri API) を使用して、XGBoost 組み込みアルゴリズムイメージ URI を自動的に検出できます。 SageMaker image_uris.retrieve API で正しい URI が検出されるかどうかを確認する場合は、「組み込みアルゴリズムの共通パラメータ」を参照し、組み込みアルゴリズムイメージ URI と使用可能なリージョンの詳細なリストから xgboost を参照します。

    XGBoost イメージ URI を指定した後、XGBoost コンテナを使用して Estimator API を使用して SageMaker 推定器を構築し、トレーニングジョブを開始できます。この XGBoost 組み込みアルゴリズムモードでは、独自の XGBoost トレーニングスクリプトは組み込まれず、入力データセット上で直接実行されます。

    重要

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

    import sagemaker import boto3 from sagemaker import image_uris from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-built-in-algo' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo') # this line automatically looks for the XGBoost image URI and builds an XGBoost container. # specify the repo_version depending on your preference. xgboost_container = sagemaker.image_uris.retrieve("xgboost", region, "1.7-1") # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', volume_size=5, # 5 GB output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})

    XGBoost を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。

XGBoost アルゴリズムの入出力インターフェイス

勾配ブースティングは表形式のデータで動作し、行が観測値、1 つの列がターゲット変数またはラベル、残りの列が特徴を表します。

XGBoost の SageMaker 実装では、トレーニングと推論に次のデータ形式がサポートされています。

  • text/libsvm (default)

  • text/csv

  • application/x-parquet

  • アプリケーション/x-recordio-protobuf

注記

トレーニングと推論の入力に関して注意すべき点がいくつかあります。

  • パフォーマンスを向上させるには、XGBoost をファイルモード で使用することをお勧めします。このモードでは、Amazon S3 からのデータがトレーニングインスタンスボリュームに保存されます。

  • 列指向入力によるトレーニングでは、アルゴリズムはターゲット変数 (ラベル) が最初の列であることを前提としています。推論の場合、アルゴリズムは入力にラベル列がないと見なします。

  • CSV データの場合、入力にヘッダーレコードを含めることはできません。

  • LIBSVM のトレーニングでは、アルゴリズムは、ラベル列の後の列に特徴のゼロベースのインデックス値のペアが含まれていると仮定します。そのため、各行は <label> <index0>:<value0> <index1>:<value1> の形式になります。

  • インスタンスタイプと分散トレーニングについては、「XGBoost アルゴリズムの EC2 インスタンスに関する推奨事項」を参照してください。

CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント * InstanceType で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。libsvm トレーニング入力モードの場合、これは必須ではありませんが推奨されます。

v1.3-1 以降では、 SageMaker XGBoost は を使用して XGBoost 内部バイナリ形式でモデルを保存しますBooster.save_model。以前のバージョンでは、モデルのシリアル化/逆シリアル化に Python の pickle モジュールを使用していました。

注記

オープンソースの SageMaker XGBoost で XGBoost モデルを使用する場合は、バージョンに注意してください。バージョン 1.3-1 以降は XGBoost 内部バイナリ形式を使用していますが、以前のバージョンでは Python の pickle モジュールを使用しています。

オープンソース SageMaker XGBoost で XGBoost v1.3-1 以降でトレーニングされたモデルを使用するには XGBoost
  • 次の Python コードを使用します。

    import xgboost as xgb xgb_model = xgb.Booster() xgb_model.load_model(model_file_path) xgb_model.predict(dtest)
オープンソースの SageMaker XGBoost で以前のバージョンの XGBoost でトレーニングされたモデルを使用するには
  • 次の Python コードを使用します。

    import pickle as pkl import tarfile t = tarfile.open('model.tar.gz', 'r:gz') t.extractall() model = pkl.load(open(model_file_path, 'rb')) # prediction with test data pred = model.predict(dtest)
ラベル付きデータポイントの重要性を区別するには、インスタンス重みサポートを使用します。
  • SageMaker XGBoost を使用すると、各インスタンスに重み値を割り当てることで、ラベル付きデータポイントの重要性を区別できます。text/libsvm 入力の場合、顧客がデータインスタンスに重み値を割り当てるには、ラベルの後に重み値を付加します。例えば label:weight idx_0:val_0 idx_1:val_1... です。text/csv 入力の場合、顧客はパラメータで csv_weights フラグをオンにし、その列でラベルの後に重み値を付加する必要があります。例: label,weight,val_0,val_1,...)。

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

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

トレーニング

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

CPU トレーニング

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

GPU トレーニング

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

SageMaker XGBoost バージョン 1.2-2 以降ではP2, P3, G4dnインスタンスファミリーがサポートされています。 G5

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

GPU トレーニングを利用するには、インスタンスタイプを GPU インスタンスの 1 つ (P3 など) として指定し、tree_method ハイパーパラメータを既存の XGBoost スクリプトで gpu_hist に設定します。

分散トレーニング

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

分散 CPU トレーニング

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

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

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

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

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

分散 GPU トレーニング

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

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

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

XGBoost バージョン 1.2-2 から 1.3-1 を使用している場合、またはマルチ GPU インスタンスを使用する必要がない場合は、入力データをインスタンスの総数で割る必要があります。詳細については、「入力データを複数のインスタンスに分割」を参照してください。

注記

SageMaker XGBoost のバージョン 1.2-2 から 1.3-1 では、マルチ GPU インスタンスを選択した場合でも、インスタンスごとに 1 つの GPU のみが使用されます。

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

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

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

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

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

重要

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

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

重要

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

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

出力のバリエーション

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

推論

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

XGBoost サンプルノートブック

次の表は、Amazon SageMaker XGBoost アルゴリズムのさまざまなユースケースに対応するさまざまなサンプルノートブックの概要を示しています。

ノートブックのタイトル 説明

カスタム XGBoost コンテナを作成する方法

このノートブックでは、Amazon SageMaker Batch Transform を使用してカスタム XGBoost コンテナを構築する方法を説明します。

Parquet を使用した XGBoost での回帰

このノートブックでは、Parquet の Abalone データセットを使用して XGBoost モデルをトレーニングする方法について説明しています。

複数クラス分類モデルをトレーニングおよびホストする方法

このノートブックでは、MNIST データセットを使用して、複数クラス分類モデルをトレーニングおよびホストする方法について説明しています。

顧客解約の予測に対するモデルをトレーニングする方法

このノートブックでは、不満を感じている顧客を特定するために、モバイルの顧客の離反を予測するモデルをトレーニングする方法について説明しています。

XGBoost トレーニング用の Amazon SageMaker Managed Spot インフラストラクチャの概要

このノートブックでは、XGBoost コンテナでトレーニングにスポットインスタンスを使用する方法について説明しています。

Amazon SageMaker Debugger を使用して XGBoost トレーニングジョブをデバッグする方法

このノートブックでは、Amazon SageMaker Debugger を使用してトレーニングジョブをモニタリングし、組み込みのデバッグルールを使用して不整合を検出する方法について説明します。

で例を実行するために使用できる Jupyter Notebook インスタンスを作成してアクセスする方法については SageMaker、「」を参照してくださいAmazon SageMaker Notebook インスタンス。ノートブックインスタンスを作成して開いたら、SageMaker「例」タブを選択すると、すべての SageMaker サンプルのリストが表示されます。線形学習者アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[Introduction to Amazon algorithm (Amazon アルゴリズムの概要)] セクションにあります。ノートブックを開くには、その [Use (使用)] タブを選択し、[Create copy (コピーを作成)] を選択します。

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