Entraînement distribué de modèles XGBoost à l’aide de sparkdl.xgboost
Aperçu
Cette fonctionnalité est en aperçu public.
sparkdl.xgboost est obsolète à partir de Databricks Runtime 12.0 ML et est supprimé dans Databricks Runtime 13.0 ML et versions ultérieures. Pour des informations sur la migration de vos charges de travail vers xgboost.spark, consultez le guide de migration du module obsolète sparkdl.xgboost.
Databricks Runtime 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 pour les pipelines PySpark.
Databricks recommande vivement que les utilisateurs sparkdl.xgboost utilisent Databricks Runtime 11.3 LTS ML ou version ultérieure. Les versions précédentes de Databricks Runtime sont affectées par des bogues dans les anciennes versions de sparkdl.xgboost.
- Le module
sparkdl.xgboostest obsolète 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 parameters suivants du package
xgboostne sont pas pris en charge :gpu_id,output_margin,validate_features. - Les paramètres
sample_weight,eval_setetsample_weight_eval_setne sont pas pris en charge. Utilisez plutôt les paramètresweightColetvalidationIndicatorCol. Consultez le pipeline XGBoost pour PySpark pour plus de détails. - Les paramètres
base_marginetbase_margin_eval_setne sont pas pris en charge. Utilisez le paramètrebaseMarginColà la place. Voir XGBoost pour PySpark Pipeline pour plus de détails. - Le paramètre
missinga une sémantique différente de celle du packagexgboost. Dans le packagexgboost, les valeurs nulles dans une matrice creuse SciPy sont traitées comme des valeurs manquantes, quelle que soit la valeur demissing. Pour les estimateurs PySpark du packagesparkdl, les valeurs nulles dans un vecteur creux Spark ne sont pas traitées comme des valeurs manquantes, sauf si vous définissezmissing=0. Si vous disposez d’un dataset d’entraînement sparse (la plupart des valeurs des features sont manquantes), Databricks recommande de définirmissing=0afin de réduire la consommation de mémoire et d’obtenir de meilleures performances.
Formation distribuée
Databricks Runtime ML prend en charge l'entraînement distribué XGBoost en utilisant le parameter num_workers. Pour utiliser l'entraînement distribué, créez un classificateur 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âche 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.autologavec XGBoost distribué. - Vous ne pouvez pas utiliser
baseMarginColavec XGBoost distribué. - Vous ne pouvez pas utiliser XGBoost distribué sur un cluster avec la mise à l’échelle automatique activée. Consultez Activer le dimensionnement automatique pour obtenir des instructions sur la désactivation du dimensionnement automatique.
Entraînement GPU
Databricks Runtime 11.3 LTS ML inclut XGBoost 1.6.1, qui ne prend pas en charge les clusters GPU avec une capacité de compute 5,2 et inférieure.
Databricks Runtime 9.1 LTS ML et versions supé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
Pendant la formation multi-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 NCCL (NVIDIA Collective Communications Library) ne peut pas utiliser certaines interfaces réseau pour la communication GPU.
Pour résoudre le problème, définissez le sparkConf du cluster pour spark.executorEnv.NCCL_SOCKET_IFNAME sur eth. Ceci définit essentiellement la variable d’environnement NCCL_SOCKET_IFNAME à eth pour tous les workers d’un nœud.
Exemple de Notebook
Ce Notebook montre l'utilisation du package Python sparkdl.xgboost avec Spark MLlib. Le package sparkdl.xgboost est obsolète depuis Databricks Runtime 12.0 ML.