Поиск по сайту Поиск

Как ускорить Data Science с помощью GPU

Аналитикам данных нужны вычислительные мощности. Обрабатываете ли вы большой датасет в Pandas или перемножаете множество матриц с Numpy — вам понадобится производительная машина, чтобы выполнить работу в разумные сроки. В этой статье мы наглядно покажем, как с помощью GPU можно ускорить обработку данных в десятки раз.

За последние несколько лет библиотеки Python, предназначенные для Data Science, довольно хорошо научились использовать возможности CPU. Например, Pandas отлично справляется с обработкой наборов данных, размер которых превышает 100 ГБ. А если у вашей машины недостаточно ОЗУ, вы всегда можете использовать удобные функции, разбивающие данные на небольшие пакеты и обрабатывающие по одному фрагменту за раз.

GPU vs CPU: параллельная обработка

CPU лучше справляются с процессами, где большую роль играет тактовая частота. Также стоит использовать его в задачах, которые нельзя реализовать на GPU. В свою очередь, графический процессор гораздо эффективнее выполняет программы, выигрывающие от параллельной обработки.

Иллюстрация того, как многоядерная система обрабатывает данные. Для одноядерной системы (слева) все 10 задач отправляются на одно ядро. Для двухъядерной системы (справа) каждое ядро выполняет 5 задач, что удваивает скорость обработки.

Большое влияние GPU оказывают на Deep Learning. Повторяющиеся вычисления, например, свёртку, можно ускорить с их помощью до 100 раз.

В Data Science тоже присутствуют многократно выполняемые операции, которые обрабатывают большие наборы данных с помощью таких библиотек как Pandas, Numpy и Scikit-Learn. На GPU выполнять эти операции достаточно просто.

Ускорение GPU с Rapids

Rapids — набор программных библиотек, предназначенных для ускорения Data Science за счет использования графических процессоров. Он генерирует низкоуровневый код CUDA для быстрого выполнения алгоритмов, оптимизированных на GPU, и в то же время имеет простую реализацию на Python.

Преимущество Rapids в том, что он хорошо интегрируется в библиотеки Data Science. Например, Pandas dataframe можно легко передать в Rapids и ускорить обработку на GPU. На рисунке ниже показано, как Rapids делает доступным низкоуровневое ускорение, сохраняя при этом высокоуровневую реализацию.

Rapids использует несколько Python-библиотек:

cuDF: dataframes для GPU. Поддерживает практически те же способы обработки данных, что и Pandas.

CuML: библиотека для машинного обучения. Содержит множество алгоритмов ML, которые есть в Scikit-Learn.

cuGraph: обработка графов на GPU. Поддерживает много основных алгоритмов анализа графов, включая PageRank.

Гайд по использованию Rapids

Установка

Теперь вы увидите Rapids в действии!

В качестве примера мы запустим простой код на сервере с GPU NVIDIA Tesla V100.

Для демонстрации мы решили запустить код на двух GPU NVIDIA Tesla V100 и сравнить время выполнения с Nvidia Data Science Work Station, которая работает на двух GPU NVIDIA Quadro RTX 8000.

Чтобы загрузить и запустить образ с Rapids и всем необходимым ПО, мы использовали следующие команды. В этом примере мы выбрали конфигурацию с Ubuntu 18.04, CUDA 10.0 и Python 3.7. Вы можете поменять версии и скопировать команды для установки на сайте Rapids.

Заходим в директорию utils и запускаем JupyterLab:

Переходим в JupyterLab.

Настройка данных

В этом примере мы рассмотрим модифицированную версию DBSCAN demo. DBSCAN - это алгоритм кластеризации, который может автоматически разбивать данные на группы без указания числа кластеров. Похожая реализация есть в Scikit-Learn.

Начнём с импортирования необходимых библиотек:

Функция make_circles создаст сложное распределение данных, напоминающее две окружности.

Зададим набор данных из 100 000 точек и отобразим его в виде графика:

DBSCAN на CPU

Запустить DBSCAN на CPU можно с помощью Scikit-Learn. Импортируем его и настроим некоторые аргументы:

Теперь можем применить DBSCAN к нашим круговым данным. Параметр %%time перед функцией позволит Jupyter Notebook измерить время ее выполнения:

Для 100 000 точек время выполнения на CPU составило 10.3 секунды. Получившиеся кластеры выглядят так:

DBSCAN с Rapids на GPU

А теперь пришло время ускориться! 

Конвертируем наши данные в pandas.DataFrame и используем их для создания cudf.DataFrame. Это делается всего двумя командами:

Затем импортируем и инициализируем версию DBSCAN из cuML для ускорения на GPU. Формат и параметры функции cuML-версии DBSCAN такие же, как и в Scikit-Learn.

Наконец, запустим функцию прогнозирования для DBSCAN GPU и измерим время выполнения.

Время выполнения на двух NVIDIA Tesla V100 снизилось до 814 миллисекунд! По сравнению с CPU ускорение получается 12-кратным, но чаще всего код таких программ не оптимизирован для выполнения на CPU. Поэтому сравним производительность с двумя GPU NVIDIA Quadro RTX 8000: они показывают результат в 4.22 секунды. Процессоры Tesla V100 по сравнению с Quadro RTX 8000 достигли ускорения в 5 раз.

Результаты 2x NVIDIA Tesla V100

Суперускорение с Rapids!

Степень ускорения, которую мы получаем с Rapids, зависит от количества обрабатываемых данных. Однако существует дополнительная задержка, связанная с передачей данных между CPU и GPU. Она становится менее существенной, когда мы обрабатываем большие датасеты. 

Разберёмся на простом примере.

Создадим массив случайных чисел Numpy и применим к нему DBSCAN. При этом сравним скорость выполнения, увеличивая и уменьшая количество точек данных. Так мы увидим, как объем данных влияет на степень ускорения.

Пример кода для набора данных размером 10000х100 точек:

В примере датасет состоит из миллиона точек. На рисунке вы можете увидеть, что его обработка на GPU Tesla выполняется за 142 миллисекунды, а на CPU — 18.3 секунды. Quadro RTX справляется с той же задачей примерно за 1.5 секунды (оценка сделана по графику из статьи с помощью сравнения скоростей CPU), то есть Tesla оказалась быстрее неё почти в 11 раз.

Таким образом, с увеличением размера данных до определённой степени растёт и ускорение, получаемое с GPU.

⌘⌘⌘

Теперь вы знаете, какую высокую скорость обработки данных можно получить с мощными GPU. Для дальнейшего погружения в Data Science рекомендуем ознакомиться с книгой Python для сложных задач: наука о данных и машинное обучение (перевод книги Python Data Science Handbook). 

С оригинальной статьёй и результатами работы программ на GPU NVIDIA Quadro RTX 8000 можно ознакомиться на сайте towardsdatascience.com.

Как запустить сеть придорожных кафе с АЗС на Севере

Запускать бизнес в регионе — значит столкнуться со слабым сервисом у поставщиков и подрядчиков, бороться за каждого квалифицированного сотрудника. Заниматься...
Read More

Собственный магазин или маркетплейс: где выгоднее продавать?

58% всех интернет-заказов в 2023 году совершили на маркетплейсах.  Популярность маркетплейсов активно растет. При этом рост количества продавцов снижается: в...
Read More

SEO для бизнеса: поисковики — тоже реклама

Что такое SEO-оптимизация, как она приносит выгоду собственному бизнесу и как ее настроить — в блоге Рег.ру
Read More

Какие показатели нужно отслеживать новому бизнесу? 10 главных метрик

Полный список финансовых показателей, которые нужно учитывать при запуске и развитии бизнеса. С формулами, комментариями и понятными примерами расчета. (далее…)
Read More

Драма Microsoft и Apple: от вражды до сотрудничества

Техногиганты всё время своего существования судились, обменивались колкостями и пытались обогнать друг друга по уровню новаторства в разработках. Наши коллеги...
Read More

Как компании меняли свой бренд из-за испорченной репутации: три кейса

В бизнесе нет страховки от ошибок — любой промах отражается на репутации. И иногда исправить ситуацию может только ребрендинг и...
Read More

Запускаем email-рассылку: как не попасть в спам при отправке писем

В статье рассказываем, почему рассылки попадают в спам, и делимся советами, как сделать так, чтобы письма всегда доставлялись до адресатов....
Read More

Ключ к успешному продвижению: что такое SMM-стратегия и как ее составить

Разберем, что такое SMM-стратегия, зачем она нужна и как эффективно использовать социальные сети для решения бизнес-задач. (далее…)
Read More

Новогодний маркетинг: лучшие приемы праздничной рекламы

Для бизнеса Новый год и Рождество — время всплеска продаж и увеличения прибыли. А способствуют этому всем знакомые персонажи: от...
Read More

Россияне предпочитают .ru вместо .com, а Дональд Трамп проиграл доменный спор за mar-a-lago.com

Рассказываем самые интересные новости доменного мира. (далее…)
Read More