Как работает PCI-Express и почему вам это нужно? #GPU



Что такое PCI-Express?

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

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



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

Если вы используете графические процессоры, вы должны знать, что есть 2 способа подключить их к материнской плате, чтобы позволить ей подключаться к другим компонентам (сети, ЦП, устройству хранения). Решение 1 — через PCI Express, а решение 2 — через SXM2 . Мы поговорим о SXM2 в будущем. Сегодня мы сосредоточимся на PCI Express . Это связано с тем, что он сильно зависит от выбора соседнего оборудования, такого как шина PCI или ЦП.



Дизайн SXM2 VS Дизайн PCI Express
Это основной элемент, который следует учитывать при разговоре о глубоком обучении, поскольку этап загрузки данных — это пустая трата времени вычислений, поэтому пропускная способность между компонентами и графическими процессорами является ключевым узким местом в большинстве контекстов обучения глубокому обучению.

Как работает PCI-Express и почему нужно заботиться о количестве линий PCIe? Что такое линии PCI-Express и есть ли связанные с этим ограничения ЦП?

Каждый GPU V100 использует 16 линий PCI-e. Что именно это означает?

Выписка из NVidia V100 продукта спецификации листа

В «х16» означает, что PCIe имеет 16 выделенных полос. Итак… следующий вопрос: что такое полоса PCI Express?

Что такое линия PCI Express?

2 устройства PCI Express с его внутренним соединением: рисунок, вдохновленный потрясающей статьей - что такое чипсет и почему меня это должно волновать

Дорожки PCIe используются для связи между устройствами PCIe или между PCIe и ЦП. Полоса состоит из двух проводов: один для входящей связи, а другой с удвоенной пропускной способностью трафика для исходящего.

Связь по дорожкам похожа на связь сетевого уровня 1 — все дело в максимально быстрой передаче битов по электрическим проводам! Однако метод, используемый для PCIe Link, немного отличается, поскольку устройство PCIe состоит из линий xN. В нашем предыдущем примере N = 16, но это может быть любая степень двойки от 1 до 16 (1/2/4/8/16).

Итак… если PCIe похож на сетевую архитектуру, это означает, что уровни PCIe существуют, не так ли?

Да! Вы правы, PCIe имеет 4 слоя:



Физический уровень (также известный как уровень больших переговоров )

Физический уровень (PL) несет ответственность за ведение переговоров условия для получения исходных пакетов (PLP для пакетов физического уровня) , то есть ширина полосы частот , и с другим устройством.

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

Пакеты, полученные на физическом уровне (также известный как PHY) , поступают от других устройств PCIe или из системы (например, через память прямого доступа — DAM или от ЦП) и инкапсулируются в кадр.

Назначение Start-of-Frame — сказать: «Я отправляю вам данные, это начало», и для этого требуется всего 1 байт!


Слово « конец кадра» также составляет 1 байт, чтобы сказать «до свидания, я сделал это».


Этот уровень реализует декодирование 8b / 10b или 128b / 130b, которое мы объясним позже и в основном используется для восстановления тактовой частоты.

Пакет уровня канала передачи данных (он же давайте разберем этот беспорядок в правильном порядке )

Пакет уровня канала передачи данных (DLLP) начинается с порядкового номера пакета. Это действительно важно, поскольку в какой-то момент пакет может быть поврежден, поэтому может потребоваться однозначная идентификация для повторных попыток. Порядковый номер кодируется на 2 байта.

Layer Data Link Packet
 затем следуют уровне транзакций пакетов , а затем закрывается с МЦРК (Local Циклические Redundancy Check) и используется для проверки слоя транзакции пакета (значение фактического Payload) целостность.

Если LCRC подтвержден, то уровень звена данных отправляет сигнал ACK (ACKnowledge) на передатчик через физический уровень . В противном случае он отправляет сигнал NAK (Not AcKnowledge) на передатчик, который повторно отправит кадр, связанный с порядковым номером, для повторной попытки; эта часть обрабатывает буфер воспроизведения на стороне получателя .

Уровень транзакций

Уровень транзакции отвечает за управление фактической полезной нагрузкой (заголовок + данные), а также (необязательный) дайджест сообщения ECRC (сквозная циклическая проверка избыточности) . Этот пакет уровня транзакции поступает с уровня звена данных, где он декапсулирован .

При необходимости / запросе выполняется проверка целостности . Этот шаг будет проверять целостность бизнес - логику и не будет гарантировать , нет коррупции пакетов при передаче данных от Data Link Layer для транзакций уровня.

Заголовок описывает тип транзакции, например:

  • Операция памяти
  • Транзакция ввода-вывода
  • Транзакция конфигурации
  • или сообщение транзакции



Уровень приложения

Роль прикладного уровня  — обрабатывать логику пользователя . Этот уровень отправляет заголовок и полезные данные на уровень транзакции . Магия происходит на этом уровне, где данные привязаны к разным аппаратным компонентам.

Как PCIe общается с остальным миром?

PCIe Link использует концепцию коммутации пакетов, используемую в сети в полнодуплексном режиме.

Устройство PCIe имеет внутренние часы для управления циклами передачи данных PCIe Этот цикл передачи данных также организуется благодаря ссылочным часам. Последний отправляет сигнал через выделенную полосу (которая не является частью x1 / 2/4/8/16/32, упомянутой выше) . Эти часы помогут как принимающим, так и передающим устройствам синхронизироваться для передачи пакетов.

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

x16 означает 16 линий параллельной связи по протоколу PCIe 3 поколения

У вас может быть порядок байтов, но есть ли у вас целостность данных на физическом уровне?

Для обеспечения целостности устройство PCIe использует кодировку 8b / 10b для PCIe поколений 1 и 2 или схему кодирования 128b / 130b для поколений 3 и 4.

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

Эти 128 бит данных полезной нагрузки отправляются, и к ним добавляются 2 байта управления.

Быстрые примеры

Давайте упростим это на примере 8b / 10b: согласно IEEE 802.3, пункт 36, таблица 36–1a на основе спецификаций Ethernet здесь представляет собой кодировку таблицы 8b / 10b:

IEEE 802.3 пункт 36, таблица 36–1a - таблица кодирования 8b / 10b

Итак, как получатель может различить всех, кто повторяет 0 (имя кодовой группы D0.0)?



Кодирование 8b / 10b состоит из кодировок 5b / 6b + 3b / 4b.

Следовательно, 00000 000 будет закодировано в 100111 0100, 5 первых битов исходных данных 00000 будут закодированы в 100111 с использованием кодирования 5b / 6b ( rd + ); то же самое касается второй группы из 3 бит исходных данных 000, закодированных в 0100 с использованием кодирования 3b / 4b ( rd- ).

Это могло бы быть также 5b / 6b кодирования й + и 3b / 4b кодирование RD- решений 00000 000 превращается в 011000 1011

Следовательно, исходные данные, которые были 8-битными, теперь являются 10-битными из-за управления битами (1 управляющий бит для 5b / 6b и 1 для 3b / 4b).


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

PCIe поколения 1 и 2 были разработаны с кодированием 8b / 10b,
 что означает, что фактические передаваемые данные составляли только 80% от общей нагрузки (поскольку 20% — 2 бита используются для синхронизации часов).

PCIe Gen3 и 4 были разработаны с 128b / 130b,
 что означает, что управляющие биты теперь составляют только 1,56% полезной нагрузки. Неплохо, не правда ли?

Давайте вместе рассчитаем пропускную способность PCIe

Вот таблица спецификаций версий PCIe



Консорциум PCI-SIG Теоретическая пропускная способность PCIe / Технические характеристики полосы / пути



консорциум PCI-SIG PCIe теоретическая необработанная спецификация скорости передачи данных. Чтобы получить такие числа, давайте посмотрим на общую формулу пропускной способности:



  • BW означает пропускную способность
  • MT / s: мегапереводы в секунду
  • Кодирование может быть 4b / 5b /, 8b / 10b, 128b / 130b,…

Для PCIe v1.0:





Таким образом, с 16 полосами для NVIDIA V100, подключенными к PCIe v3.0 , эффективная скорость передачи данных (пропускная способность данных) составляет почти 16 ГБ / с / путь ( фактическая пропускная способность составляет 15,75 ГБ / с / путь ).

Вы должны быть осторожны, чтобы не запутаться, поскольку общую пропускную способность также можно интерпретировать как двухстороннюю пропускную способность; в этом случае мы считаем, что общая пропускная способность x16 составляет около 32 ГБ / с.

Примечание: Еще один элементкоторый мы не рассматривал, что максимальные потребности теоретической пропускной способности будут снижены примерно1 Гбит / с для протоколов коррекции ошибок ( ЦЭР и МЦРК ), а также в заголовках ( Начальный тег, последовательность теги, заголовок ) иНакладные расходы на нижний колонтитул ( конечный тег) объяснялись ранее в этом сообщении в блоге.

В заключение

Мы видели, что PCI Express сильно изменился и основан на тех же концепциях, что и сеть. Чтобы извлечь максимум из устройств PCIe, необходимо понимать основы базовой инфраструктуры.

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

Подводить итоги:

Друзья не позволяют друзьям создавать собственные хосты на GPU

Распределенное обучение в контексте глубокого обучения



Ранее в блоге OVHcloud…

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



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



Поэтому я решил написать статью о том, как работают графические процессоры:



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



Как обсуждалось ранее, обучение нейронных сетей зависит от:

  • Входные данные
  • Архитектура нейронной сети, состоящая из «слоев»
  • Вес
  • Скорость обучения (шаг, используемый для настройки весов нейронной сети)

Зачем нам нужно распределенное обучение

Глубокое обучение в основном используется для изучения шаблонов неструктурированных данных. Неструктурированные данные — например, текстовый корпус, изображение, видео или звук — могут представлять огромный объем данных для обучения.

Обучение такой библиотеки может занять несколько дней или даже недель из-за размера данных и / или размера сети.

Можно рассмотреть несколько подходов к распределенному обучению.

Различные подходы к распределенному обучению

Когда дело доходит до глубокого обучения, существует две основные категории распределенного обучения, и обе они основаны на парадигме «разделяй и властвуй».

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

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

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

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

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

3 шпаргалки для лучшего понимания распределенного глубокого обучения

В этой шпаргалке предположим, что вы используете докер с прикрепленным томом.









Теперь вам нужно выбрать стратегию распределенного обучения (с умом).

Дополнительная литература

Хотя мы многое рассмотрели в этом сообщении в блоге, мы почти не рассмотрели все аспекты распределенного обучения Deep Learning, включая предыдущую работу, историю и связанную с ней математику.
Я настоятельно рекомендую вам прочитать замечательную статью « Параллельное и распределенное глубокое обучение » Вишаха Хегде и Шимы Усмани (обе из Стэнфордского университета).
А также статью « Демистификация параллельного и распределенного глубокого обучения: углубленный анализ параллелизма», написанную Талом Бен-Нун и Торстеном Хефлером ETH Zurich, Switzerland. Я предлагаю вам начать с перехода к разделу 6.3 .

Что означает обучение нейронных сетей?

В предыдущем сообщении блога мы обсудили общие концепции глубокого обучения. В этом сообщении блога мы углубимся в основные концепции обучения (глубокой) нейронной сети.



Откуда взялось «Neural»?

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

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

С другой стороны, искусственные нейронные сети построены по принципу биомимикрии. Внешние стимулы (данные), мощность сигнала которых регулируется весами нейронов (помните синапс ?), Циркулируют в нейрон (место, где будет выполняться математический расчет) через дендриты. Результат расчета, называемый выходом, является затем повторно передается (через аксон) нескольким другим нейронам, затем объединяются последующие слои и так далее.

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



Рецепт искусственной нейронной сети

Для создания хорошей искусственной нейронной сети (ИНС) вам понадобятся следующие ингредиенты.

Ингредиенты:

Искусственные нейроны (узел обработки), состоящие из:
  • (много) входных нейронов, соединений (дендритов)
  • вычисления блок (ядро) состоит из:
    • линейная функция (ах + Ь)
    • функция активации (эквивалентно синапс )
  • выход (аксон)

Подготовка к получению ИНС для обучения классификации изображений:

  1. Определитесь с количеством классов вывода (имеется в виду количество классов изображений — например, два для кошки против собаки)
  2. Нарисуйте столько вычислительных единиц, сколько выходных классов (поздравляю, что вы только что создали выходной слой ИНС)
  3. Добавьте столько скрытых слоев, сколько необходимо в рамках определенной архитектуры (например, vgg16 или любой другой популярной архитектуры ). Совет. Скрытые слои  — это просто набор соседних вычислительных единиц , они не связаны друг с другом.
  4. Сложите эти скрытые слои на выходной слой с помощью нейронных соединений.
  5. Важно понимать, что входной уровень  — это, по сути, уровень приема данных.
  6. Добавьте уровень ввода, который адаптирован для приема ваших данных (или вы адаптируете формат данных к заранее определенной архитектуре)
  7. Соберите множество искусственных нейронов таким образом, чтобы выход (аксон) нейрона на данном слое был (одним) входом другого нейрона на последующем слое . Как следствие, входной слой связан со скрытыми слоями, которые затем связаны с выходным слоем (как показано на рисунке ниже) с помощью нейронных соединений (также показанных на рисунке ниже).
  8. Приятного аппетита



Что означает обучение искусственной нейронной сети?

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

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

Параллельно теории управления и глубокому обучению

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

Общие понятия теории управления

В системах управления уставка  — это целевое значение для системы. Заданное значение ( вход ) определена и затем обрабатывается контроллером, который регулирует величину заданного значения в соответствии с контуром обратной связи ( регулируемую переменную ). После того, как заданное значение было регулировать ее затем направляется в контролируемой системе , которая будет производить выходной сигнал. Этот выход контролируется с помощью соответствующей метрики, которая затем сравнивается (компаратор) с исходным входом через контур обратной связи . Это позволяет контроллеру определять уровень регулировки (управляемая переменная) исходной уставки.



Теория управления применительно к радиатору

Возьмем, к примеру, сопротивление (управляемую систему) в радиаторе. Представьте, что вы решили установить комнатную температуру на 20 ° C (заданное значение) . Радиатор запускается, подает сопротивление с определенной интенсивностью, определяемой контроллером . Затем датчик (термометр) измеряет температуру окружающей среды ( элементы обратной связи ), которая затем сравнивается (компаратор) с заданным значением (желаемой температурой) и регулирует (контроллер) электрическую напряженность, передаваемую на сопротивление. Регулировка новой интенсивности осуществляется через шаг постепенной регулировки.

Теория управления применительно к обучению нейронной сети

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

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


Для достижения этого система должна будет посмотреть на вход ( заданное значение ) и вычислить выход ( управляемая система ) на основе параметров, определенных в алгоритме. Этот этап называется прямым проходом.


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

Параллельно между системой управления электротехникой и процессом обучения нейронной сети

Одна вещь, которую следует учитывать: проблема долины

При обучении системы обратное распространение приведет к тому, что система уменьшит количество ошибок, которые она допускает, чтобы наилучшим образом соответствовать поставленным вами целям (обнаружение, что собака есть собака…).

Выбор скорости обучения, с которой вы будете регулировать свои веса (то, что в теории управления называется этапом корректировки ).

Как и в теории управления, система управления может столкнуться с несколькими проблемами, если она неправильно спроектирована:

  • Если шаг коррекции (скорость обучения) слишком мал, это приведет к очень медленной сходимости (то есть потребуется очень много времени, чтобы разогреть вашу комнату до 20 ° C…).
  • Слишком низкая скорость обучения также может привести к тому, что вы застрянете в локальных минимумах
  • Если шаг коррекции (скорость обучения) слишком высок, это приведет к тому, что система никогда не сойдется (биение вокруг куста) или хуже (то есть радиатор будет колебаться между слишком горячим или слишком холодным)
  • Система могла войти в резонансное состояние ( дивергенцию ).



В конце концов, для обучения искусственной нейронной сети (ИНС) требуется всего несколько шагов:

  1. Сначала для ИНС потребуется инициализация случайного веса.
  2. Разделить набор данных на партии (размер партии)
  3. Отправляйте партии 1 на 1 в GPU
  4. Рассчитайте прямой проход (каким будет результат с текущими весами)
  5. Сравните рассчитанный выход с ожидаемым выходом (убытком)
  6. Отрегулируйте веса (используя приращение или уменьшение скорости обучения ) в соответствии с обратным проходом (обратное распространение градиента) .
  7. Вернуться на квадрат 2

Дальнейшего уведомления

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

Понимание анатомии графических процессоров с помощью Pokémon

Поприветствуйте этого прекрасного новорожденного в GPGPU Nvidia Family Ampere

ОБНОВЛЕНИЕ БЛОГА ОТ 14 МАЯ 2020





В предыдущем выпуске …

В нашем предыдущем сообщении блога о глубоком обучении мы объяснили, что эта технология предназначена для массивных параллельных вычислений матриц и что эти вычисления являются упрощенными операциями: + и x.



Факт 1. Графические процессоры хороши для (барабанной дроби)…

Как только вы поймете, что глубокое обучение — это просто массовое параллельное умножение и сложение матриц, происходит волшебство. Графические процессоры общего назначения (GPGPU) (то есть графические процессоры или варианты графических процессоров, предназначенные для чего-то другого, кроме графической обработки) идеально подходят для…



Прекрасно, не правда ли? Но почему? Позвольте мне рассказать вам небольшую историю

Факт 2: было время, когда графические процессоры были просто графическими процессорами.

Да, Вы прочли это правильно…

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

Для простоты вот как выглядит процесс графического рендеринга:



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

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

Короче говоря, видеокарты изначально были предназначены для графической обработки. Какой сюрприз!

Факт 3: процессоры — это спортивные автомобили, а графические процессоры — массивные грузовики

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

Это полная противоположность логике ЦП, где операции должны выполняться последовательно. В результате GPGPU нуждались в массивно-параллельной архитектуре общего назначения, чтобы иметь возможность обрабатывать все точки (вершины), строить все сетки (тесселяцию), создавать освещение, выполнять преобразование объекта из абсолютной ссылки, применять текстуру и выполнить штриховку (мне, наверное, еще не хватает некоторых частей!). Однако цель этого сообщения не состоит в том, чтобы подробно рассматривать обработку и рендеринг изображений, поскольку мы сделаем это в другом сообщении в будущем.

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

Вот красивое видео от Mythbusters, в котором объясняются две концепции CPU и GPU:


Факт 4: 2006 — NVIDIA убила тейлоризм обработки изображений



Предыдущий метод обработки изображений был реализован с использованием специализированного персонала (оборудования) на каждом этапе производственной линии на фабрике изображений.

Все изменилось в 2006 году, когда NVIDIA решила представить универсальные графические процессоры, использующие арифметические логические единицы (ALU), также известные как ядра CUDA, которые могли выполнять многоцелевые вычисления (что-то вроде вычислений на GPU Жан-Клода Ван Дамма. единицы измерения!).



Даже сегодня современные архитектуры графических процессоров (такие как Fermi, Kepler или Volta) состоят из необщих ядер, называемых модулями специальных функций (SFU), для выполнения высокопроизводительных математических графических операций, таких как sin, косинус, обратное и квадратное root, а также блоки наложения текстуры (TMU) для операций с матрицами большой размерности, участвующих в наложении текстуры изображения.

Факт 5: GPGPU можно просто объяснить с помощью Pokémon!

Поначалу может показаться, что архитектура графического процессора трудна для понимания, но поверьте мне… это не так!

Вот мой подарок вам: Pokédex, который поможет вам понять графические процессоры простым языком.

Micro-Architecture Family

Вот как вы его используете… В основном у вас есть четыре семейства карт:

Эта семья уже многим из вас будет известна. Речь, конечно же, идет о Ферми, Максвелле, Кеплере, Вольте, Ампера и т. Д.



Архитектура семьи

Это центр, где происходит волшебство: оркестровка, кеш, планирование рабочих нагрузок… Это мозг графического процессора.



Многоядерная Units (ака CUDA Cores) Семейный

Это представляет собой физическое ядро, где на самом деле происходят математические вычисления.



Программирование Модель семьи

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



Как играть?

  • Начните с выбора карты из Micro-Architecture семьи
  • Посмотрите на компоненты, и выберите соответствующую карту из архитектуры семьи
  • Посмотрите на компоненты в семействе Micro-Architecture и выберите их из семейства Multi-Core Units , затем поместите их под карточкой « Архитектура».
  • Теперь, если вы хотите знать , как программировать GPU, место Programming Model — Multi-Core Units специальную карту поверх многоядерных блоков  карт
  • Наконец, поверх специальной карты Programming Model — Multi-Core Units поместите все карты Programming Model  рядом с SM.
  • Тогда у вас должно получиться что-то вроде этого:



Примеры конфигураций карт:

Ферми


Кеплер


Максвелл


Паскаль


Вольта


Тьюринг


Немного поигравшись с различными микроархитектурами, архитектурами и многоядерными модулями, вы должны увидеть, что графические процессоры так же просты, как и Pokémon!

Глубокое обучение объяснили моей 8-летней дочери

Машинное обучение и особенно глубокое обучение — горячие темы, и вы наверняка встречали модное слово «искусственный интеллект» в СМИ.



Однако это не новые концепции. Первая искусственная нейронная сеть (ИНС) была представлена ​​в 40-х годах. Так почему же в последнее время такой интерес к нейронным сетям и глубокому обучению? 

Мы рассмотрим эту и другие концепции в серии сообщений блога о  графических процессорах и машинном обучении .

YABAIR — еще один блог о распознавании изображений

Я помню, как в 80-е мой отец создавал распознавание символов для банковских чеков. Он использовал примитивы и производные для определения уровня темноты пикселей. Изучение стольких разных типов почерка было настоящей болью, потому что ему требовалось одно уравнение, применимое ко всем вариантам.

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

Давайте рассмотрим один из самых классических примеров: построение системы распознавания чисел, нейронной сети для распознавания рукописных цифр.

Факт 1: это так же просто, как подсчет

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



Теперь давайте попробуем распознать (вывести) новую рукописную цифру, подсчитав количество совпадений с одинаковыми красными формами. Затем мы сравним это с нашей предыдущей таблицей, чтобы определить, какое число имеет больше всего соответствий:



Поздравляю! Вы только что создали простейшую в мире нейросетевую систему для распознавания рукописных цифр.

Факт 2: изображение — это просто матрица

Компьютер рассматривает изображение как матрицу . Черно-белое изображение — это 2D-матрица.

Рассмотрим изображение. Чтобы не усложнять задачу, возьмем небольшое черно-белое изображение цифры 8 с квадратными размерами 28 пикселей.

Каждая ячейка матрицы представляет интенсивность пикселя от 0 (который представляет черный цвет) до 255 (который представляет чистый белый пиксель).

Таким образом, изображение будет представлено в виде следующей матрицы 28 x 28 пикселей.



Факт 3: сверточные слои — это просто сигналы летучей мыши

Чтобы выяснить, какой узор отображается на картинке (в данном случае рукописная цифра 8), мы будем использовать своего рода сигнал летучей мыши / фонарик. В машинном обучении фонарик называется фильтром. Фильтр используется для выполнения классического вычисления матрицы свертки, используемого в обычном программном обеспечении для обработки изображений, таком как Gimp.



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



Факт 4: сопоставление фильтров — это досадно параллельная задача.

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

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



Факт 5: просто повторите операцию фильтрации (свертку матрицы) как можно больше раз.

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

Чтобы повысить точность распознавания изображений, просто возьмите отфильтрованное изображение из предыдущей операции и фильтруйте снова, снова и снова…

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

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

Факт 6: свертки матрицы — это просто x и +

Изображение стоит тысячи слов: следующее изображение представляет собой упрощенный вид исходного изображения (8 × 8), отфильтрованного с помощью фильтра свертки (3 × 3). Проекция фонарика (в этом примере фильтр Sobel Gx) дает одно значение.



Пример фильтра свертки (Sobel Gx), примененного к входной матрице (Источник: datascience.stackexchange.com/questions/23183/why-convolutions-always-use-odd-numbers-as-filter-size/23186)

Именно здесь происходит чудо: простые матричные операции сильно распараллелены, что идеально подходит для случая использования универсального графического процессора.

Факт 7. Необходимо упростить и обобщить то, что было обнаружено? Просто используйте max ()

Нам нужно обобщить то, что было обнаружено фильтрами, чтобы обобщить знания .

Для этого мы возьмем образец вывода предыдущей операции фильтрации.

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

Вы можете использовать любую операцию уменьшения, такую ​​как: max, min, average, count, median, sum и т. Д.

Факт 8: сожмите все, чтобы встать на ноги

Давайте не будем забывать о главной цели нейронной сети, над которой мы работаем: построение системы распознавания изображений, также называемой классификацией изображений .

Если целью нейронной сети является обнаружение рукописных цифр, в конце будет 10 классов для сопоставления входного изображения с: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Чтобы сопоставить этот ввод с классом после прохождения всех этих фильтров и слоев понижающей дискретизации, у нас будет всего 10 нейронов (каждый из которых представляет класс), и каждый будет подключаться к последнему подвыборочному слою.

Ниже приведен обзор оригинальной сверточной нейронной сети LeNet-5, разработанной Яном Лекуном, одним из немногих, кто начал использовать эту технологию для распознавания изображений.



Факт 9: Глубокое обучение — это просто Бережливое производство — постоянное улучшение на основе обратной связи

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

Давайте KISS (будьте проще): мы смотрим на выход сети, если предположение (выход 0,1,2,3,4,5,6,7,8 или 9) неверно, мы смотрим, какой фильтр (ы) «сделал ошибку», мы присваиваем этому фильтру или фильтрам небольшой вес, чтобы они не повторили ту же ошибку в следующий раз. И вуаля! Система учится и продолжает совершенствоваться.

Факт 10: все сводится к тому, что глубокое обучение до неловкости параллельно

Обработка тысяч изображений, запуск десятков фильтров, применение понижающей дискретизации, сглаживание вывода… все эти шаги могут выполняться параллельно, что делает систему невероятно параллельной . Как ни странно, на самом деле это совершенно параллельная  проблема, и это просто идеальный вариант использования GPGPU (General Purpose Graphic Processing Unit), которые идеально подходят для массовых параллельных вычислений.

Факт 11: нужно больше точности? Просто иди глубже

Конечно, это немного упрощение, но если мы посмотрим на основное «соревнование по распознаванию изображений», известное как задача ImageNet, мы увидим, что частота ошибок уменьшалась с увеличением глубины нейронной сети. Общепризнано, что, помимо других элементов, глубина сети приведет к большей способности к обобщению и точности.



В заключение

Мы кратко рассмотрели концепцию глубокого обучения применительно к распознаванию изображений. Стоит отметить, что почти каждая новая архитектура для распознавания изображений (медицинская, спутниковая, автономное вождение и т. Д.) Использует одни и те же принципы с разным количеством слоев, разными типами фильтров, разными точками инициализации, разными размерами матриц, разными уловками (например, с изображением увеличение, дропауты, сжатие веса,…). Концепции остались прежними:



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

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

GPU инстанс G1-15

Процессор: Intel® Xeon® CPU E5-2687W v3 @ 3.10GHz
Видео карта: GTX 1060
Количество процессоров: 4.
Дата-центр GRA3.

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