Partilhar via


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.sparko , 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 o xgboost.spark módulo. Consulte o guia de migração.
  • Os seguintes parâmetros do pacote xgboost não são suportados: gpu_id, output_margin, validate_features.
  • Os parâmetros sample_weight, eval_sete sample_weight_eval_set não são suportados. Em vez disso, use os parâmetros weightCol e validationIndicatorCol. Consulte XGBoost for PySpark Pipeline para obter detalhes.
  • Os parâmetros base_margine base_margin_eval_set não são suportados. Em vez disso, use o parâmetro baseMarginCol . Consulte XGBoost for PySpark Pipeline para obter detalhes.
  • O parâmetro missing tem semântica diferente do xgboost pacote. No pacote xgboost, os valores zero em uma matriz esparsa SciPy são tratados como valores ausentes, independentemente do valor de missing. Para os estimadores PySpark no pacote sparkdl, valores zero em um vetor esparso Spark não são tratados como valores ausentes, a menos que você defina missing=0. Se você tiver um conjunto de dados de treinamento esparso (a maioria dos valores de recurso está faltando), o Databricks recomenda definir missing=0 para reduzir o consumo de memória e obter um melhor desempenho.

Preparação distribuída

O Databricks Runtime ML suporta treinamento XGBoost distribuído usando o num_workers parâmetro. 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 tarefas do Spark no cluster. Para usar todos os slots de tarefas do Spark, defina num_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, defina use_gpu como 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 o sparkConf do cluster, definindo spark.executorEnv.NCCL_SOCKET_IFNAME como 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.

Notebook PySpark-XGBoost

Obter bloco de notas