Я всегда был энтузиастом игр, а теперь я Data Scientist. На этой неделе мне было любопытно, как GPU зарекомендовал себя в пространстве глубокого обучения и как GPU играет решающую роль в глубоком обучении больше, чем когда-либо с начала этого десятилетия. Но почему? Как процессор, предназначенный только для рендеринга графики, вдруг стал благом для инженеров и исследователей глубокого обучения? Давайте посмотрим на его путешествие.

GPU и его сложная связь с CPU

Википедия определяет GPU как:

Графический процессор (GPU) — это специализированная электронная схема, предназначенная для быстрого манипулирования и изменения памяти для ускорения создания изображений в буфере кадров. » предназначен для вывода на устройство отображения.

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

  1. Обработка вершин: вычисление геометрии сцены относительно камеры.
  2. Обработка примитивов: сбор выходных данных обработки вершин и объединение их в простые примитивы (например, линии, точки или треугольники).
  3. Растеризация: каждый примитив разбивается на отдельные элементы, называемые фрагментами.
  4. Генерация фрагментов: здесь фрагментный шейдер перечисляет цвета, предоставляет значение глубины и значение трафарета для фрагментов.
  5. Генерация пикселей: здесь буфер состоит из генерации пикселей.

Все эти операции с шага 1 по 4 требуют массивных векторных операций. В то время как ЦП и ГП выполняют аналогичные функции в своих соответствующих АЛУ (арифметико-логическое устройство), ЦП намного медленнее с его большим пулом ОЗУ по сравнению с ГП, который содержит меньший объем более дорогой памяти, доступ к которой намного быстрее. Перенос частей набора данных в память графического процессора приводит к увеличению скорости. Следовательно, данные в правильном формате в виде 2D- и 3D-данных передаются в память графического процессора для выполнения операций. Еще одним большим преимуществом современных графических процессоров является их многоядерная и многопоточная архитектура по сравнению с несколькими ядрами процессоров и большей кэш-памятью. Платформа параллельной обработки с несколькими ядрами, а также быстрыми и небольшими кэшами — веская причина использовать GPU для работы с интенсивными данными.

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

GPGPU в мейнстриме

Вычисления общего назначения на графических процессорах (GPGPU) используют преимущества графических процессоров для выполнения вычислений, которые обычно выполняются центральными процессорами. Научное сообщество работает над тем, чтобы использовать графические процессоры для научных вычислений. Но большая революция произошла, когда NVidia представила CUDA, которая позволила разработчикам выполнять интенсивные вычислительные задачи на графическом процессоре, не беспокоясь о графической обработке. Позже за CUDA последовали DirectCompute от Microsoft и более общий OpenCL от Apple/Khronos Group. Это позволило разработчикам и исследователям использовать базовую вычислительную мощность GPU в конце 2000-х годов.

Графический процессор оптимизирован для высокой вычислительной мощности и высокой пропускной способности. Оба необходимы для обработки графики. Основным строительным блоком графического процессора является потоковый мультипроцессор (SM). SM состоят из множества ALU, также называемых ядрами CUDA в графических процессорах NVidia. Каждый SM может запускать один варп (пакет из 32 потоков) за раз. Каждый поток в варпе выполняет одну и ту же операцию. NVidia называет эту модель многопоточными потоками с одной инструкцией (SIMT), при этом каждый поток может получить доступ к ячейке памяти со своим собственным идентификатором потока.

Кроме того, модель выполнения GPU можно описать как модель Bulk Synchronous Parallel (BSP). Важная часть анализа алгоритма BSP основывается на количественной оценке необходимой синхронизации и связи при вызове большего количества потоков, чем ресурсов, доступных для преодоления параллельной простои.

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

  • Симулятор ньютоновской физики
  • Трассировка лучей
  • Статистическая физика
  • Цифровая обработка сигналов
  • Нечеткая логика
  • kNN
  • Моделирование погоды и прогнозирование
  • Криптография и криптоанализ
  • Проверка блокчейна

Глубокое обучение с графическими процессорами

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

Tensorflow, Theano и CNTK будут продолжать улучшать пользовательский интерфейс, позволяя им выполнять тензорные/векторные операции через графические процессоры, не беспокоясь об их основных принципах. А такие библиотеки, как keras, pytorch, H2O и gensim, значительно облегчают жизнь инженерам для более быстрого внедрения.

В среднем существует почти сотни тысяч параметров и весов, которые необходимо рассчитать при обучении стандартных нейронных сетей в отрасли, что, как вы видите, является не чем иным, как гигантской задачей. Для сравнения, NVidia попыталась воспроизвести многомиллионный проект Google Brain с 1000 ядер ЦП. Используя только 3GPU с 18 000 ядер по цене 33 000 долларов, NVidia сделала это!

Вывод

Теперь есть несколько библиотек, которые используются для разработки повторно используемых кодов для использования графических процессоров. Но и ограничений немного. Графические процессоры начального уровня имеют ограниченную встроенную память, но благодаря новой архитектуре и IaaS (инфраструктура как услуга) можно использовать несколько графических процессоров большой емкости, что опять-таки тяжело для кармана.

В наши дни компании и производители предоставляют другие формы аппаратных ускорителей для глубокого обучения на ходу. Например, чипсеты с искусственным интеллектом в мобильных устройствах, интегрированные менее мощные чипсеты Atom на кристалле процессора, самоуправляемые автомобили с поддержкой глубокого обучения и мощные графические процессоры для обработки изображений для лучшего качества изображения в камерах и дисплеях. Это маломощные аппаратные средства, и они вызываются только тогда, когда требуется строгий объем обработки. Google и NVidia представили свои выделенные чипсеты GPU для Tensor Operations, которые установили очень высокую планку вычислений.

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