Поделиться через


Распределенное обучение моделей XGBoost с помощью sparkdl.xgboost

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

Примечание.

sparkdl.xgboost устарел, начиная с Databricks Runtime 12.0 ML, и удаляется в Databricks Runtime 13.0 ML и выше. Дополнительные сведения о переносе рабочих xgboost.sparkнагрузок см . в руководстве по миграции для устаревшего модуля sparkdl.xgboost.

Машинное обучение среды выполнения Databricks включает средства оценки PySpark на основе пакета Python xgboost и sparkdl.xgboost.XgboostRegressorsparkdl.xgboost.XgboostClassifier. На основе этих средств оценки можно создать конвейер ML. Дополнительные сведения см. в разделе XGBoost для конвейера PySpark.

Databricks настоятельно рекомендует sparkdl.xgboost пользователям использовать Databricks Runtime 11.3 LTS ML или более поздней версии. Предыдущие версии среды выполнения Databricks влияют на ошибки в более ранних версиях sparkdl.xgboost.

Примечание.

  • Модуль sparkdl.xgboost устарел, так как Databricks Runtime 12.0 ML. Databricks рекомендует перенести код для использования xgboost.spark модуля. См. руководство по переносу.
  • Следующие параметры пакета xgboost не поддерживаются: gpu_id, output_margin, validate_features.
  • Параметры sample_weight, eval_set и sample_weight_eval_set не поддерживаются. Вместо этого используйте параметры weightCol и validationIndicatorCol. Дополнительные сведения см. в разделе XGBoost для конвейера PySpark.
  • Параметры base_margin и base_margin_eval_set не поддерживаются. Используйте вместо него параметр baseMarginCol . Дополнительные сведения см. в разделе XGBoost для конвейера PySpark.
  • Параметр missing имеет другую семантику из пакета xgboost. В пакете xgboost нулевые значения в разреженной матрице SciPy обрабатываются как отсутствующие значения независимо от значения missing. В средствах оценки PySpark в пакете sparkdl нулевые значения в разреженном векторе Spark не рассматриваются как отсутствующие значения, если не задано значение missing=0. Если у вас есть разреженный набор данных для обучения (большинство значений компонентов отсутствует), то Databricks рекомендует установить missing=0 для уменьшения потребления памяти и повышения производительности.

Распределенное обучение

Databricks Runtime ML поддерживает распределенное обучение XGBoost с помощью num_workers параметра. Чтобы использовать распределенное обучение, создайте классификатор или регрессию и задайте num_workers значение меньше или равно общему количеству слотов задач Spark в кластере. Чтобы использовать все слоты задач Spark, задайте.num_workers=sc.defaultParallelism

Например:

classifier = XgboostClassifier(num_workers=sc.defaultParallelism)
regressor = XgboostRegressor(num_workers=sc.defaultParallelism)

Ограничения распределенного обучения

  • Нельзя использовать mlflow.xgboost.autolog с распределенным обучением XGBoost.
  • Нельзя использовать baseMarginCol с распределенным обучением XGBoost.
  • Нельзя использовать распределенное обучение XGBoost в кластере с включенным автомасштабированием. Инструкции по отключению автомасштабирования см. в разделе "Включить автомасштабирование ".

Обучение GPU

Примечание.

Databricks Runtime 11.3 LTS ML включает XGBoost 1.6.1, который не поддерживает кластеры GPU с возможностями вычислений 5.2 и ниже.

Databricks Runtime 9.1 LTS ML и выше поддерживают кластеры GPU для обучения XGBoost. Чтобы использовать кластер GPU, задайте для use_gpu значение True.

Например:

classifier = XgboostClassifier(num_workers=N, use_gpu=True)
regressor = XgboostRegressor(num_workers=N, use_gpu=True)

Устранение неполадок

Во время обучения с несколькими узлами, если вы столкнулись NCCL failure: remote process exited or there was a network error с сообщением, обычно это указывает на проблему с сетевым обменом данными между gpu. Эта проблема возникает, когда NCCL (библиотека коллективных коммуникаций NVIDIA) не может использовать определенные сетевые интерфейсы для взаимодействия с GPU.

Чтобы устранить эту проблему, задайте для кластера значение spark.executorEnv.NCCL_SOCKET_IFNAMEethsparkConf. Это по сути задает переменную NCCL_SOCKET_IFNAMEeth среды для всех рабочих ролей в узле.

Пример записной книжки

В этой записной книжке показано использование пакета sparkdl.xgboost Python с Spark MLlib. Пакет sparkdl.xgboost устарел, так как Databricks Runtime 12.0 ML.

Записная книжка PySpark-XGBoost

Получить записную книжку