Treinamento distribuído de modelos XGBoost usando sparkdl.xgboost
Visualização
Esse recurso está em Public Preview.
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.
- O módulo
sparkdl.xgboostestá obsoleto desde o Databricks Runtime 12.0 ML. A Databricks recomenda que o senhor migre seu código para usar o móduloxgboost.spark. Consulte o guia de migração. - Os seguintes parâmetros do pacote
xgboostnão são compatíveis:gpu_id,output_margin,validate_features. - Os parâmetros
sample_weight,eval_setesample_weight_eval_setnão são suportados. Em vez disso, use os parâmetrosweightColevalidationIndicatorCol. ConsulteXGBoost para obter detalhes PySpark sobre o pipeline. - Os parâmetros
base_marginebase_margin_eval_setnão são suportados. Em vez disso, use o parâmetrobaseMarginCol. ConsulteXGBoost para obter detalhes PySpark sobre o pipeline. - O parâmetro
missingtem uma semântica diferente do pacotexgboost. No pacotexgboost, os valores zero em uma matriz esparsa SciPy são tratados como valores ausentes, independentemente do valor demissing. Para os estimadores do PySpark no pacotesparkdl, os valores zero em um vetor esparso do Spark não são tratados como valores ausentes, a menos que o senhor definamissing=0. Se o senhor tiver um treinamento esparso dataset (a maioria dos valores de recurso está ausente), o site Databricks recomenda a configuraçãomissing=0para 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:
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.autologcom o XGBoost distribuído. - O senhor não pode usar o site
baseMarginColcom 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
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:
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.