Entraînement distribué de modèles XGBoost à l’aide de sparkdl.xgboost
Important
Cette fonctionnalité est disponible en préversion publique.
Notes
sparkdl.xgboost
est déconseillé à partir de Databricks Runtime 12.0 ML et est supprimé dans Databricks Runtime 13.0 ML et versions ultérieures. Pour plus d’informations sur la migration de vos charges de travail vers xgboost.spark
, consultez Guide de migration du module déprécié sparkdl.xgboost.
Databricks Runtime 7.6 ML inclut des estimateurs PySpark basés sur le package Python xgboost
, sparkdl.xgboost.XgboostRegressor
et sparkdl.xgboost.XgboostClassifier
. Vous pouvez créer un pipeline de ML basé sur ces estimateurs. Pour plus d’informations, consultez XGBoost for PySpark Pipeline.
Databricks recommande fortement aux utilisateurs de sparkdl.xgboost
d’utiliser Databricks Runtime 11.3 ML ou des versions ultérieures. Les versions antérieures de Databricks Runtime sont affectées par des bogues dans les versions antérieures de sparkdl.xgboost
.
Notes
- Le module
sparkdl.xgboost
est déconseillé depuis Databricks Runtime 12.0 ML. Databricks vous recommande de migrer votre code pour utiliser le modulexgboost.spark
à la place. Consultez le guide de migration. - Les paramètres suivants du package
xgboost
ne sont pas pris en charge :gpu_id
,output_margin
,validate_features
. - Les paramètres
sample_weight
,eval_set
etsample_weight_eval_set
ne sont pas pris en charge. Utilisez plutôt les paramètresweightCol
etvalidationIndicatorCol
. Pour plus d’informations, consultez XGBoost for PySpark Pipeline. - Les paramètres
base_margin
etbase_margin_eval_set
ne sont pas pris en charge. Utilisez le paramètrebaseMarginCol
à la place. Pour plus d’informations, consultez XGBoost for PySpark Pipeline. - Le paramètre
missing
a une sémantique différente de celle du packagexgboost
. Dans le packagexgboost
, les valeurs zéro dans une matrice éparse SciPy sont traitées comme des valeurs manquantes, quelle que soit la valeur demissing
. Pour les estimateurs PySpark dans le packagesparkdl
, les valeurs zéro dans un vecteur épars Spark ne sont pas traitées comme des valeurs manquantes, sauf si vous définissezmissing=0
. Si vous disposez d’un jeu de données de formation épars (la plupart des valeurs de fonctionnalité sont manquantes), Databricks recommande de définirmissing=0
pour réduire la consommation de mémoire et obtenir de meilleures performances.
Entraînement distribué
Databricks Runtime 9.0 ML prend en charge l’entraînement XGBoost distribué en utilisant le paramètre num_workers
. Pour utiliser un entraînement distribué, créez un classifieur ou un régresseur et définissez num_workers
sur une valeur inférieure ou égale au nombre total d’emplacements de tâches Spark sur votre cluster. Pour utiliser tous les emplacements de tâches Spark, définissez num_workers=sc.defaultParallelism
.
Par exemple :
classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)
Limites de la formation distribuée
- Vous ne pouvez pas utiliser
mlflow.xgboost.autolog
avec XGBoost distribué. - Vous ne pouvez pas utiliser
baseMarginCol
avec XGBoost distribué. - Vous ne pouvez pas utiliser XGBoost distribué sur un cluster pour lequel la mise à l’échelle automatique est activée. Consultez Activer la mise à l’échelle automatique pour obtenir des instructions sur la désactivation de la mise à l’échelle automatique.
Formation du GPU
Notes
Databricks Runtime 11.3 LTS ML inclut XGBoost 1.6.1, qui ne prend pas en charge les clusters GPU avec la capacité de calcul 5.2 et versions antérieures.
Databricks Runtime 9.1 LTS ML et les versions ultérieures prennent en charge les clusters GPU pour l’entraînement XGBoost. Pour utiliser un cluster GPU, définissez use_gpu
sur True
.
Par exemple :
classifier = XgboostClassifier(num_workers=N, use_gpu=True)
regressor = XgboostRegressor(num_workers=N, use_gpu=True)
Dépannage
Lors d’un entraînement à plusieurs nœuds, si vous rencontrez un message NCCL failure: remote process exited or there was a network error
, cela indique généralement un problème de communication réseau entre les GPU. Ce problème survient lorsque la bibliothèque NCCL (NVIDIA Collective Communications Library) ne peut pas utiliser certaines interfaces réseau pour la communication avec le GPU.
Pour résoudre ce problème, définissez le sparkConf du groupement pour spark.executorEnv.NCCL_SOCKET_IFNAME
sur eth
. Cela définit essentiellement la variable d’environnement NCCL_SOCKET_IFNAME
sur eth
pour tous les workers d’un nœud.
Exemple de bloc-notes
Ce notebook montre l’utilisation du package Python sparkdl.xgboost
avec Spark MLlib. Le package sparkdl.xgboost
est déprécié depuis Databricks Runtime 12.0 ML.