Treinamento distribuído de modelos XGBoost usando o sparkdl.xgboost
Importante
Esse recurso está em uma versão prévia.
Observação
sparkdl.xgboost
está preterido desde o Databricks Runtime 12.0 ML e foi removido no Databricks Runtime 13.0 ML e superior. Para obter informações sobre como migrar cargas de trabalho para xgboost.spark
, consulte Guia de migração para o módulo sparkdl.xgboost preterido.
Databricks Runtime ML inclui estimadores PySpark baseados no pacote Python xgboost
, sparkdl.xgboost.XgboostRegressor
e sparkdl.xgboost.XgboostClassifier
. Você pode criar um pipeline de ML com base nesses estimadores. Para obter mais informações, consulte XGBoost para Pipeline do PySpark.
O Databricks recomenda fortemente que os usuários sparkdl.xgboost
usem o Databricks Runtime 11.3 LTS ML ou superior. As versões anteriores do Databricks Runtime são afetadas por bugs em versões anteriores do sparkdl.xgboost
.
Observação
- O módulo
sparkdl.xgboost
está preterido desde o Databricks Runtime 12.0 ML. O Databricks recomenda que você migre seu código para usar o móduloxgboost.spark
. Confira o guia de migração. - Não há suporte para os seguintes parâmetros do pacote
xgboost
:gpu_id
,output_margin
,validate_features
. - Não há suporte para os parâmetros
sample_weight
,eval_set
esample_weight_eval_set
. Use os parâmetrosweightCol
evalidationIndicatorCol
em seu lugar. Consulte XGBoost para Pipeline do PySpark para obter detalhes. - Não há suporte para os parâmetros
base_margin
ebase_margin_eval_set
. Em vez disso, use o parâmetrobaseMarginCol
. Consulte XGBoost para Pipeline do PySpark para obter detalhes. - O parâmetro
missing
tem semântica diferente daquela do pacotexgboost
. No pacotexgboost
, os valores zero em uma matriz esparsa do SciPy são tratados como valores ausentes, independentemente do valor demissing
. Para os estimadores PySpark no pacotesparkdl
, os valores zero em um vetor esparso do Spark não são tratados como valores ausentes, a menos que você definamissing=0
. Se você tiver um conjunto de recursos de treinamento esparso (a maioria dos valores de recurso ausentes), a Databricks recomenda a configuraçãomissing=0
para reduzir o consumo de memória e obter um melhor desempenho.
Treinamento distribuído
O Databricks Runtime ML tem suporte para o treinamento distribuído do XGBoost usando o parâmetro num_workers
. Para usar o treinamento distribuído, crie um classificador ou regressor e defina num_workers
como um valor menor ou igual ao número total de slots de tarefa do Spark em seu cluster. Para usar todos os slots de tarefa do Spark, defina num_workers=sc.defaultParallelism
.
Por exemplo:
classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)
Limitações do treinamento distribuído
- Você não pode usar
mlflow.xgboost.autolog
com XGBoost distribuído. - Você não pode usar
baseMarginCol
com XGBoost distribuído. - Você não pode usar XGBoost distribuído em um cluster com dimensionamento automático habilitado. Consulte Habilitar o dimensionamento automático para obter instruções sobre como desabilitar o dimensionamento automático.
Treinamento de GPU
Observação
O Databricks Runtime 11.3 LTS ML inclui o XGBoost 1.6.1, que não tem suporte para clusters de GPU com capacidade de computação 5.2 e inferior.
O Databricks Runtime 9.1 LTS ML e superior dão suporte a clusters de GPU para treinamento no XGBoost. Para usar um cluster de GPU, defina use_gpu
como True
.
Por exemplo:
classifier = XgboostClassifier(num_workers=N, use_gpu=True)
regressor = XgboostRegressor(num_workers=N, use_gpu=True)
Solução de problemas
Durante o treinamento de vários nós, se você encontrar uma mensagem de NCCL failure: remote process exited or there was a network error
, geralmente isso indica um problema com a comunicação de rede entre GPUs. Esse problema ocorre quando a NCCL (Biblioteca de Comunicações Coletivas NVIDIA) não pode usar determinados adaptadores de rede para comunicação de GPU.
Para resolver isso, configure o sparkConf do cluster de spark.executorEnv.NCCL_SOCKET_IFNAME
para eth
. Isso basicamente ajusta a variável de ambiente NCCL_SOCKET_IFNAME
para eth
em todos os trabalhos em um node.
Caderno de exemplo
Este notebook mostra o uso do pacote sparkdl.xgboost
do Python com o Spark MLlib. O pacote sparkdl.xgboost
foi preterido desde o Databricks Runtime 12.0 ML.