Aller au contenu principal

Entraînement distribué de modèles XGBoost à l’aide de sparkdl.xgboost

info

Aperçu

Cette fonctionnalité est en aperçu public.

remarque

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.

remarque
  • Le module sparkdl.xgboost est obsolète depuis Databricks Runtime 12.0 ML. Databricks vous recommande de migrer votre code pour utiliser le module xgboost.spark à la place. Consultez le guide de migration.
  • Les parameters suivants du package xgboost ne sont pas pris en charge : gpu_id, output_margin, validate_features.
  • Les paramètres sample_weight, eval_set et sample_weight_eval_set ne sont pas pris en charge. Utilisez plutôt les paramètres weightCol et validationIndicatorCol. Consultez le pipeline XGBoost pour PySpark pour plus de détails.
  • Les paramètres base_margin et base_margin_eval_set ne sont pas pris en charge. Utilisez le paramètre baseMarginCol à la place. Voir XGBoost pour PySpark Pipeline pour plus de détails.
  • Le paramètre missing a une sémantique différente de celle du package xgboost. Dans le package xgboost, les valeurs nulles dans une matrice creuse SciPy sont traitées comme des valeurs manquantes, quelle que soit la valeur de missing. Pour les estimateurs PySpark du package sparkdl, les valeurs nulles dans un vecteur creux Spark ne sont pas traitées comme des valeurs manquantes, sauf si vous définissez missing=0. Si vous disposez d’un dataset d’entraînement sparse (la plupart des valeurs des features sont manquantes), Databricks recommande de définir missing=0 afin 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 :

Python
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 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

remarque

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 :

Python
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.

notebook PySpark-XGBoost