Compartilhar via


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ódulo xgboost.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 e sample_weight_eval_set. Use os parâmetros weightCol e validationIndicatorCol em seu lugar. Consulte XGBoost para Pipeline do PySpark para obter detalhes.
  • Não há suporte para os parâmetros base_margin e base_margin_eval_set. Em vez disso, use o parâmetro baseMarginCol. Consulte XGBoost para Pipeline do PySpark para obter detalhes.
  • O parâmetro missing tem semântica diferente daquela do pacote xgboost. No pacote xgboost, os valores zero em uma matriz esparsa do SciPy são tratados como valores ausentes, independentemente do valor de missing. Para os estimadores PySpark no pacote sparkdl, os valores zero em um vetor esparso do Spark não são tratados como valores ausentes, a menos que você defina missing=0. Se você tiver um conjunto de recursos de treinamento esparso (a maioria dos valores de recurso ausentes), a Databricks recomenda a configuração missing=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.

Notebook PySpark-XGBoost

Obter notebook