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óduloxgboost.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
esample_weight_eval_set
não são suportados. Em vez disso, use os parâmetrosweightCol
evalidationIndicatorCol
. Consulte pipelineXGBoost para PySpark para obter detalhes.Os parâmetros
base_margin
ebase_margin_eval_set
não são suportados. Em vez disso, use o parâmetrobaseMarginCol
. Consulte pipelineXGBoost para PySpark para obter detalhes.O parâmetro
missing
tem 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 PySpark no pacotesparkdl
, os valores zero em um vetor esparso Spark não são tratados como valores ausentes, a menos que você definamissing=0
. Se você tiver um dataset de treinamento esparso (a maioria dos valores de recursos está ausente), o Databricks recomenda definirmissing=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ó.