Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Treinamento distribuído de modelos XGBoost usando o
Importante
Esse recurso está em uma versão prévia.
Observação
sparkdl.xgboost está preterido desde o Databricks Runtime 12.0 ML e foi removido no Databricks Runtime 13.0 ML e superior. Para obter informações sobre como migrar suas cargas de trabalho para xgboost.spark, consulte o guia de migração para o módulo obsoleto sparkdl.xgboost.
Databricks Runtime ML inclui estimadores PySpark baseados no pacote Python xgboost, sparkdl.xgboost.XgboostRegressor e sparkdl.xgboost.XgboostClassifier. Você pode criar um pipeline de ML com base nesses estimadores. Para obter mais informações, consulte XGBoost para Pipeline do PySpark.
O Databricks recomenda fortemente que os usuários sparkdl.xgboost usem o Databricks Runtime 11.3 LTS ML ou superior. As versões anteriores do Databricks Runtime são afetadas por bugs em versões anteriores do sparkdl.xgboost.
Observação
- O módulo
sparkdl.xgboostestá preterido desde o Databricks Runtime 12.0 ML. O Databricks recomenda que você migre seu código para usar o móduloxgboost.spark. Confira o guia de migração. - Não há suporte para os seguintes parâmetros do pacote
xgboost:gpu_id,output_margin,validate_features. - Não há suporte para os parâmetros
sample_weight,eval_setesample_weight_eval_set. Use os parâmetrosweightColevalidationIndicatorColem seu lugar. Consulte XGBoost para Pipeline do PySpark para obter detalhes. - Não há suporte para os parâmetros
base_marginebase_margin_eval_set. Em vez disso, use o parâmetrobaseMarginCol. Consulte XGBoost para Pipeline do PySpark para obter detalhes. - O parâmetro
missingtem semântica diferente daquela do pacotexgboost. No pacotexgboost, os valores zero em uma matriz esparsa do SciPy são tratados como valores ausentes, independentemente do valor demissing. Para os estimadores PySpark no pacotesparkdl, os valores zero em um vetor esparso do Spark não são tratados como valores ausentes, a menos que você definamissing=0. Se você tiver um conjunto de recursos de treinamento esparso (a maioria dos valores de recurso ausentes), a Databricks recomenda a configuraçãomissing=0para reduzir o consumo de memória e obter um melhor desempenho.
Treinamento distribuído
O Databricks Runtime ML tem suporte para 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 slots de tarefa do Spark em seu cluster. Para usar todos os slots de tarefa do Spark, 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.autologcom XGBoost distribuído. - Você não pode usar
baseMarginColcom XGBoost distribuído. - Você não pode usar XGBoost distribuído em um cluster com dimensionamento automático habilitado. Consulte Habilitar o dimensionamento automático para obter instruções sobre como desabilitar o dimensionamento automático.
Treinamento de GPU
Observação
O Databricks Runtime 11.3 LTS ML inclui o XGBoost 1.6.1, que não tem suporte para clusters de GPU com capacidade de computação 5.2 e inferior.
O Databricks Runtime 9.1 LTS ML e superior dão suporte a clusters de GPU para treinamento no XGBoost. Para usar um cluster 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 de vários nós, se você encontrar uma mensagem de NCCL failure: remote process exited or there was a network error, geralmente isso indica um problema com a comunicação de rede entre GPUs. Esse problema ocorre quando a NCCL (Biblioteca de Comunicações Coletivas NVIDIA) não pode usar determinados adaptadores de rede para comunicação de GPU.
Para resolver, configure o sparkConf do cluster de forma a definir spark.executorEnv.NCCL_SOCKET_IFNAME para eth. Isso basicamente ajusta a variável de ambiente NCCL_SOCKET_IFNAME para eth em todos os trabalhos em um node.
Caderno de exemplo
Este notebook mostra o uso do pacote sparkdl.xgboost do Python com o Spark MLlib. O pacote sparkdl.xgboost foi preterido desde o Databricks Runtime 12.0 ML.