Pular para o conteúdo principal

Treinamento distribuído de modelos XGBoost usando sparkdl.xgboost

info

Visualização

Esse recurso está em Public Preview.

nota

sparkdl.xgboost está obsoleto a partir de Databricks Runtime 12.0 ML, e foi removido em Databricks Runtime 13.0 ML e acima. Para obter informações sobre a migração de suas cargas de trabalho para xgboost.spark, consulte Guia de migração para o módulo obsoleto sparkdl.xgboost.

Databricks Runtime ML inclui PySpark estimadores baseados no Python xgboost pacote, sparkdl.xgboost.XgboostRegressor e sparkdl.xgboost.XgboostClassifier. O senhor pode criar um pipeline de ML com base nesses estimadores. Para obter mais informações, consulte XGBoost para o pipeline PySpark.

Databricks recomenda enfaticamente que os usuários sparkdl.xgboost usem Databricks Runtime 11.3 LTS ML ouacima. As versões anteriores do Databricks Runtime são afetadas por bugs em versões mais antigas do sparkdl.xgboost.

nota
  • O módulo sparkdl.xgboost está obsoleto desde o Databricks Runtime 12.0 ML. A Databricks recomenda que o senhor migre seu código para usar o módulo xgboost.spark. Consulte o guia de migração.
  • Os seguintes parâmetros do pacote xgboost não são compatíveis: gpu_id, output_margin, validate_features.
  • Os parâmetros sample_weight, eval_set e sample_weight_eval_set não são suportados. Em vez disso, use os parâmetros weightCol e validationIndicatorCol. ConsulteXGBoost para obter detalhes PySpark sobre o pipeline.
  • Os parâmetros base_margin e base_margin_eval_set não são suportados. Em vez disso, use o parâmetro baseMarginCol. ConsulteXGBoost para obter detalhes PySpark sobre o pipeline.
  • O parâmetro missing tem uma semântica diferente do pacote xgboost. 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 do PySpark no pacote sparkdl, os valores zero em um vetor esparso do Spark não são tratados como valores ausentes, a menos que o senhor defina missing=0. Se o senhor tiver um treinamento esparso dataset (a maioria dos valores de recurso está ausente), o site Databricks recomenda a configuração missing=0 para reduzir o consumo de memória e obter melhor desempenho.

Treinamento distribuído

O Databricks Runtime ML oferece suporte ao 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 Spark slots de tarefa em seu clustering. Para usar todos os Spark slots de tarefa, defina num_workers=sc.defaultParallelism.

Por exemplo:

Python
classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)

Limitações do treinamento distribuído

  • O senhor não pode usar o site mlflow.xgboost.autolog com o XGBoost distribuído.
  • O senhor não pode usar o site baseMarginCol com o XGBoost distribuído.
  • O senhor não pode usar o XGBoost distribuído em um clustering com o autoscale ativado. Consulte Ativar autoscale para obter instruções sobre como desativar o autoscale.

GPU treinamento

nota

Databricks Runtime 11.3 LTS ML inclui XGBoost 1.6.1, que não oferece suporte ao agrupamento de GPU com compute capability 5.2 e abaixo.

Databricks Runtime 9.1 LTS MLe acima oferecem suporte a clusters de GPU para treinamento XGBoost. Para usar clusters de GPU, defina use_gpu como True.

Por exemplo:

Python
classifier = XgboostClassifier(num_workers=N, use_gpu=True)
regressor = XgboostRegressor(num_workers=N, use_gpu=True)

Solução de problemas

Durante o treinamento com vários nós, se o senhor encontrar uma mensagem NCCL failure: remote process exited or there was a network error, isso normalmente indica um problema com a comunicação de rede entre as GPUs. Esse problema surge quando a NCCL (NVIDIA Collective Communications biblioteca) não pode usar determinadas interfaces de rede para comunicação com a GPU.

Para resolver, defina o sparkConf do clustering para spark.executorEnv.NCCL_SOCKET_IFNAME como eth. Isso basicamente define a variável de ambiente NCCL_SOCKET_IFNAME como eth para todos os trabalhadores em um nó.

Exemplo de notebook

Este Notebook mostra o uso do pacote Python sparkdl.xgboost com Spark MLlib. O pacote sparkdl.xgboost está obsoleto desde o Databricks Runtime 12.0 ML.

PySpark-XGBoost Notebook

Open notebook in new tab