Пакет RAPIDS XGBoost4J-Spark уже доступен

Авторы: Энди Фенг, Томас Грейвс, Роберт Эванс, Джейсон Лоу, Гэри Шен

Хотя RAPIDS начинался с фокусировки на Python API, многие хотят ощутить такое же ускорение NVIDIA GPU в Apache Spark; на самом деле, у нас их много в NVIDIA. Когда RAPIDS впервые был запущен, у нас был план по ускорению Apache Spark, а также Dask, и мы хотим поделиться некоторыми основными достижениями, которых мы добились за последние пару месяцев. Apache Spark - ведущая платформа для работы с большими данными, и наша цель - сделать графические процессоры NVIDIA первоклассными. Кроме того, мы хотим дать сообществу возможность беспрепятственно выбирать ускоритель для обработки данных и машинного обучения на разных языках. С помощью графических процессоров пользователи могут использовать параллелизм данных за счет обработки столбцов вместо традиционного чтения на основе строк, изначально разработанного для процессоров.

Четыре достижения

Работая с лидерами отрасли в сообществе открытого исходного кода, чтобы заложить основу для нашего видения, мы имеем:

  • представил предложение (СПАРК-24615) и работал с лидерами отрасли над планированием с учетом GPU. Это позволит пользователям изначально планировать задания Apache Spark на графических процессорах и доступно в Apache Spark 3.0.
  • запущено поэтапное планирование ресурсов (СПАРК-27495).
  • внесло предложение по обработке столбцов (SPARK-27396), которое было одобрено, и мы работаем над внесением изменений в код, чтобы сделать эту функцию доступной в Apache Spark 3.0.
  • выпустила пакет RAPIDS XGBoost4J-Spark для сквозных конвейеров XGBoost с ускорением на GPU на Apache Spark. За прогрессом можно следить здесь. Это позволит:
  1. Пользователи XGBoost должны иметь встроенную поддержку RAPIDS cuDF. Вы можете следить за прогрессом в этой работе здесь.
  2. Изоляция и назначение графических процессоров в мультитенантном кластере графических процессоров. Это было отправлено в библиотеку DMLC XGBoost здесь
  3. Поддержка внешней памяти в будущем для обучения XGBoost на графических процессорах. Следите за нашим прогрессом здесь.

Как всегда, наша цель - разместить эти модификации в соответствующих библиотеках. Наша цель - навести больше мостов и внести свой вклад в стандарты в экосистеме больших данных.

Почему мы начали с XGBoost?

XGBoost - это популярная библиотека повышения градиента, которая быстро и точно решает многие проблемы науки о данных. XGBoost4J-Spark - это ведущий механизм, позволяющий предприятиям проводить обучение и делать выводы распределенному машинному обучению. XGBoost4J-Spark позволяет XGBoost обучать и выводить данные на Apache Spark между узлами.

Что в выпуске?

Мы рады выпустить RAPIDS XGBoost4J-Spark для ускорения сквозных конвейеров XGBoost на Apache Spark. С помощью изменения кода в одну строку существующее приложение Spark XGBoost сможет использовать графические процессоры для загрузки данных Spark, преобразования данных XGBoost, а также обучения и вывода модели.

Созданный на основе новейшего кода DMLC XGBoost, RAPIDS XGBoost4J-Spark внесет в проект следующие улучшения производительности:

  1. Включите кластеры Apache Spark 2.x (YARN, Kubernetes, Standalone) для выполнения сквозных задач XGBoost на графических процессорах. Это ранний доступ к нашему планировщику с поддержкой графического процессора. Вы можете следить за нашим прогрессом здесь.
  2. Загружайте наборы данных из различных источников (HDFS, облачное хранилище) в RAPIDS cuDF DataFrame с помощью нашего API-интерфейса чтения Apache Spark с ускорением на GPU. Это краткий обзор нашей колоночной обработки SPIP.
  3. Преобразуйте RAPIDS cuDF DataFrame непосредственно в собственный DMatrix XGBoost для обучения и вывода на основе графического процессора.

Этот выпуск RAPIDS Spark XGBoost обеспечивает ранний доступ ученых и инженеров по данным и позволяет нам собирать ценные отзывы сообщества. Со временем все эти улучшения будут объединены в проекты Apache Spark и DMLC XGBoost. Мы рады, что усовершенствование планировщика с поддержкой графического процессора было принято и объединено с репозиторием Apache Spark для выпуска Apache Spark 3.0. Поддержка фреймов данных GPU добавляется через предложение Spark здесь.

Тестирование RAPIDS XGBoost4J-Spark:

XGBoost имеет встроенную поддержку для работы с несколькими графическими процессорами, что может обеспечить еще более значительные улучшения. Мы видим 8-кратное улучшение производительности при тестировании XGBoost на графических процессорах, сравнивая 2 графических процессора NVIDIA T4 с 50 виртуальными ЦП с 300 ГБ ОЗУ в кластере Yarn. Мы используем программу чтения cuDF RAPIDS для загрузки данных CSV в каталог памяти GPU. Затем мы выполняем преобразование с нулевым копированием в памяти графического процессора из кадра данных cuDF в формат D-матрицы. Это исключает передачу памяти хоста в память графического процессора. Наконец, мы обучаем модель XGBoost на GPU.

Как загрузить и использовать распределенный XGBoost4J?

Прежде чем начать, ознакомьтесь с нашим списком предварительных условий для использования пакета XGBoost4J-Spark в графическом процессоре.

Требования к оборудованию

  • Архитектура графического процессора NVIDIA Pascal ™ или лучше
  • Многоузловые кластеры с однородной конфигурацией графического процессора

Требования к программному обеспечению

  • Ubuntu 16.04 / Ubuntu 18.04 / CentOS 7
  • Драйвер NVIDIA 410.48+
  • CUDA 9.2 / 10.0
  • NCCL 2.4.7
  • Spark 2.3.x / 2.4.x

Начните использовать распределенное обучение в памяти между несколькими узлами и несколькими графическими процессорами с использованием популярных фреймворков кластерных менеджеров на Spark, таких как YARN, Kubernetes и Standalone; инструкции см. В ссылках на документацию ниже.

Мы сделали артефакты XGBoost с ускорением на GPU доступными в публичном репозитории maven. Вам просто нужно добавить следующую зависимость в свой pom.xml. Классификатор позволяет вам выбрать JAR в зависимости от вашей ОС и версии NVIDIA CUDA.

<dependency>
    <groupId>ai.rapids</groupId>
    <artifactId>xgboost4j-spark</artifactId>
    <version>${xgboost.version}</version>
    <classifier>${xgbClassifier}</classifier>
</dependency>

Чтобы увидеть, как XGBoost интегрируется с cuDF и Apache Spark, ознакомьтесь с этими примерами приложений и записными книжками. Пример ипотеки применяет данные Fannie Mae для прогнозирования просрочек по ипотеке (проблема классификации). Следуйте нашим инструкциям readme, чтобы создать образцы приложений Spark XGBoost с помощью spark-submit или интерактивных записных книжек.

Оставьте нам свой отзыв:

Учитывая, что это бета-версия, пожалуйста, помогите нам, предоставив отзывы о том, что вам нравится и что вы хотите видеть в будущих выпусках, чтобы мы могли соответствующим образом скорректировать нашу дорожную карту. Отправляйте вопросы и присоединяйтесь к разговору!