Amazon で XGBoost アルゴリズムを使用する SageMaker - Amazon SageMaker

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

Amazon で XGBoost アルゴリズムを使用する SageMaker

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

  • さまざまなデータ型、関係、ディストリビューションを堅牢に処理します。

  • 微調整できるさまざまなハイパーパラメータ。

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

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

  • Amazon SageMaker 組み込みアルゴリズム。

  • ローカル環境でトレーニングスクリプトを実行するためのフレームワーク。

この実装では、元のバージョンよりもメモリフットプリントが小さく、ログ記録が改善され、ハイパーパラメータ検証が改善され、メトリクスのセットが大きくなります。マネージド XGBoost 環境でトレーニングスクリプトestimatorを実行する XGBoost を提供します。 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コンテナサポートバージョンを選択するには、 のいずれかを指定する必要があります。XGBoost コンテナに移行された SageMakerパッケージバージョンを確認するには、「Docker Registry Paths」と「サンプルコード」を参照してください。次に、 を選択し AWS リージョン、XGBoost (アルゴリズム) セクションに移動します。

警告

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

注記

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

SageMaker XGBoost の使用方法

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

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

    XGBoost をフレームワークとして使用して、追加のデータ処理をトレーニングジョブに組み込むことができるカスタマイズされたトレーニングスクリプトを実行します。次のコード例では、 SageMaker Python SDK は XGBoost API をフレームワークとして提供します。これは、 が 、 TensorFlowMXNet 、 などの他のフレームワーク APIs SageMaker を提供する方法と同様に機能します 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 を使用して SageMaker image_uris.retrieve XGBoost 組み込みアルゴリズムイメージ URI を自動的に検出できます。Amazon SageMaker Python SDK バージョン 1 を使用している場合は、 get_image_uri API を使用します。image_uris.retrieve API が正しい URI を見つけていることを確認するには、「組み込みアルゴリズムの共通パラメータ」を参照してください。次に、組み込みアルゴリズムイメージ URIs と使用可能なリージョンの完全なリストから検索xgboostします。

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

    重要

    SageMaker XGBoost イメージ URI を取得するときは、イメージ URI タグ:1:latestまたは を使用しないでください。使用するネイティブ XGBoost パッケージバージョンを持つ マネージド XGBoost SageMakerコンテナサポートバージョンを選択するには、 のいずれかを指定する必要があります。 SageMaker XGBoost コンテナに移行されたパッケージバージョンを確認するには、「Docker Registry Paths」と「サンプルコード」を参照してください。次に、 を選択し 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 トレーニング入力モードでは、アルゴリズムが使用できる合計メモリがトレーニングデータセットを保持できる必要があります。使用可能なメモリの合計は として計算されますInstance Count * the memory available in the 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 など)

  • 既存の XGBoost スクリプトgpu_histtree_methodハイパーパラメータを に設定する

分散トレーニング

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

分散 CPU トレーニング

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

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

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

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

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

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

Dask で SageMaker XGBoost をトレーニングするときは、いくつかの考慮事項があります。データは必ず小さいファイルに分割してください。Dask は各 Parquet ファイルをパーティションとして読み取ります。GPU ごとに Dask ワーカーがあります。そのため、ファイル数は GPUs の合計数 (インスタンス数 * インスタンスあたりの GPUs 数) よりも大きくなければなりません。ファイル数が非常に多いと、パフォーマンスが低下する可能性もあります。詳細については、「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 アルゴリズムの詳細については、次のブログ記事を参照してください。