Compartir vía


Entrenamiento distribuido de modelos XGBoost mediante sparkdl.xgboost

Importante

Esta característica está en versión preliminar pública.

Nota:

sparkdl.xgboost está en desuso a partir de Databricks Runtime 12.0 ML y se quita en Databricks Runtime 13.0 ML y versiones posteriores. Para obtener información sobre cómo migrar las cargas de trabajo a xgboost.spark, consulte Guía de migración para el módulo sparkdl.xgboost en desuso.

Databricks Runtime ML incluye estimadores de PySpark basados en el paquete de Python xgboost, sparkdl.xgboost.XgboostRegressor y sparkdl.xgboost.XgboostClassifier. Puede crear una canalización ML a partir de estos estimadores. Para obtener más información, consulte XGBoost para la canalización de PySpark.

Databricks recomienda encarecidamente que los usuarios sparkdl.xgboost usen Databricks Runtime 11.3 LTS ML o versiones posteriores. Las versiones anteriores de Databricks Runtime se ven afectadas por errores en versiones anteriores de sparkdl.xgboost.

Nota:

  • El módulo sparkdl.xgboost está en desuso desde Databricks Runtime 12.0 ML. Databricks recomienda migrar el código para usar el módulo xgboost.spark en su lugar. Consulte la guía de migración.
  • No se admiten los siguiente parámetros del paquete xgboost: gpu_id, output_margin, validate_features.
  • No se admiten los parámetros sample_weight, eval_set y sample_weight_eval_set. En su lugar, se deben usar los parámetros weightCol y validationIndicatorCol. Consulte XGBoost para la canalización de PySpark para obtener más información.
  • No se admiten los parámetros base_margin y base_margin_eval_set. Use el parámetro baseMarginCol en su lugar. Consulte XGBoost para la canalización de PySpark para obtener más información.
  • El parámetro missing tiene una semántica distinta al paquete xgboost. En el paquete xgboost, los valores cero de una matriz dispersa de SciPy se tratan como valores ausentes independientemente del valor de missing. Para los estimadores de PySpark del paquete sparkdl, los valores cero de un vector disperso de Spark no se tratan como valores ausentes a menos que establezca missing=0. Si tiene un conjunto de datos de entrenamiento disperso (en el que faltan la mayoría de los valores de características), Databricks recomienda configurar missing=0 para reducir el consumo de memoria y lograr un mejor rendimiento.

Entrenamiento distribuido

Databricks Runtime ML admite el entrenamiento XGBoost distribuido mediante el parámetro num_workers. Para usar el entrenamiento distribuido, cree un clasificador o un regresor y establezca num_workers en un valor igual o menor que el número total de ranuras de tareas de Spark en el clúster. Para usar todas las ranuras de tareas de Spark, establezca num_workers=sc.defaultParallelism.

Por ejemplo:

classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)

Limitaciones del entrenamiento distribuido

  • No se puede usar mlflow.xgboost.autolog con XGBoost distribuido.
  • No se puede usar baseMarginCol con XGBoost distribuido.
  • No puede usar XGBoost distribuido en un clúster con el escalado automático habilitado. Consulte Habilitar autoescalado para obtener instrucciones para deshabilitar el autoescalado.

Entrenamiento de GPU

Nota:

Databricks Runtime 11.3 ML incluye XGBoost 1.6.1, que no admite clústeres de GPU con capacidad de proceso 5.2 e inferiores.

Databricks Runtime 9.1 LTS ML y versiones posteriores admiten clústeres de GPU para el entrenamiento de XGBoost. Para usar un clúster de GPU, establezca use_gpu en True.

Por ejemplo:

classifier = XgboostClassifier(num_workers=N, use_gpu=True)
regressor = XgboostRegressor(num_workers=N, use_gpu=True)

Solución de problemas

Durante el entrenamiento de varios nodos, si aparece un mensaje NCCL failure: remote process exited or there was a network error, normalmente indica un problema con la comunicación de red entre GPU. Este problema se produce cuando NCCL (biblioteca de comunicaciones colectiva de NVIDIA) no puede usar determinadas interfaces de red para la comunicación con GPU.

Para resolverlo, establezca sparkConf del clúster para spark.executorEnv.NCCL_SOCKET_IFNAME a eth. De esta manera, se establece básicamente la variable NCCL_SOCKET_IFNAME a eth de entorno para todos los trabajos de un nodo.

Cuaderno de ejemplo

En este cuaderno se muestra el uso del paquete de Python sparkdl.xgboost con Spark MLlib. El paquete sparkdl.xgboost está en desuso desde Databricks Runtime 12.0 ML.

Cuaderno de PySpark-XGBoost

Obtener el cuaderno