Больше скорости, масштабируемости и надежности

Поскольку 2019 год подходит к концу, команда RAPIDS не могла закончить год без последнего релиза. Выпуск 0.11 не только готовит нас к 2020 году, но и следует теме предыдущих выпусков, делая сквозную обработку данных на графических процессорах более быстрой, надежной и масштабируемой. Учитывая, что это последний блог в году, я бы обычно делал резюме, но Юбилейный блог 0.10 и Благодарственный блог с благодарностью уже сделали это. Итак, давайте просто увеличим громкость и погрузимся в музыку.

Основные обновления RAPIDS:

cuDF

В основе cuDF лежит библиотека C ++ libcudf. Он обеспечивает ускоренные CUDA реализации C ++ всех операций с фреймами данных, которые поддерживает cuDF, и обслуживает несколько клиентов, включая cuDF Python API, Java / JNI API, а также прямых пользователей его C ++ API, таких как BlazingSQL. Эти многочисленные клиенты предъявляют различные требования к libcudf, и до версии 0.11 основные структуры данных libcudf затрудняли расширение функциональности для удовлетворения требований. Основная структура gdf_column страдала от нескольких проблем:

  • gdf_column была структурой «простых данных» (POD) без абстракции.
  • Иногда память выделялась вне библиотеки (например, Numba) и присваивалась gdf_column, а иногда выделялась внутри библиотеки.
  • Владение и время жизни указателей памяти, назначенных gdf_column, не были четко определены.
  • API libcudf обычно принимали выходные данные gdf_column в качестве параметров и отвечали за выделение памяти, но вызывающая сторона отвечала за время жизни столбца и освобождение его памяти.
  • gdf_column поддерживаются только плоские столбцы данных фиксированной ширины.
  • Для поддержки строковых данных требуется отдельная библиотека nvstrings.

Решение этих проблем было основной задачей команды libcudf в выпусках 0.10–0.12. Внутри компании мы назвали усилия «Великим портом libcudf ++», чтобы отразить модернизацию библиотеки на C ++. Начиная с версии 0.10, мы ввели новые основные структуры данных столбцов и таблиц, чтобы заменить gdf_column, а 0.11 сосредоточился на переносе всех алгоритмов cuDF для их использования (часть этой работы продолжается в 0.12). Для выполнения этой работы команда libcudf расширила и заимствовала инженеров из других команд RAPIDS для помощи. По нашим оценкам, эта расширенная команда завершила более двух лет инженерной работы примерно за два месяца. cuDF 0.11 включает 3199 коммитов, которые вместе добавили, удалили или изменили почти 100 000 строк кода.

«Libcudf ++» - это большие инвестиции и много работы, но мы уже пожинаем плоды. Новая структура cudf::column является иерархической, что означает, что столбцы могут иметь дочерние столбцы. Это позволило добавить новый тип столбца «собственные строки», который поддерживается всей библиотекой. В будущих выпусках он также будет поддерживать множество важных типов данных, включая столбцы словаря, десятичные столбцы с фиксированной запятой и столбцы списков и структурированных данных.

Не менее важно то, что новые классы cudf::column и cudf::table обеспечивают чистую абстракцию C ++, четко отделяя столбцы, владеющие памятью, от column_views данных, не владеющих column_device_views, и column_device_views, которые могут быть переданы непосредственно в функции ядра CUDA. Эти абстракции упрощают создание, тестирование и поддержку новых алгоритмов. Libcudf теперь готов развиваться в будущем и поддерживать потребности множества клиентов.

Следуя примеру libcudf, разработчики cuDF Python приложили немало усилий в выпуске 0.11 для рефакторинга, который будет реализован в версии 0.12. Но есть еще ряд интересных новых функций, в том числе:

  • писатель ORC,
  • inplace поддержка drop и reset_index,
  • Приведение типов на уровне DataFrame,
  • построчные операции сокращения и сканирования,
  • групповое стандартное отклонение,
  • Ковариация и корреляция DataFrame,
  • более тесная интеграция с CuPy,
  • больше поддержки MultiIndex и
  • многочисленные оптимизации и исправления ошибок в библиотеке.

cuML

Команда cuML фокусируется на трех основных темах:

  1. поддержка алгоритмов горизонтального масштабирования,
  2. улучшение древовидных моделей и
  3. самые популярные новые модели, запрошенные пользователями.

Чтобы позволить пользователям масштабироваться до больших размеров данных, cuML расширяет свою поддержку горизонтально масштабируемых алгоритмов с несколькими узлами / несколькими графическими процессорами (MNMG), начиная с cuML 0.9. Вы можете узнать больше о более ранних алгоритмах в наших сообщениях блога K-Means и Random Forests. В версии 0.11 добавлены два новых алгоритма уменьшения размерности MNMG - Анализ главных компонентов (PCA) и Разложение по усеченному сингулярному значению (tSVD). Следите за обновлениями алгоритмов MNMG в следующих выпусках, в ближайшее время появятся модели K-ближайших соседей и линейной регрессии. Все эти алгоритмы основаны на общей инфраструктуре cuML MNMG, в основе которой лежат высокопроизводительные коммуникации NCCL и UCX, позволяющие осуществлять прямую передачу данных от графического процессора к графическому процессору.

Специалисты по обработке данных проводят дни в ожидании обучения моделей на основе деревьев, включая случайные леса и деревья решений с градиентным усилением. Таким образом, cuML продолжает улучшать свои древовидные модели с каждым выпуском. Библиотека логических выводов леса (FIL) теперь поддерживает хранилище разреженных деревьев, поэтому даже очень глубокие деревья могут поместиться в ОЗУ графического процессора. FIL может импортировать обученные модели из модуля RandomForest scikit-learn, а также из XGBoost, cuML и LightGB. Собственные модели случайного леса cuML теперь можно сохранить с помощью стандартной обработки Python, что значительно упрощает их развертывание.

Вдохновленный запросами пользователей, cuML расширяет свои функции временных рядов с помощью первого экспериментального выпуска моделей ARIMA (авторегрессивная интегрированная скользящая средняя). ARIMA - один из самых популярных методов моделирования и прогнозирования временных рядов, и теперь cuML может использовать его для параллельной обработки тысяч временных рядов. В следующих выпусках будет добавлена ​​поддержка сезонности в ARIMA, а также улучшена производительность и точность.

КУГРАФ

Во время выпуска 0.11 cuGraph предпринял серьезные усилия по переработке и рефакторингу, которые завершатся выпуском 0.12. Редизайн включает добавление нового класса Graph для захвата типа графика: Направленный (DiGraph) или Ненаправленный (График). В версии 0.12 этот класс расширен и включает мультиграф (как направленный, так и неориентированный) и двудольные графы. Текущий набор алгоритмов графа подвергается рефакторингу, чтобы использовать новые типы графов и выдавать полезные ошибки, если используется недопустимый тип графа (например, слабо связанные компоненты принимают только DiGraph). Обработка ошибок теперь выдает исключения, а не флаг состояния. Текст каждого сообщения об ошибке в настоящее время обновляется, чтобы обеспечить лучшую индикацию и помочь пользователю диагностировать проблему. Наконец, cuGraph 0.11 включает низкоуровневую очистку, которая упростит добавление аналитики в будущем.

Обновления сообщества RAPIDS:

UCX

Поскольку RAPIDS продолжает снижать затраты на вычисления, коммуникация становится серьезным узким местом. Чтобы решить эту проблему, RAPIDS работает с библиотекой UCX для высокопроизводительных сетей, используя такие технологии, как Infiniband и NVIDIA NVLink, и подключая ее к Python. Это критически важно для ускорения работы нескольких графических процессоров на одной машине или нескольких машинах в кластере.

Бета-версия UCX-Py доступна через conda или RAPIDS Nightlies. Пользователи могут легко установить UCX / UCX-Py с помощью:

conda:

conda install -c rapidsai ucx-py=0.11 cudatoolkit=<CUDA version> ucx-proc=*=gpu ucx

Или ночные сборки:

conda install -c rapidsai-nightly ucx-py cudatoolkit=<CUDA version> ucx-proc=*=gpu ucx

Несмотря на то, что UCX-Py функционален, предстоит проделать большую работу по тестированию и оптимизации производительности. Ниже приведен текущий тест, сравнивающий TCP и UCX-Py при вычислении распределенного соединения со случайными данными между несколькими графическими процессорами с использованием cuDF и Dask.

UCX-Py работает в 14–42 раза быстрее, чем TCP. В 2020 году будет добавлено больше функций (и, конечно же, исправления любых возможных ошибок), и UCX-Py в конечном итоге будет передан основной группе UCX.

Даск

Версия 0.11 включает улучшения Dask-cudf с функциями чтения / записи файлов ORC и переключение с пользовательских алгоритмов слияния / объединения на ядро ​​Dask для слияний и объединений. Dask-cudf также предоставил dropna возможности для групповых операций и включил вызовы ковариации / корреляции. Чтение паркетов улучшилось, а ядро ​​Dask имеет внутрифайловый параллелизм с использованием групп строк, которые доступны Dask-cudf. В Dask улучшены инструменты для создания панелей мониторинга и профилирования, включая новые конечные точки для измерения пропускной способности для каждого типа данных и для каждого рабочего. Эти информационные панели легко записываются и передаются коллегам с помощью нового контекстного менеджера perfomance_report.

Облачный провайдер Dask

Новое пополнение в семействе Dask - Dask Cloud Provider. Эта библиотека дает пользователям возможность уверенно создавать кластеры Dask в различных службах облачных провайдеров, используя знакомые API Dask. Цель состоит в том, чтобы пользователи могли создать кластер Dask в облачной службе из своего сеанса Python без необходимости заранее настраивать вычислительную платформу.

Первый выпуск включает менеджеры кластеров для AWS Elastic Container Service (ECS) и AWS Fargate. Вы можете приступить к работе с RAPIDS на кластере ECS с графическим процессором, используя всего несколько строк Python.

из dask_cloudprovider импортировать ECSCluster

cluster = ECSCluster(cluster_arn=”arn:aws:ecs:<region>:<acctid>:cluster/<gpuclustername>”, worker_gpu=1)

Дорожная карта включает добавление дополнительных служб облачных провайдеров, каждая из которых использует собственный API-интерфейс облачного провайдера.

Чтобы получить более подробное представление об использовании менеджеров кластеров ECS и Fargate, а также увидеть пример того, как это используется в Capital One, см. Это недавнее сообщение в блоге.

CLX и cyBERT

Если вы работаете в сфере кибербезопасности, у RAPIDS теперь есть репозиторий, содержащий методы, относящиеся к кибербезопасности, примеры записных книжек и варианты использования. Cyber ​​Log Accelerators (CLX, произносится как клики) содержит готовые сценарии использования, демонстрирующие функциональность RAPIDS, специально созданную для аналитиков безопасности и специалистов по информационным технологиям, компоненты интеграции с SIEM, оболочки ввода-вывода и рабочих процессов, а также ускоренные примитивные операции. для типов данных IPv4 и DNS. Предварительно созданные сценарии использования включают отображение сети, анализ предупреждений и обнаружение DGA. Одним из наиболее интересных компонентов CLX является cyBERT, продолжающийся эксперимент по обучению и оптимизации трансформаторных сетей для задачи гибкого и надежного анализа журналов разнородных данных о кибербезопасности. Используя обученную модель BERT для распознавания именованных сущностей, cyBERT демонстрирует, что можно извлекать высококачественные проанализированные значения из необработанных журналов кибербезопасности, даже с невидимыми форматами журналов и ухудшенным качеством журналов. Для более полного введения обратитесь к сообщениям блогов CLX и cyBERT.

Datashader

Команда RAPIDS viz тесно сотрудничает с фантастической командой Holoviz Datashader над разработкой версии своей библиотеки с ускорением на GPU. Прототипирование было выполнено в рамках нашего проекта cuDatashader, и теперь только что выпущена версия с собственным ускорением cuDF и GPU с Datashader 0.9.0. Для рендеринга 100 миллионов точек это в 40 раз быстрее, чем одноядерный Pandas и в 4,5 раза быстрее, чем многоядерный Dask.

NVDashboard

Мониторинг использования графического процессора, потребления памяти и машинных ресурсов достаточно сложен, усложняет отслеживание только в том случае, если вы используете NVLink вместо PCIe и следите за своей пропускной способностью. Команда RAPIDS значительно упростила это с помощью NVDashboard. NVDashboard, построенный на PyNVML (Python API для библиотеки управления NVIDIA, NVML), позволяет пользователям графически отслеживать системные показатели, полностью интегрированные в ваш ноутбук. Это не ограничивается рабочими процессами RAPIDS. Не стесняйтесь использовать его с любой библиотекой графического процессора, включая глубокое обучение, в Jupyter Notebook.

BlazingSQL

В выпуске RAPIDS v0.11 команда BlazingSQL (BSQL) внесла массу новых изменений в свой последний стабильный выпуск, включая новый логотип!

BSQL извлекает выгоду из всех новых функций cuDF, а также начинает работу по рефакторингу в сторону нового libcudf C ++ API, который также будет реализован в версии 0.12. Чтобы избежать путаницы, BlazingSQL принимает номера версий RAPIDS, поэтому последняя версия BSQL также v0.11 (без v0.5–0.10). Эта последняя версия имеет множество новых функций, включая новую архитектуру, улучшающую стабильность и производительность, новые инструменты ведения журнала, возможность интеграции с Hive metastore, а также множество исправлений ошибок и оптимизаций.

Исчезнуть до черного

Как всегда, мы хотим поблагодарить всех вас за использование RAPIDS и за вклад в нашу постоянно растущую экосистему с ускорением на GPU. Пожалуйста, ознакомьтесь с нашей последней колодой релизов или присоединитесь к беседе на Slack или GitHub. Команда RAPIDS берет необходимое время на праздники, но мы ответим на ваши проблемы, запросы функций или вопросы в кратчайшие сроки в новом году. Будущее будет продолжать улучшаться, и 0.12 уже готовится стать еще одним впечатляющим выпуском. RAPIDS будет иметь больше многоузловых алгоритмов с несколькими GPU, будет завершен рефакторинг cuDF / cuGraph и многое другое. Увидимся в 2020 году и с нетерпением ждем еще одного года скорости, масштаба и эффективности… и веселья.