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.xgboost
está 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
xgboost
não são compatíveis:gpu_id
,output_margin
,validate_features
. - Os parâmetros
sample_weight
,eval_set
esample_weight_eval_set
não são suportados. Em vez disso, use os parâmetrosweightCol
evalidationIndicatorCol
. ConsulteXGBoost para obter detalhes PySpark sobre o pipeline. - Os parâmetros
base_margin
ebase_margin_eval_set
não são suportados. Em vez disso, use o parâmetrobaseMarginCol
. ConsulteXGBoost para obter detalhes PySpark sobre o pipeline. - O parâmetro
missing
tem 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=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:
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
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.