Training distribuito dei modelli XGBoost con sparkdl.xgboost
Importante
Questa funzionalità è disponibile in anteprima pubblica.
Nota
sparkdl.xgboost
è deprecato a partire da Databricks Runtime 12.0 ML e viene rimosso in Databricks Runtime 13.0 ML e versioni successive. Per informazioni sulla migrazione dei carichi di lavoro a xgboost.spark
, vedere Guida alla migrazione per il modulo sparkdl.xgboost deprecato.
Databricks Runtime ML include gli estimatori PySpark basati sul pacchetto xgboost
di Python, sparkdl.xgboost.XgboostRegressor
e sparkdl.xgboost.XgboostClassifier
. È possibile creare una pipeline ML basata su queste stime. Per altre informazioni, vedere XGBoost per pySpark Pipeline.
Databricks consiglia vivamente agli utenti sparkdl.xgboost
di usare Databricks Runtime 11.3 LTS ML o versione successiva. Le versioni precedenti di Databricks Runtime sono interessate da bug nelle versioni precedenti di sparkdl.xgboost
.
Nota
- Il modulo
sparkdl.xgboost
è deprecato a partire da Databricks Runtime 12.0 ML. Databricks consiglia di eseguire invece la migrazione del codice per usare il moduloxgboost.spark
. Vedere la guida alla migrazione. - I parametri seguenti del pacchetto di
xgboost
non sono supportati:gpu_id
,output_margin
,validate_features
. - I parametri
sample_weight
,eval_set
esample_weight_eval_set
non sono supportati. Usare invece i parametriweightCol
evalidationIndicatorCol
. Per informazioni dettagliate, vedere XGBoost for la pipeline PySpark. - I parametri
base_margin
ebase_margin_eval_set
non sono supportati. Usare invece il parametrobaseMarginCol
. Per informazioni dettagliate, vedere XGBoost for la pipeline PySpark. - Il parametro
missing
ha una semantica diversa dal pacchettoxgboost
. Nel pacchettoxgboost
i valori zero in una matrice di tipo sparse SciPy vengono considerati valori mancanti indipendentemente dal valore dimissing
. Per gli estimatori PySpark nel pacchettosparkdl
, i valori zero in un vettore di tipo sparse Spark non vengono considerati come valori mancanti, a meno che non si impostimissing=0
. Se si dispone di un set di dati di training di tipo sparse (la maggior parte dei valori delle funzionalità è mancante), Databricks consiglia di impostaremissing=0
per ridurre il consumo di memoria e ottenere prestazioni migliori.
Training distribuito
Databricks Runtime ML supporta il training XGBoost distribuito usando il parametro num_workers
. Per usare il training distribuito, creare un classificatore o un regressore e impostare num_workers
su un valore minore o uguale al numero totale di slot di attività Spark nel cluster. Per usare tutti gli slot di attività Spark, impostare num_workers=sc.defaultParallelism
.
Ad esempio:
classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)
Limitazioni del training distribuito
- Non è possibile usare
mlflow.xgboost.autolog
con XGBoost distribuito. - Non è possibile usare
baseMarginCol
con XGBoost distribuito. - Non è possibile usare XGBoost distribuito in un cluster con scalabilità automatica abilitata. Per istruzioni su come disabilitare la scalabilità automatica, vedere Abilitare la scalabilità automatica.
Training della GPU
Nota
Databricks Runtime 11.3 LTS ML include XGBoost 1.6.1, che non supporta cluster GPU con funzionalità di calcolo 5.2 e versioni precedenti.
Databricks Runtime 9.1 LTS ML e versioni successive supportano i cluster GPU per il training XGBoost. Per usare un cluster GPU, impostare use_gpu
su True
.
Ad esempio:
classifier = XgboostClassifier(num_workers=N, use_gpu=True)
regressor = XgboostRegressor(num_workers=N, use_gpu=True)
Risoluzione dei problemi
Durante il training a più nodi, se viene visualizzato un messaggio NCCL failure: remote process exited or there was a network error
, in genere indica un problema con la comunicazione di rete tra GPU. Questo problema si verifica quando NCCL (NVIDIA Collective Communications Library) non può usare determinate interfacce di rete per la comunicazione GPU.
Per risolvere il problema, impostare il sparkConf del cluster per spark.executorEnv.NCCL_SOCKET_IFNAME
su eth
. In pratica, la variabile di ambiente NCCL_SOCKET_IFNAME
viene impostata su eth
per tutti i ruoli di lavoro in un nodo.
Notebook di esempio
Questo notebook illustra l'uso del pacchetto Python sparkdl.xgboost
con Spark MLlib. Il pacchetto sparkdl.xgboost
è deprecato a partire da Databricks Runtime 12.0 ML.
Notebook PySpark-XGBoost
Ottieni il notebook