И почему ты тоже должен ...

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

Графический процессор (GPU)

Графический процессор - это процессор, который отлично справляется с специализированными вычислениями. Мы можем сравнить это с центральным процессором (ЦП), который отлично справляется с общими вычислениями. ЦП обеспечивают большую часть вычислений, выполняемых на устройствах, которые мы используем ежедневно.

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

Параллельные вычисления

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

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

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

Нейронные сети параллельны

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

Кроме того, нейронные сети параллельны таким образом, что они не должны зависеть от результатов друг друга. Все могло работать одновременно, не дожидаясь выхода других ядер. Примером таких вычислений, которые в значительной степени независимы, является свертка.

Свертка

Вот пример того, как может выглядеть свертка без чисел. У нас есть входной канал слева и выход справа. В анимации процесс вычислений происходит последовательно, чего нет в реальной жизни. Фактически, все операции могут происходить одновременно, и ни одна из них не зависит от результатов каких-либо других вычислений.

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

Аппаратное и программное обеспечение Nvidia

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

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

GPU против CPU

CUDA позволяет нам выборочно запускать вычисления либо на GPU, либо на CPU. Почему бы не использовать графический процессор для всего, если он намного лучше?

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

По этой причине часто допустимо использовать ЦП только в начале работы, поскольку начальные задачи будут короткими и простыми.

ГПГПУ

Когда впервые был создан графический процессор, он в основном был нацелен на работу с компьютерной графикой, отсюда и название. Теперь все больше и больше задач переносятся на графические процессоры, и Nvidia является пионером в этой области. CUDA был создан почти 10 лет назад, и только сейчас разработчики начинают его использовать.

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

Обсуждение GTC от Nvidia обязательно к просмотру всем, кто занимается глубоким обучением. Когда мы слышим о вычислительном стеке графического процессора, мы должны думать о графическом процессоре как об аппаратном обеспечении внизу, программной архитектуре CUDA посередине и библиотеках, таких как cuDNN, наверху.

Вывод

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

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

Ресурсы:

[1] Викарии Израиля. (2018, 23 мая). Визуализация сверточной нейронной сети, автор Отавио Гуд [видео]. YouTube. Https://youtu.be/f0t-OCG79-U

[2] NVIDIA. (2016, 26 сентября). GTC China: искусственный интеллект, глубокое обучение с Джен-Хсун Хуанг и Эндрю Нг из Baidu [видео]. YouTube. Https://youtu.be/zeSIXD6y3WQ

[3] Определение параллельных вычислений. (нет данных). Получено с https://www.omnisci.com/technical-glossary/parallel-computing