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

Как ускорить 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.

1. Войдите в личный кабинет на сайте REG.RU и выберите услугу Облачные серверы. В открывшемся окне кликните на Добавить GPU. Выберите образ с Ubuntu 18.04 и тариф.

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

2. Зайдите на сервер, используя соединение по SSH с параметром -L и туннелированием. Это позволит в дальнейшем подключиться к JupyterLab через браузер на вашем компьютере:

Где 123.123.123.123 — IP сервера.

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

4. Зайдите в директорию utils и запустите JupyterLab:

5. Теперь в адресной строке браузера введите localhost:8000/lab?. Должно открыться окно 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.

6 трендовых доменных зон для онлайн-бизнеса

6 трендовых доменных зон для онлайн-бизнеса

Первое знакомство клиента с организацией сегодня чаще всего происходит через всемирную паутину. Чем ярче проект — тем больше шансы выделиться...
Read More
Обучаем виртуального дракона фигурам высшего пилотажа

Обучаем виртуального дракона фигурам высшего пилотажа

В наши дни компьютерная графика присутствует во всех популярных видах визуального контента: от видеороликов YouTube-блогеров до полнометражных фильмов. Но проработка...
Read More
Стэнфордский курс: лекция 9. Архитектуры CNN

Стэнфордский курс: лекция 9. Архитектуры CNN

На прошлом уроке мы узнали о наиболее популярных библиотеках и фреймворках для глубокого обучения, рассмотрели их особенности и области применения....
Read More
GPT-2: нейросеть, которая закончит за вас предложение

GPT-2: нейросеть, которая закончит за вас предложение

Встречали ли вы когда-нибудь собеседника, который после нескольких сказанных вами слов заканчивал за вас предложение? GPT-2 умеет и не такое:...
Read More
Жуткие сайты, которые вызовут у вас мурашки

Жуткие сайты, которые вызовут у вас мурашки

Интернет может не только развлекать вас новыми мемами и видеороликами, но и быть по-настоящему пугающим. В честь Хэллоуина представляем несколько...
Read More
10 ингредиентов надёжной инфраструктуры хостинга REG.RU

10 ингредиентов надёжной инфраструктуры хостинга REG.RU

Привет! На связи редакция блога. И сегодня мы расскажем в деталях об одной из сторон инфраструктуры REG.RU, объясним как работает...
Read More
Голосовой помощник Apple, которому можно доверять

Голосовой помощник Apple, которому можно доверять

Мы гораздо больше доверяем тем людям, общаться с которыми нам легко и приятно. Обычно так происходит, когда их стиль и...
Read More
Как организовать техническую поддержку пользователей

Как организовать техническую поддержку пользователей

Быстрая техподдержка очень важна для клиентов, особенно в критических ситуациях. От скорости и качества решения проблемы зависит лояльность пользователя и...
Read More
Роботы в облаках: совмещение ROS и Jupyter

Роботы в облаках: совмещение ROS и Jupyter

Робототехника — одна из самых популярных и прогрессивно развивающихся отраслей. Ролики Boston Dynamics на YouTube собирают миллионы просмотров. Если вы...
Read More
Стэнфордский курс: лекция 8. ПО для глубокого обучения

Стэнфордский курс: лекция 8. ПО для глубокого обучения

В предыдущих главах мы познакомились с основами обучения нейросетей и выяснили, чему при этом стоит уделять больше внимания. Сегодня вы...
Read More