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 parameters do pacote xgboost não são suportados: gpu_id, output_margin, validate_features.
  • Os parameterssample_weight, eval_sete sample_weight_eval_set não são suportados. Em vez disso, use o parametersweightCol e validationIndicatorCol. Consulte XGBoost for PySpark Pipeline para obter detalhes.
  • O parametersbase_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 values zero em uma matriz esparsa SciPy são tratados como values ausentes, independentemente do valor de missing. Para os estimadores PySpark no pacote sparkdl, 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 ajustar missing=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.

Notebook PySpark-XGBoost

Get portátil