Симулятор нейронной сети в FPGA? - PullRequest
26 голосов
/ 03 февраля 2010

Чтобы изучить программирование на ПЛИС, я планирую написать простую Нейронную Сеть на ПЛИС (поскольку она массивно параллельна; это одна из немногих вещей, где реализация ПЛИС может иметь шанс быть быстрее, чем реализация ЦП).

Хотя я знаком с программированием на C (более 10 лет). Я не уверен, что с разработкой FPGA. Можете ли вы предоставить список того, что я должен делать / учиться / покупать?

Спасибо!

Ответы [ 8 ]

18 голосов
/ 28 августа 2015

Некропостинг, но для таких, как я, которые сталкиваются с этим вопросом, глубокий, хотя и старый, подход к реализации нейронных сетей с использованием ПЛИС

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

Первые разговоры о Ускорении ПЛИС сверточных нейронных сетей .Nallatech выполнил работу.Это скорее маркетинг, чем академическая газета, но все же интересное чтение, и может быть отправной точкой для кого-то интересного в экспериментах.Я никак не связан с Nallatech.

Вторая статья вышла из Университета Бирмингема, Великобритания, написанная Юфэн Хао.Он представляет общую аппаратную архитектуру нейронной сети на FPGA .

16 голосов
/ 05 октября 2012

Большинство попыток построения «буквальной» нейронной сети на ПЛИС очень быстро выходят за пределы маршрутизации. Вы можете получить несколько сотен ячеек, прежде чем извлечение P & R займет больше времени, чем ваша проблема, которую стоит ждать. В большинстве исследований NN и FPGA используется этот подход, концентрирующийся на минимальной реализации «узла» и предполагающий, что масштабирование теперь тривиально.

Чтобы заставить нейронную сеть разумного размера действительно работать, можно использовать FPGA для создания выделенной машины для вычисления числа нейронных сетей. Получите ваши начальные значения узлов в микросхеме памяти, предоставьте второй чип памяти для ваших следующих результатов временной метки и третью область для хранения ваших весов подключения. Прокачивайте значения узлов и данные соединения, используя методы для поддержания насыщенности шин памяти (порядок загрузки узлов по линии CAS, упреждающее чтение с использованием конвейеров). Потребуется большое количество проходов по предыдущему набору данных, когда вы сопоставите веса с предыдущими значениями, проведете их через модули DSP MAC, чтобы оценить веса новых узлов, а затем вытолкните в область памяти результатов после того, как все соединения оценены. После завершения всего временного шага измените направление потока на обратное, чтобы следующий временной шаг записал обратно в исходную область хранения.

10 голосов
/ 12 февраля 2010

Я хочу указать на потенциальную проблему с внедрением нейронной сети в FPGA.FPGA имеют ограниченный объем ресурсов маршрутизации.В отличие от логических ресурсов (провалы, справочные таблицы, память), ресурсы маршрутизации трудно определить количественно.Может быть, будет работать простая нейронная сеть, но «массивно параллельная» сеть с сетевыми межсоединениями может не сработать.

Я бы посоветовал начать с простого ядра из OpenCores.org просто для знакомства с потоком FPGA, а затемперейти к созданию прототипа нейронной сети.Хорошим началом является бесплатное скачивание Xilinx WebPack с симулятором ISIM.Позже вы можете купить дешевый прибор.доска с небольшой FPGA (например, Xilinx Spartan 3) для запуска ваших проектов.

9 голосов
/ 17 февраля 2012

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

  • http://www.fpga4fun.com/ - отличные примеры простых проектов и некоторых досок.
  • http://opencores.org/ - очень полезный ссылочный коддля многих интерфейсов и т. д. ...

Вы также можете рассмотреть возможность использования мягкого процессора в ПЛИС для облегчения перехода с C на VHDL или Verilog.Это позволит вам перемещать небольшие модули кода от одного к другому, чтобы увидеть различия в оборудовании.Выбор языка несколько произвольный - я кодирую на VHDL (синтаксически похожий на ADA) большую часть времени, но некоторые из моих коллег предпочитают Verilog (синтаксически похожий на C).Мы обсуждаем это время от времени, но на самом деле это личный выбор.

Что касается руководства для покупателей / учеников, вам необходимо:

  1. Терпение:) - Цикл разработки для ПЛИС значительно дольше, чем для программного обеспечения, из-за количества дополнительных «свободных параметров» в сборке, поэтому не удивляйтесь, если потребуется некоторое время, чтобы конструкции работали именно так, как вы хотите.

  2. Доска для разработки - Для обучения я бы купил один из трех крупнейших поставщиков ПЛИС: Xilinx, Altera или Lattice.На данный момент я предпочитаю Xilinx, но все три хороши.Для обучения не покупайте один, основанный на более дорогих деталях - вам это не нужно, когда вы начинаете использовать FPGA.Для Xilinx получите один, основанный на серии спартанцев, такой как SP601 (у меня есть один сам).Для Альтера, купите Циклон.Платы для разработки будут значительно дешевле, чем платы для деталей более высокого класса.

  3. Программный кабель - Большинство компаний выпускают USB-кабель для программирования со специальным разъемом длязапрограммируйте устройства на плате (часто используя JTAG).Некоторые платы имеют встроенный интерфейс программирования (например, SP601 от Xilinx), поэтому вам не нужно тратить на это лишние деньги.

  4. Инструменты сборки -Существует множество разновидностей, но большинство крупных поставщиков ПЛИС предлагают собственное решение.Имейте в виду, что инструменты бесплатны только для небольших менее производительных ПЛИС, например, Xilinx ISE Webpack.

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

    • «Синтезировать» его в конструкции, которые соответствуют строительным блокам, доступным внутри вашегоконкретная FPGA.
    • «Переведите и сопоставьте» конструкцию с деталью.
    • «Поместите и проложите» логику в конкретном устройстве, чтобы она соответствовала вашим требованиям к синхронизации (например, требуемой тактовой частоте)дизайн для запуска).
7 голосов
/ 05 февраля 2010

Я дам вам еще одну рекомендацию: используйте VHDL. Да, на поверхности это похоже на ADA. В то время как Verilog имеет некоторое сходство с C. Однако, с Verilog вы получаете только те типы, которые поставляются с ним из коробки. С VHDL вы можете определять свои собственные новые типы, которые позволяют программировать на более высоком уровне (все еще RTL, конечно). Я уверен, что бесплатные инструменты Xilinx и Altera поддерживают VHDL и Verilog. «Руководство для дизайнеров по VHDL» Ашендена - хорошая книга по VHDL.

VHDL имеет стандартный математический пакет с фиксированной запятой, который может упростить реализацию NN.

7 голосов
/ 04 февраля 2010

Независимо от того, что говорит Чарльз Стюарт, Верилог - отличное место для старта. Это напоминает мне о C, так же, как VHDL напоминает мне об ADA. Никто не использует Occam в промышленности, и это не распространено в университетах.

Для книги Verilog я рекомендую эти особенно Verilog HDL . Verilog выполняет параллельную работу тривиально, в отличие от C.

Чтобы купить, получите сравнительно дешевую плату Cyclone III eval от [Altera] или Altera's 3 (например, это Cyclone III с NIOS за 449 $ или это за 199 долларов) или Xilinx.

2 голосов
/ 03 февраля 2010

Это старо, потому что я почти не задумывался о ПЛИС почти 20 лет, и в нем используется параллельный язык программирования, который довольно неясен, но Page & Luk, 1991, Компиляция Occam в ПЛИС некоторые важные темы в хорошем смысле, я думаю, достаточно для ваших целей. Две ссылки для пробной работы:

  1. KRoC - это активно поддерживаемый компилятор Occam на основе Linux, который, как я знаю, имеет активную базу пользователей.
  2. У Роджера Пила есть страница логического синтеза , в которой есть некоторая документация его рабочего процесса на основе linux от синтеза кода Occam до ввода-вывода FPGA.

Оккам-> ПЛИС - это не то место, где находится действие, но это может быть гораздо лучшее место для начала, чем, скажем, Verilog.

1 голос
/ 05 декабря 2017

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

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

...