Treinamento distribuído de modelos XGBoost usando sparkdl.xgboost
Importante
Esta funcionalidade está em Pré-visualização Pública.
Nota
sparkdl.xgboost
foi preterido a partir do Databricks Runtime 12.0 ML e foi removido no Databricks Runtime 13.0 ML e superior. Para obter informações sobre como migrar suas cargas de trabalho para xgboost.spark
o , consulte Guia de migração para o módulo sparkdl.xgboost preterido.
O Databricks Runtime ML inclui estimadores PySpark baseados no pacote xgboost
Python 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 for PySpark Pipeline.
O Databricks recomenda vivamente que sparkdl.xgboost
os utilizadores utilizem o Databricks Runtime 11.3 LTS ML ou superior. As versões anteriores do Databricks Runtime são afetadas por bugs em versões mais antigas do sparkdl.xgboost
.
Nota
- O
sparkdl.xgboost
módulo foi preterido desde o Databricks Runtime 12.0 ML. O Databricks recomenda que você migre seu código para usar oxgboost.spark
módulo. Consulte o guia de migração. - Os seguintes parameters do pacote
xgboost
não são suportados:gpu_id
,output_margin
,validate_features
. - Os parameters
sample_weight
,eval_set
esample_weight_eval_set
não são suportados. Em vez disso, use o parametersweightCol
evalidationIndicatorCol
. Consulte XGBoost for PySpark Pipeline para obter detalhes. - O parameters
base_margin
ebase_margin_eval_set
não são suportados. Em vez disso, use o parâmetrobaseMarginCol
. Consulte XGBoost for PySpark Pipeline para obter detalhes. - O parâmetro
missing
tem semântica diferente doxgboost
pacote. No pacotexgboost
, os values zero em uma matriz esparsa SciPy são tratados como values ausentes, independentemente do valor demissing
. Para os estimadores PySpark no pacotesparkdl
, zero values em um vetor esparso Spark não são tratados como values ausentes, a menos que você setmissing=0
. Se tiver um conjunto de dados de treinamento esparso (a maioria das características values estão faltando), o Databricks recomenda ajustarmissing=0
de modo a reduzir o consumo de memória e melhorar o desempenho.
Preparação distribuída
O Databricks Runtime ML suporta treinamento XGBoost distribuído usando o num_workers
parâmetro. Para usar o treino distribuído, crie um classificador ou regressor e ajuste setnum_workers
para um valor menor ou igual ao número total de slots de tarefas do Spark no seu cluster. Para usar todos os slots de tarefas do Spark, setnum_workers=sc.defaultParallelism
.
Por exemplo:
classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)
Limitações da formação distribuída
- Você não pode usar
mlflow.xgboost.autolog
com XGBoost distribuído. - Você não pode usar
baseMarginCol
com XGBoost distribuído. - Não é possível usar XGBoost distribuído em um cluster com dimensionamento automático habilitado. Consulte Ativar dimensionamento automático para obter instruções sobre como desativar o dimensionamento automático.
Treinamento de GPU
Nota
O Databricks Runtime 11.3 LTS ML inclui o XGBoost 1.6.1, que não suporta clusters GPU com capacidade de computação 5.2 e inferior.
O Databricks Runtime 9.1 LTS ML e superior suporta clusters de GPU para treinamento XGBoost. Para usar um cluster de GPU, setuse_gpu
a True
.
Por exemplo:
classifier = XgboostClassifier(num_workers=N, use_gpu=True)
regressor = XgboostRegressor(num_workers=N, use_gpu=True)
Resolução de Problemas
Durante o treinamento de vários nós, se você encontrar uma NCCL failure: remote process exited or there was a network error
mensagem, ela geralmente indica um problema com a comunicação de rede entre GPUs. Esse problema surge quando NCCL (NVIDIA Collective Communications Library) não pode usar determinadas interfaces de rede para comunicação GPU.
Para resolver, configure set o sparkConf do cluster para spark.executorEnv.NCCL_SOCKET_IFNAME
até eth
. Isso essencialmente define a variável NCCL_SOCKET_IFNAME
de ambiente para eth
todos os trabalhadores em um nó.
Bloco de notas de exemplo
Este bloco de anotações mostra o uso do pacote sparkdl.xgboost
Python com o Spark MLlib. O sparkdl.xgboost
pacote foi preterido desde Databricks Runtime 12.0 ML.