Treinamento distribuído de modelos XGBoost usando sparkdl.xgboost

Visualização

Este recurso está em visualização pública.

Observação

sparkdl.xgboost foi preterido a partir do Databricks Runtime 12,0 ML e foi removido do Databricks Runtime 13,0 MLe acima. Para obter informações sobre como migrar suas cargas de trabalho para xgboost.spark, consulte Guia de migração para o módulo sparkdl.xgboost obsoleto.

Databricks Runtime ML inclui estimadores PySpark com base no pacote Python xgboost , sparkdl.xgboost.XgboostRegressor e sparkdl.xgboost.XgboostClassifier. Você pode criar ML pipelines com base nesses estimadores. Para obter mais informações, consulte pipelineXGBoost para 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.

Observação

  • O módulo sparkdl.xgboost foi preterido desde Databricks Runtime 12.0 ML. A Databricks recomenda que você 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 suportados: 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. Consulte pipelineXGBoost para PySpark para obter detalhes.

  • Os parâmetros base_margin e base_margin_eval_set não são suportados. Em vez disso, use o parâmetro baseMarginCol . Consulte pipelineXGBoost para PySpark para obter detalhes.

  • O parâmetro missing tem 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 PySpark no pacote sparkdl , os 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 dataset de treinamento esparso (a maioria dos valores de recursos está ausente), o Databricks recomenda definir missing=0 para reduzir o consumo de memória e obter melhor desempenho.

treinamento distribuído

O Databricks Runtime ML suporta 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 Spark slots de tarefa em seu cluster. Para usar todos os Spark slots de tarefa, 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 o XGBoost distribuído em clusters com autoscale habilitado. Consulte Habilitar autoscale para obter instruções sobre como desabilitar autoscale.

GPU treinamento

Observação

Databricks Runtime 11.3 LTS ML inclui XGBoost 1.6.1, que não oferece suporte a clusters de GPU com capacidade de computação 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:

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 cluster para spark.executorEnv.NCCL_SOCKET_IFNAME como eth. Isso basicamente define a variável de ambiente NCCL_SOCKET_IFNAME para eth para todos os trabalhadores em um nó.

Notebook de exemplo

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

Notebook PySpark-XGBoost

Abra o bloco de anotações em outra guia