Condividi tramite


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 modulo xgboost.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_sete sample_weight_eval_set non sono supportati. Usare invece i parametri weightCol e validationIndicatorCol. Per informazioni dettagliate, vedere XGBoost for la pipeline PySpark.
  • I parametri base_margine base_margin_eval_set non sono supportati. Usare invece il parametro baseMarginCol. Per informazioni dettagliate, vedere XGBoost for la pipeline PySpark.
  • Il parametro missing ha una semantica diversa dal pacchetto xgboost. Nel pacchetto xgboost i valori zero in una matrice di tipo sparse SciPy vengono considerati valori mancanti indipendentemente dal valore di missing. Per gli estimatori PySpark nel pacchetto sparkdl, i valori zero in un vettore di tipo sparse Spark non vengono considerati come valori mancanti, a meno che non si imposti missing=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 impostare missing=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