Что такое графический процессор и нужен ли он вам при глубоком обучении?
В Deep Learning все, кажется, рекомендуют использовать графический процессор. Что это такое, можно ли без него обойтись и для кого конкретно?
Любой специалист по анализу данных или энтузиаст машинного обучения, который пытался выявить производительность обучающих моделей в масштабе, в какой-то момент достигнет предела и начнет испытывать различные степени задержки обработки. Задачи, которые занимают минуты с меньшими обучающими наборами, теперь могут занимать больше часов, а в некоторых случаях и недель, когда наборы данных становятся больше.
Но что такое графические процессоры? Как они соотносятся с процессорами? Нужен ли он мне для проектов глубокого обучения?
Если вы когда-нибудь задавали себе эти вопросы, читайте дальше…
Недавно я открыл исходный код своей библиотеки Computer Vision, которая использует графический процессор для обработки изображений и видео на лету. Я оставлю ссылку на репозиторий Github, если вам интересно :)
Любой специалист по данным или энтузиаст машинного обучения хотя бы раз в жизни слышал, что для глубокого обучения требуется много оборудования. Некоторые тренируют простые модели глубокого обучения в течение нескольких дней на своих ноутбуках (обычно без графических процессоров), что создает впечатление, что глубокое обучение требует выполнения больших систем.
Это создало миф о глубоком обучении, который создает препятствие для новичков.
В каждой книге, на которую я ссылался за последние несколько лет, автор всегда упоминал следующее:
Для глубокого обучения требуется много вычислительной мощности.
Но у меня нет центров обработки данных, и когда я построил свою первую модель глубокого обучения на большом ноутбуке, я знал, что консенсус был либо неверным, либо изображен с некоторой правдой.
Вам не нужно брать на себя управление Google, чтобы стать экспертом в области глубокого обучения.
Зачем нам нужно больше оборудования для глубокого обучения?
Для любой нейронной сети этап обучения модели глубокого обучения является наиболее ресурсоемкой задачей.
Во время обучения нейронная сеть принимает входные данные, которые затем обрабатываются в скрытых слоях с использованием весов, которые корректируются во время обучения, а затем модель выдает прогноз. Веса корректируются, чтобы найти закономерности, чтобы делать более точные прогнозы.
Обе эти операции по сути являются умножением матриц. Простое матричное умножение можно представить на изображении ниже.

В нейронной сети мы можем, чтобы первый массив был входом в нейронную сеть, а второй массив формировал его вес.
Легко, правда?
Да, если ваша нейронная сеть имеет около 10, 100 или даже 100 000 параметров. Компьютер все равно сможет справиться с этим за считанные минуты или даже часы, самое большее.
Но что, если ваша нейронная сеть имеет более 10 миллиардов параметров? На обучение такого рода систем с использованием традиционного подхода потребуются годы. Ваш компьютер, вероятно, откажется, прежде чем вы пройдете хотя бы одну десятую пути.
«Нейронная сеть, которая принимает поисковые данные и делает прогнозы на основе 100 миллионов выходных данных или продуктов, обычно имеет около 2000 параметров для каждого продукта. Вы умножаете их, и последний слой нейронной сети составляет 200 миллиардов параметров. И я не сделал ничего изощренного. Я говорю об очень-очень простой модели нейронной сети ». - к.э.н. студент Университета Райса
Ускорение обучения моделей глубокого обучения
Модели глубокого обучения можно обучать быстрее, просто выполняя все операции одновременно в одно и то же время, а не одну за другой.
Этого можно добиться, используя графический процессор для обучения вашей модели.
Графический процессор (графический процессор) - это специализированный процессор с выделенной памятью, который обычно выполняет операции с плавающей запятой, необходимые для рендеринга графики.
Другими словами, это однокристальный процессор, используемый для обширных графических и математических вычислений, который освобождает циклы ЦП для других задач.
Основное различие между графическими процессорами и процессорами заключается в том, что графические процессоры выделяют пропорционально больше транзисторов для арифметико-логических устройств и меньше - для кешей и управления потоком по сравнению с процессорами.
В то время как центральные процессоры в основном применимы для задач, требующих синтаксического анализа или интерпретации сложной логики в коде, графические процессоры предназначены для специальных рабочих лошадок графического рендеринга компьютерных игр, которые позже были усовершенствованы. для ускорения других геометрических вычислений (например, преобразования многоугольников или поворота вертикалей в другие системы координат, такие как 3D).
Графический процессор меньше центрального процессора, но, как правило, имеет больше логических ядер (арифметико-логических блоков или ALU, блоков управления и кеш-памяти), чем последний.

На приведенной выше диаграмме вы можете видеть, что графические процессоры (красный / зеленый) теоретически могут выполнять в 10–15 раз больше операций, чем процессоры (показаны синим цветом). Это ускорение очень применимо и на практике.
Если рассматривать ЦП как Maserati, графический процессор можно рассматривать как большой грузовик.
ЦП (Maserati) может быстро загружать небольшие количества пакетов (3-4 пассажира) в ОЗУ, тогда как графический процессор (грузовик) работает медленнее, но может извлекать большие объемы памяти (~ 20 пассажиров) за один ход.
В этом видео представлена дальнейшая концепция:
Почему выбирают графические процессоры для глубокого обучения
Графические процессоры оптимизированы для обучения моделей искусственного интеллекта и глубокого обучения, поскольку они могут обрабатывать несколько вычислений одновременно.
У них большое количество ядер, что позволяет лучше вычислять несколько параллельных процессов. Кроме того, вычисления в области глубокого обучения должны обрабатывать огромные объемы данных - это делает пропускную способность памяти графического процессора наиболее подходящей.
Существует несколько решающих параметров, которые определяют, использовать ли ЦП или графический процессор для обучения модели глубокого обучения:
Пропускная способность памяти:
Пропускная способность - одна из основных причин, почему графические процессоры быстрее вычисляют, чем процессоры. С большими наборами данных ЦП занимает много памяти при обучении модели.
Вычисление огромных и сложных заданий занимает много тактовых циклов ЦП - ЦП выполняют задания последовательно и имеют меньшее количество ядер, чем его аналог, ГП.
С другой стороны, автономный графический процессор поставляется с выделенной памятью VRAM (видеопамять). Таким образом, память процессора может использоваться для других задач.

Размер набора данных
Для обучения модели глубокому обучению требуется большой набор данных, отсюда и большие вычислительные операции с точки зрения памяти. Для эффективного вычисления данных оптимальный выбор - графический процессор. Чем больше объем вычислений, тем больше преимущество графического процессора над центральным процессором.
Оптимизация
Оптимизировать задачи в CPU намного проще. Ядра ЦП хоть и меньше, но мощнее тысяч ядер графического процессора.
Каждое ядро ЦП может выполнять разные инструкции (архитектура MIMD), тогда как ядра графического процессора, которые обычно организованы в блоки по 32 ядра, выполняют одну и ту же инструкцию в заданное время параллельно (архитектура SIMD).
Распараллеливание в плотных нейронных сетях очень сложно с учетом требуемых усилий. Следовательно, сложные методы оптимизации труднее реализовать в графическом процессоре, чем в центральном процессоре.
Стоит ли использовать графический процессор?
Как и в случае с любым другим проектом в области науки о данных, все зависит от обстоятельств. Следует учитывать компромисс между скоростью, надежностью и стоимостью:
- Если ваша нейронная сеть относительно небольшая, вы можете обойтись без графического процессора.
- Если ваша нейронная сеть включает в себя тонны вычислений с участием многих сотен тысяч параметров, вы можете подумать об инвестициях в графический процессор.
Как правило, графические процессоры - более безопасный вариант для быстрого машинного обучения, потому что по своей сути обучение модели науки о данных состоит из простых математических вычислений с матрицами, скорость которых может быть значительно увеличена, если вычисления выполняются параллельно.
См. Этот пост на Reddit о лучших графических процессорах, в которые стоит инвестировать для глубокого обучения.
Экземпляры облачных графических процессоров
Вы также должны подумать об облачных графических процессорах. Если вы не хотите покупать кучу дорогих графических процессоров, вы можете использовать графические процессоры по запросу в компании, предоставляющей облачный хостинг. Они избавят вас от настройки оборудования и, что самое главное, они не так дороги - затраты могут составлять всего 0,25 доллара США в час, пока вы его используете.
По завершении не забудьте выключить облачный экземпляр.
Вы будете арендовать чужой компьютер / сервер, а не запускать что-то самостоятельно. Недостаточно закрыть браузер или выключить компьютер, это просто разорвет соединение между вашим устройством и удаленным сервером, а не отключит то, за что вы платите. В противном случае вы будете платить за все время его работы и получите неприятный счет!
ЦП лучше всего справляются с последовательной обработкой единичных, более сложных вычислений, в то время как графические процессоры лучше справляются с параллельной обработкой нескольких, но более простых вычислений.
Экземпляры вычислений на GPU обычно стоят в 2–3 раза дороже, чем инстансы для вычислений на CPU, поэтому, если вы не видите увеличения производительности в 2–3 раза в своих моделях обучения на основе графических процессоров, я бы посоветовал использовать центральные процессоры.
Как всегда, большое спасибо за чтение! Скажите, пожалуйста, что вы думаете или хотели бы, чтобы я написал дальше в комментариях. Я тоже открыт для критики!
Увидимся в следующем посте! 😄