×Закрыть

Графические акселераторы для высокопроизводительных вычислений. Часть 1

Эта статья подготовлена на основе доклада Андрея Чередарчука и Александра Судакова на Root Linux Conference 2017 — ежегодной конференции embedded- и Linux-разработчиков.

Андрей Чередарчук — ИТ-инструктор и администратор. Сертифицированный инструктор учебных программ HP, IBM, VMware, ранее также и Cisco. Разрабатывает авторские учебные курсы. Занимается поддержкой HPC-инфраструктуры в НАН Украины.

Александр Судаков — глава лаборатории параллельных вычислений, доцент КНУ им. Тараса Шевченко. Одно из основных направлений его научной деятельности — высокопродуктивные вычислительные компьютерные системы. Александр является разработчиком и руководителем вычислительного кластера информационно-вычислительного центра КНУ им. Тараса Шевченко. Принимал участие в создании первых в Украине сайтов Grid-систем.


Графические адаптеры прошли длинный эволюционный путь от примитивного устройства, способного отображать 256 символов одним цветом, до практически независимого устройства со своим процессором, оперативной памятью, интерфейсами ввода/вывода информации. Усилиями массмедиа графический адаптер прочно связан с термином «майнинг». Но это далеко не единственное использование акселераторов. Распознавание образов, аэродинамическое моделирование, использование во встроенных системах — это неполный перечень технологий, где активно используются графические акселераторы. В этой публикации мы хотим рассказать об использовании графических акселераторов, или GPU, в промышленных высокопроизводительных системах.


Использование графического адаптера как вспомогательного вычислительного устройства началось довольно давно. Быстрая память, большое количество блоков, производящих математические операции, параллельная обработка данных — все эти свойства качественно изменили графический адаптер. Так был создан графический акселератор. Некоторые акселераторы пошли еще дальше и больше не являются «видеокартой» в общепринятом смысле слова, поскольку не содержат ни одного видеовыхода.

Задача данной статьи — рассмотреть основные характеристики современных акселераторов, а также привести примеры совместного использования центрального процессора (CPU) и графического акселератора (GPU). В дальнейшем будем рассматривать графический акселератор Nvidia. Он самый популярный для промышленных вычислений, хотя и не единственный.

Наиболее известный продукт для мощных вычислений — Nvidia Tesla. Строго говоря, Tesla — это название первого поколения вычислительных акселераторов. Именно тогда были заложены основные направления их развития. Каждое следующее поколение получило свое наименование в честь известных ученых — Tesla, Fermi, Kepler, Maxwell, Pascal, Volta. Каждое имя обозначает новые технологии, новые возможности. В этом году на рынок вышли изделия последнего поколения — Nvidia Volta.

Параметры выбора

Итак, мы выбираем графический акселератор для параллельных вычислений или машинного обучения. На что нужно обратить внимание? Параметр № 1 — computing capability или же SM version. Это набор функционала, который вы можете потом на этом акселераторе использовать. Информация о значении параметра для каждого адаптера указана на основном сайте компании Nvidia. Подробное описание возможностей можно найти на сайте Nvidia для разработчиков. Независимо от того, планируете ли вы использовать готовое решение или же разрабатывать свои программы с использованием стандартных библиотек — определите минимальное значение параметра и доступный класс устройств.

Параметр № 2 — не менее важный — это увеличение скорости работы и производительности в расчете на потребляемый ватт энергии. Стоимость электроэнергии — это один из самых важных пунктов затрат современного центра обработки данных. Все, что умеет компьютерное оборудование, — это потреблять электроэнергию и превращать ее в энергию тепловую, нагревая помещение дата-центра. Все остальное — только небольшой побочный эффект :)

CUDA

Давайте рассмотрим основные возможности адаптеров. Каждый акселератор поддерживает набор решений Nvidia CUDA. CUDA — набор инструментов для работы с акселератором, который позволяет писать программы, выполнять либо высокоуровневые, либо низкоуровневые запросы и обеспечивает API для работы с различными языками программирования. Программные CUDA от Nvidia поддерживают C/C++. Некоторые коммерческие компиляторы других производителей поддерживают Fortran. Существуют разработки инструментов для высокоуровневых языков, таких как Python. Также доступны средства для отладки и оптимизации. CUDA тоже меняется: в новых версиях больше функционала и возможностей, исправлены старые ошибки.

Streaming multiprocessor

Если мы посмотрим на общую схему графического акселератора, то увидим, что акселератор состоит из большого количества одинаковых блоков. Эти блоки называются streaming multiprocessor в более старой версии SM. В более новой версии — SMX, т. е. расширенный вариант. Они позволяют нам обрабатывать числа с одинарной или двойной точностью, использовать общую память, планировать выполнение инструкций во времени и распределять их между счетными блоками, а также передавать всю информацию наружу. Количество блоков зависит от модели графического акселератора и варьируется от сотни до нескольких тысяч: чем больше, тем лучше.

Точность

Каждый SMX-модуль содержит счетные блоки с разным уровнем точности: Floating point 16, FP 32, FP 64. В каждом акселераторе разное количество таких элементов. Что лучше? На самом деле тут нет единого ответа. Если вам не нужна максимальная точность, используйте точность поменьше. Почему? Это будет гораздо быстрее. Если вам нужно считать быстро, но не очень точно, самый правильный вариант — это использовать точность поменьше. Используйте максимальную точность вычислений только тогда, когда она вам действительно необходима. Для Tesla K40 производительность между FP 32 и FP 64 отличается почти в три раза.

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

Dynamic parallelism

Какие методы оптимизации доступны? Например, dynamic parallelism. Чтобы GPU работал более эффективно, необходимо дать ему больше свободы. GPU будет сам определять конкретные ядра для выполнения задач. Получаем более быстрое параллельное выполнение инструкций.

Nvidia Unified Virtual Memory

Следующий метод — Nvidia Unified Virtual Memory. Нам очень бы хотелось быстро и удобно обмениваться данными с нашим GPU. Как это сделать? Единый блок памяти, который одновременно доступен и центральному процессору, и нашему графическому акселератору. Метод используется не только для синхронизации данных между памятью акселератора и основной оперативной памятью, но также и для обмена данными между двумя акселераторами в одном сервере.

Оперативная память

Объем оперативной памяти — одно из узких мест графического акселератора. Небольшой объем платы, проблемы с отводом тепла не позволяют использовать десятки или сотни гигабайт памяти, как на обычном сервере. Но новый стандарт позволит увеличить объем ресурсов. Использование более плотной упаковки элементов памяти, не только на плоскости, но и в объеме, позволит увеличить и общий размер памяти, и скорость доступа, особенно при конкурентном доступе. Сегодня развиваются два стандарта — HBM и HMC, которые имеют один принцип работы, но несовместимую аппаратную реализацию. Nvidia Volta использует память стандарта HBM2.

Для более эффективного использования возможностей GPU применяется параллельный запуск нескольких задач. Параллельные задачи полезны не только для вычислений, но и для виртуализации. Когда мы передаем полное управление нашим GPU виртуальным машинам, то мы можем запускать на каждом из процессоров до 32 задач одновременно.

Tensor Core

Использование нейронных сетей для обработки данных снова в тренде. И новое поколение акселераторов Nvidia Volta использует новый аппаратный подход — Tensor Core, позволяющий на уровне железа выполнять задачи TensorFlow, Caffe2, MXNet. При этом обеспечивается как высокая скорость вычислений, так и низкое потребление энергии.

Современные чипсеты поддерживают больше одного GPU. Совместное использование шины PCI Express позволяет подключить до 10 адаптеров в одном сервере. Нужно учитывать, что пропускная способность шины гораздо меньше, чем нескольких адаптеров, поэтому задачи должны быть спроектированы так, чтобы минимизировать поток данных по каналах CPU-GPU и GPU-GPU.

NVLink

Технология NVLink увеличивает общую пропускную способность шины и поддерживает до 8 акселераторов на одну плату. Количество соединений NVLink позволяет создавать схему Full-Mesh или partial Mesh c минимальным количеством хопов между устройствами.

Какой выбрать

Мы рассмотрели основные возможности акселераторов. Но остался вопрос: что же приобрести для работы?

Вам нужно проверить работоспособность программы? Тогда достаточно обычной видеокарты с нужным значением computing capability. Нужно быстро классифицировать ближайшие объекты автомобильным компьютером? Тогда вполне устроит SoC-плата, например, NVidia Jetson TK1 (192 ядра CUDA, полная совместимость, довольно много памяти, гигабит Ethernet и даже PCI express порт) или TX1, где и ядер побольше и вычислительная мощность — один терафлопс.

Нужно считать очень много? Промышленное решение Nvidia Quadro — быстрое, компактное, дешевое, энергоэффективное. Ведущие серверные бренды предлагают готовые сервера с Quadro на борту.

А может у вас серьезный проект по deep learning с хорошим бюджетом? Nvidia предлагает уникальное решение: DGX-1. До 8 акселераторов, производительность одного DGX-1 для задач машинного обучения превышает производительность 48 узлов с двумя Intel Xeon.

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

LinkedIn

17 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Чуваки, спасибо за статью.
ПС. Это первая статья на ДОУ, за последние годы, которую прочитал от А до Я.

Sorry have no cyrillic keyboard.
Very good explanation short and clear.
If you have any metrics for VGG or GoogleNet or similar using Tensor Core,please share.
Also very interesting in using dynamic parallelism online with concurent processes on CPU.How to optimize payload balancing.

по балансування між GPU(s) і CPU буде в другій частині

Хорошая статья! Интересно было бы сравнить топовые gpu c mobile-gpu в ноутах и смартфонах в задачах ML. Я так понимаю скоро в каждом утюге будет распознование лица \ айдентити человека

Гуглом найдешь много инфы по этому поводу. И простейший инструмент, как OpenCV давно портирован и поддерживает GPGPU. По поводу GPGPU на мобилках надо смотреть.
Вообще сложности там 2:
1. Потребление энергии этими задачами.
2. Частоты мобильных CPU и GPU.
Но узнавание лица при нормальном освещении, приличной камере и позиции голову уже есть и в опенсурсе для мобилок. Поищешь, найдешь. Понятно оно хуже работает, чем для PC или чего помощнее.

Нужно быстро классифицировать ближайшие объекты автомобильным компьютером? Тогда вполне устроит SoC-плата, например, NVidia Jetson TK1 (192 ядра CUDA, полная совместимость, довольно много памяти, гигабит Ethernet и даже PCI express порт) или TX1, где и ядер побольше и вычислительная мощность — один терафлопс.

Большая просьба — не писать о том, в чём не разбираетесь. Зайди хотя бы на сайт nVidia:
www.nvidia.ca/object/drive-px.html

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

Дякую за статтю. Продовжуйте розвивати тему.
Старпери накшталт Віктора можут довго бурчати, але не всі займались програмуванням на С++ по 20+ років. Тому огляд архітектури і принципи розробки під GPU як по мені будуть досить корисними. Сподіваюсь в наступних статтях будуть розкриті проблеми і особливості використання даної технології на більш поглибленому рівні.
На доу не так багато статей технічного плану, тому краще так ніж оговорення сирів і де і з ким познайомитись.

я вважаю, що не варто було розділяти одну доповідь на дві публікації, але це вже вибір редакції

Если вам нужно считать быстро, но не очень точно, самый правильный вариант — это использовать точность поменьше.

Это не всегда так. Например на GeForce GTX 1080 FP16 специально работает в 128 раз медленнее, чем FP32, чтобы не подрывать продажи профессиональных карт Tesla. Так что надо смотреть на возможности железа.

мы сравнивали FP32 и FP64.
впрочем, интересный вопрос. надо проверить и FP16, хоть мы его и не используем

Ну и трэшак по рекламе NVIDIA.
А где AMD и Intel с opencl?
А где хоть слово о том, для каких задач GPU имеет смысл?
Или это реклама на биткомайнеров?

напишите об АМД и Ксеон Фи. я думаю, что охотно разместят. в данном случае использовали nvidia tesla + quadro, потому о них и написали.
публикация не для майнеров, а об HPC. о чем и написано в самом начале. во второй части будут и конкретные советы по портированию hpc приложений на GPU

Ответ в стиле сделай лучше? Критику не приемлем?
Вот если бы написали и про карточки от АМД и про весь дурдом GPU от АМД и Интела, особенно на уровне софта, я бы не критиковал так жестко.
Даже если бы рассказали кратко про разные архитектуры GPU, покритиковали и похвали какие и написали, что в следующей статье разберем софтовую часть, то критика бы не была столь жесткой. Упомянули бы про GPU от других производителей для тех же ARM архитектур. Вот это было бы прилично. Пока же получилось то, что получилось. А получилось очень плохо.

Честно, советую переработать статью и начать цикл заново. За это многие спасибо вам скажут тут.

Я не умею писать статьи и не люблю и не берусь поэтому.

«я не знаю, как надо, но вы делаете не так» © :)

мы не тестировали АМД и Интел, потому что у нас их не было. были изначальные проблемы с портированием софта. можете на досуге сравнить средства от интел и нвидиа.

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

по поводу спасибо — уже сказали :)

«я не знаю, как надо, но вы делаете не так» © :)

Мне поискать за тебя примеры приличных статей на эту тему? Спасибо, но не буду.

мы не тестировали АМД и Интел, потому что у нас их не было. были изначальные проблемы с портированием софта.

Тогда бы и писали о них, а не муть выше с кучкой несвязанных с текстом картинок. Это на местных недоконференциях привычно воды налить и ни слова по сути. Здесь же есть те, кто разбирается в теме или хочет узнать что новое.

Подписаться на комментарии