XGBoost モデルの分散トレーニング: sparkdl.xgboost
プレビュー
この機能は パブリック プレビュー段階です。
sparkdl.xgboost は、Databricks Runtime 12.0 ML 以降で非推奨となり、Databricks Runtime 13.0 ML 以降では削除されています。 ワークロードの xgboost.sparkMicrosoft への移行に関する情報については、 非推奨の sparkdl.xgboost モジュールの移行ガイドを参照してください。
Databricks Runtime ML には、Python xgboost パッケージ、 sparkdl.xgboost.XgboostRegressor 、 sparkdl.xgboost.XgboostClassifierに基づく PySpark 推定機能が含まれています。 これらの推定量に基づいて ML パイプラインを作成できます。 詳細については、「XGBoost PySparkパイプラインの 」を参照してください。
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パイプラインにおけるXGBoost を参照してください。 - パラメーター
base_margin、およびbase_margin_eval_setはサポートされていません。 代わりにbaseMarginColパラメーターを使用してください。 詳細についてはXGBoost for パイプラインPySpark を参照してください。 - パラメーター
missingのセマンティクスは、xgboostパッケージとは異なります。xgboostパッケージでは、SciPy スパース行列の 0 値は、missingの値に関係なく欠損値として扱われます。sparkdlパッケージの PySpark 推定器の場合、Spark スパース ベクトルの 0 値は、missing=0を設定しない限り欠損値として扱われません。スパース トレーニング データセットがある場合 (ほとんどの特徴値が欠落している)、Databricks では、メモリ消費量を削減し、パフォーマンスを向上させるためにmissing=0を設定することをお勧めします。
分散トレーニング
Databricks Runtime ML では、 num_workers パラメーターを使用した分散 XGBoost トレーニングがサポートされています。 分散トレーニングを使用するには、分類子またはリグレッサーを作成し、num_workers をクラスター上の Spark タスク スロットの合計数以下の値に設定します。 すべての Spark タスク スロットを使用するには、 num_workers=sc.defaultParallelismを設定します。
例えば:
classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)
分散トレーニングの制限事項
mlflow.xgboost.autologは分散 XGBoost では使用できません。baseMarginColは分散 XGBoost では使用できません。- オートスケールが有効になっているクラスターでは、分散 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 ライブラリ) が特定のネットワーク インターフェイスを GPU 通信に使用できない場合に発生します。
解決するには、クラスターのSpark設定 spark.executorEnv.NCCL_SOCKET_IFNAME を ethに設定します。 これにより、基本的に、ノード内のすべてのワーカーの環境変数 NCCL_SOCKET_IFNAME が eth に設定されます。
ノートブックの例
このノートブックでは、Spark MLlib で sparkdl.xgboost Python パッケージを使用する方法を示します。 sparkdl.xgboost パッケージは Databricks Runtime 12.0 ML以降非推奨です。