sparkdl.xgboost を使用した XGBoost モデルの分散トレーニング

重要

この機能はパブリック プレビュー段階にあります。

注

sparkdl.xgboost は Databricks Runtime 12.0 ML 以降では非推奨であり、Databricks Runtime 13.0 ML 以降では削除されています。 ワークロードを xgboost.sparkに移行する方法については、 非推奨の sparkdl.xgboost モジュールの移行ガイドを参照してください。

Databricks Runtime ML には、Python xgboost パッケージ、sparkdl.xgboost.XgboostRegressor、sparkdl.xgboost.XgboostClassifier に基づく PySpark Estimator が含まれます。 これらの Estimator に基づいて ML パイプラインを作成できます。 詳細については、PySpark Pipeline 用の XGBoost に関する記事を参照してください。

Databricks では、sparkdl.xgboost ユーザーが Databricks Runtime 11.3 LTS ML 以降を使用することを強くお勧めします。 以前のバージョンの Databricks Runtime は、sparkdl.xgboost の古いバージョンにあるバグに影響を受けます。

注

  • sparkdl.xgboost モジュールは、Databricks Runtime 12.0 ML 以降では非推奨となっています。 Databricks では、代わりに xgboost.spark モジュールを使用するようにコードを移行することが推奨されています。 移行ガイドを参照してください。
  • xgboost パッケージのパラメーター gpu_id、output_margin、validate_features はサポートされていません。
  • パラメーター sample_weight、eval_set、sample_weight_eval_set はサポートされていません。 代わりに、パラメーター weightCol と validationIndicatorCol を使用します。 詳細については、PySpark Pipeline 用の XGBoost に関する記事を参照してください。
  • パラメーター base_margin および base_margin_eval_set はサポートされていません。 代わりに、パラメーター baseMarginCol を使用してください。 詳細については、PySpark Pipeline 用の XGBoost に関する記事を参照してください。
  • パラメーター missing には、xgboost パッケージとは異なるセマンティクスがあります。 xgboost パッケージでは、SciPy 疎行列の 0 値は、missing の値に関係なく欠損値として扱われます。 sparkdl パッケージ内の PySpark Estimator の場合、missing=0 を設定しない限り、Spark 疎ベクター内の 0 値は欠損値として扱われません。 疎トレーニング データセット (ほとんどの機能の値が欠落しています) がある場合、Databricks では、メモリ消費量を減らし、パフォーマンスを向上させるために missing=0 を設定することをお勧めします。

分散トレーニング

Databricks Runtime ML では、num_workers パラメーターを使用した分散 XGBoost トレーニングがサポートされています。 分散トレーニングを使用するには、分類子またはリグレッザーを作成し、クラスター上の Spark タスク スロットの総数以下の値に num_workers を設定します。 すべての Spark タスク スロットを使用するには、num_workers=sc.defaultParallelism を設定します。

次に例を示します。

classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)

分散トレーニングの制限

  • 分散 XGBoost では mlflow.xgboost.autolog を使用できません。
  • 分散 XGBoost では baseMarginCol を使用できません。
  • 自動スケールが有効になっているクラスターで分散 XGBoost を使用することはできません。 自動スケールを無効にする手順については、「自動スケールを有効にする」 を参照してください。

GPU トレーニング

注

Databricks Runtime 11.3 LTS ML には XGBoost 1.6.1 が含まれています。これは、コンピューティング機能 5.2 以下の GPU クラスターをサポートしていません。

Databricks Runtime 9.1 LTS ML 以上では、XGBoost トレーニング用の GPU クラスターがサポートされています。 GPU クラスターを使用するには、use_gpu を True に設定します。

次に例を示します。

classifier = XgboostClassifier(num_workers=N, use_gpu=True)
regressor = XgboostRegressor(num_workers=N, use_gpu=True)

トラブルシューティング

マルチノード トレーニング中に NCCL failure: remote process exited or there was a network error メッセージが表示された場合、通常、GPU 間のネットワーク通信に問題があることを示します。 この問題は、NCCL (NVIDIA Collective Communications Library) が GPU 通信に特定のネットワーク インターフェイスを使用できない場合に発生します。

解決するには、クラスターの sparkConf for spark.executorEnv.NCCL_SOCKET_IFNAME を eth に設定します。 これにより、基本的に環境変数 NCCL_SOCKET_IFNAME がノード内のすべてのワーカーに対して eth に設定されます。

ノートブックの例

このノートブックは、Spark MLlib での Python パッケージ sparkdl.xgboost の使用を示しています。 sparkdl.xgboost パッケージは、Databricks Runtime 12.0 ML 以降では非推奨となっています。

PySpark-XGBoost ノートブック

ノートブックを入手