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óduloxgboost.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
ysample_weight_eval_set
. En su lugar, se deben usar los parámetrosweightCol
yvalidationIndicatorCol
. Consulte XGBoost para la canalización de PySpark para obtener más información. - No se admiten los parámetros
base_margin
ybase_margin_eval_set
. Use el parámetrobaseMarginCol
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 paquetexgboost
. En el paquetexgboost
, los valores cero de una matriz dispersa de SciPy se tratan como valores ausentes independientemente del valor demissing
. Para los estimadores de PySpark del paquetesparkdl
, los valores cero de un vector disperso de Spark no se tratan como valores ausentes a menos que establezcamissing=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 configurarmissing=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.