sparkdl.xgboost
を使用した XGBoost モデルの分散トレーニング
重要
この機能はパブリック プレビュー段階にあります。
Note
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
の古いバージョンにあるバグに影響を受けます。
Note
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 トレーニング
Note
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 以降では非推奨となっています。