Verteiltes Training von XGBoost-Modellen mit sparkdl.xgboost
Wichtig
Dieses Feature befindet sich in der Public Preview.
Hinweis
sparkdl.xgboost
ist ab Databricks Runtime 12.0 ML veraltet und wird in Databricks Runtime 13.0 ML und höher entfernt. Informationen zum Migrieren Ihrer Workloads zu xgboost.spark
finden Sie im Migrationsleitfaden für das veraltete Sparkdl.xgboost-Modul.
Databricks Runtime ML enthält PySpark-Schätzer, die auf dem Python-Paket xgboost
, sparkdl.xgboost.XgboostRegressor
und sparkdl.xgboost.XgboostClassifier
basieren. Sie können eine ML Pipeline basierend auf diesen Estimators erstellen. Weitere Informationen finden Sie unter XGBoost für PySpark Pipeline.
Databricks empfiehlt dringend, dass sparkdl.xgboost
-Benutzer Databricks Runtime 11.3 ML oder höher verwenden. Frühere Databricks Runtime-Versionen sind von Fehlern in älteren Versionen von sparkdl.xgboost
betroffen.
Hinweis
- Das
sparkdl.xgboost
-Modul ist seit Databricks Runtime 12.0 ML veraltet. Databricks empfiehlt, ihren Code zu migrieren, um stattdessen dasxgboost.spark
-Modul zu verwenden. Weitere Informationen finden Sie im Migrationsleitfaden. - Die folgenden Parameter aus dem Paket
xgboost
werden nicht unterstützt:gpu_id
,output_margin
,validate_features
. - Die Parameter
sample_weight
,eval_set
undsample_weight_eval_set
werden nicht unterstützt. Verwenden Sie stattdessen die ParameterweightCol
undvalidationIndicatorCol
. Weitere Informationen finden Sie unter XGBoost für die PySpark-Pipeline. - Die Parameter
base_margin
undbase_margin_eval_set
werden nicht unterstützt. Verwenden Sie stattdessen denbaseMarginCol
-Parameter. Weitere Informationen finden Sie unter XGBoost für die PySpark-Pipeline. - Der Parameter
missing
weist eine andere Semantik als das Paketxgboost
auf. Im Paketxgboost
werden die Nullwerte in einer SciPy-Sparsematrix unabhängig vom Wert vonmissing
als fehlende Werte behandelt. Für die PySpark-Estimators im Paketsparkdl
werden Nullwerte in einem Spark-Sparsevektor nicht als fehlende Werte behandelt, es sei denn, Sie legenmissing=0
fest. Wenn Sie über ein Trainingsdataset mit geringer Dichte verfügen (die meisten Featurewerte fehlen), empfiehlt Databricks, die Einstellungmissing=0
festzulegen, um den Arbeitsspeicherverbrauch zu reduzieren und eine bessere Leistung zu erzielen.
Verteiltes Training
Databricks Runtime ML unterstützt verteiltes XGBoost-Training mithilfe des Parameters num_workers
. Um verteiltes Training zu verwenden, erstellen Sie einen Klassifizierer oder Regressor, und legen Sie num_workers
auf einen Wert fest, der kleiner oder gleich der Gesamtanzahl der Spark-Aufgabenslots in Ihrem Cluster ist. Um alle Spark-Aufgabenslots zu verwenden, legen Sie num_workers=sc.defaultParallelism
fest.
Zum Beispiel:
classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)
Einschränkungen des verteilten Trainings
- Sie können
mlflow.xgboost.autolog
nicht mit verteiltem XGBoost verwenden. - Sie können
baseMarginCol
nicht mit verteiltem XGBoost verwenden. - Sie können verteiltes XGBoost nicht in einem Cluster mit aktivierter automatischer Skalierung verwenden. Anweisungen zum Deaktivieren der automatischen Skalierung finden Sie unter Aktivieren der automatischen Skalierung.
GPU-Training
Hinweis
Databricks Runtime 11.3 LTS ML enthält XGBoost 1.6.1, das keine GPU-Cluster mit Computefunktionalität 5.2 und niedriger unterstützt.
Databricks Runtime 9.1 LTS ML und höher unterstützen GPU-Cluster für XGBoost-Training. Um einen GPU-Cluster zu verwenden, legen Sie use_gpu
auf True
fest.
Zum Beispiel:
classifier = XgboostClassifier(num_workers=N, use_gpu=True)
regressor = XgboostRegressor(num_workers=N, use_gpu=True)
Problembehandlung
Wenn während des Trainings mit mehreren Knoten die Meldung NCCL failure: remote process exited or there was a network error
angezeigt wird, weist sie in der Regel auf ein Problem mit der Netzwerkkommunikation zwischen GPUs hin. Dieses Problem tritt auf, wenn NCCL (NVIDIA Collective Communications Library) bestimmte Netzwerkschnittstellen für die GPU-Kommunikation nicht verwenden kann.
Stellen Sie zum Beheben des Problems den SparkConf-Wert des Clusters für spark.executorEnv.NCCL_SOCKET_IFNAME
auf eth
ein. Damit wird im Grunde die Umgebungsvariable NCCL_SOCKET_IFNAME
für alle Worker in einem Knoten auf eth
eingestellt.
Notebook mit Beispielen
Dieses Notebook zeigt die Verwendung des Python-Pakets sparkdl.xgboost
mit Spark MLlib. Das Paket sparkdl.xgboost
ist seit Databricks Runtime ML 12.0 veraltet.