Comments 73
ps. Мы в ЛШЮП такой фигни не делаем =)
Была и у меня такая привычка: всё созданное школьниками заранее подозревать в болгеносности. Но вот недавно выяснилось, что Павел Суходольский выпустил первые версии прошивки для АОНов "Русь" будучи школьником. Для меня это стало сюрпризом, я был уверен, что в девяностых ему было около пятидесяти. Призадумался. Школьник школьнику рознь.
Ну а я сам в 17 лет пытался писать компилятор. Правда написал только немного процедур нижнего слоя (разработка шла снизу вверх).
Ну не было тогда учителей по этому предмету, и вели его по совместительству учителя физики, или математики.
Для практики начиная от поиска где-нибудь на авито какого-нибудь УМПК-80/УМПК-51 (или эмулятора процессора), и заканчивая пинбордой с изиэлектроникс (или платой FPGA с алиэкспресса)…
Не по теме, не в обиду, а вы спите тоже с "натянутой" улыбкой?
Чему надо научиться, чтобы я смогу сделать что-то похожее? Насколько высок порог вхождения в эту область?
Харрис&Харрис, как бы её не позиционировали авторы, имеет не нулевой порог вхождения. Совсем. А для гуманитария это окажется полным адом из-за количества информации, которую придётся переваривать (пусть и язык не самый сложный).
Вам нужен «Код. Тайный язык информатики» Петцольда. По-моему, для полных нулей соотношение осиляемости Петцольда к осиляемости Харрис&Харрис примерно равно соотношению осиляемости Х&Х к «Архитектуре» Танненбаума.
«ну нафиг, почитаю лучше Хабр или посмотрю сериал»
Мне аж стыдно стало.
Имя тоже хорошее. Так и просится заголовок «Помоги Даше сделать нейроускоритель на ПЛИС».
И сама Даша подозрительно похожа на автора.
P.S. Фото не подписаны, так что не понятно, кто, где, зачем…
По-моему производительность с питоном сравнивать не нужно. И так ясно будет. Если только он не использует open cl с какой-нибудь среднестатистический видеокартой.
Шлю лучи поддержки за работу с российской молодёжью, спасибо! :)
Меж тем, предложенный проект весьма непрост, хотя, казалось бы, циферки — это даже не котят распознавать.
Если брать, например, Ленет, то несжатые коеффициенты не влезут в набортную память недорогих ПЛИС. О более крупных сетях я даже не говорю.
А значит, нужно как-то планировать вычисления: загрузить часть коэффициентов, применить, загрузить следующую.
Вот какую именно и в каком именно порядке — нетривиальное решение для сверточных сетей, особенно когда надо целиком уместиться в 128 кбайт и при этом не быть безнадежно тормознутым. Ну, вот, в частности, если хочется выгружать хотя бы по 16 коэффициентов из однопортовой памяти за раз, нужно чтобы они были расположены рядом. Если брать стандартный row-major alignment из всяких кафе и тензорфлоу, то хорошо будут работать первые слои, а если col-major из Julia с матлабом, то последние. И видимо, нужно или городить многопортовую память, или хитро готовить данные в зависимости от слоя. Кажется, именно последнее делает nvidiа и movidius, но как именно, они, конечно, не спешат рассказывать. Еще туда же: некоторые университетские реализации эту проблему вообще не решают и говорят, что у нас будут только сверточные слои.
Другая проблема — переполнение/нормализация. В выгодном на ПЛИС целочисленном режиме за этим нужно внимательно следить. Настолько внимательно, что, кажется, проще использовать аппаратное FP. В принципе, если выкинуть denormals, то оно не такое страшное и вполне компактное для фп16. Другой (куда более модный) подход — угореть по одно- двух- или четырехбитным коеффициентам. Это реально работает (тм), куча статей с историями успеха, но этот путь явно сложнее.
Так что да, проект крутой, несмотря на весь хайп и определенно менее затасканный, чем свой процессор.
В качестве идеи, можно использовать сенсор от оптической мышки и радостно демонстрировать realtime распознавание. Даром, что для этого не нужна такая уж прямо скорость :)
А в LeNet'е ценность в том, что он хоть и маленький, но полностью настоящий. Учебно-боевой. Но там, если мне память не изменяет, 400k коэффициентов.
Ведь в реальности все равно нейросети не стоят и в ближайшее время не будут стоят в каждом доме. Это удел корпораций, которые предоставляют (захотят/могут предоставить) к себе доступ.
Потому что принципы RTL (Register Transfer Level) одинаковы и для слабых ПЛИС и для 7-нм чипа с миллиардами транзисторов, над которым я сейчас работаю. Это опыт разработки.
*** Ведь в реальности все равно нейросети не стоят и в ближайшее время не будут стоят в каждом доме ***
Именно сейчас я работаю над конфигурируемым IP блоком ускорителя нейросетей, который будет использоваться как в тяжелых устройствах типа ящиков для data-центров, так (в небольшой конфигурации) и в мобильных устойствах и других применениях on edge (например распознавании вашего лица телефоном или датчиком итд).
Потому что принципы RTL (Register Transfer Level) одинаковы и для слабых ПЛИС и для 7-нм чипа с миллиардами транзисторов, над которым я сейчас работаю. Это опыт разработки.
Здесь больше вопрос не в скорости обработки, а в кол-ве памяти. Загрузка кучи маленьких пакетов данных намного медленнее, чем одного большого пакета.
Именно сейчас я работаю над конфигурируемым IP блоком ускорителя нейросетей, который будет использоваться как в тяжелых устройствах типа ящиков для data-центров, так (в небольшой конфигурации) и в мобильных устройствах и других применениях on edge (например распознавании вашего лица телефоном или датчиком и т.д.).
ну заточка на один/группу объектов — это не совсем одно и то же, что выделить/определить кучу однотипных объектов, т.к. однотипность понятие растяжимое.
Т.е. в 1-ом случае ищем сами объекты (т.е. определение конкретики), во 2-м – ищет объекты, имеющие какую-то общность (т.е. определение типа), а это как раз проблема. И во 2-м случае проблема не только в самом «процессоре», но и в объеме инфы, за счет которой он улучшается. Эту инфу надо где-то хранить.
Так что в каждой многоэтажке уже есть такой чип.
Той самой, что из шума выделяет«ОК, Google» или «слушай, Алиса».
Именно эти слова можно и без всяких чипов хранить. Я на определенные фразы старую русскую прогу «Дракон» (типа того, не помню как точно наз-ся) натаскивал. Нормально определяла. И эти «гугл ок/алисы» один фиг дальнейшую фразу без инета не поймут, т.к. обработка твой фразы идет на их серверах.
Хранить — можно.
Хранить что? На изначальную фразу прога уже заточена. А на распознавание остального уже нужно намного большая нейросеть.
Именно эти слова можно и без всяких чипов хранить.
P.S. Но все равно для части из этого какой особый сопроцессор не нужен. Снимать уровень звука ➜ ниже какого-то уровня ➜ дальше не реагировать. Подавление шума уже тоже есть. И т.п.
P.S.
Что вообще делает этот нейроспроцессор? Т.е. что вообще в него вводится и что выводится?
Снимать уровень звука ➜ ниже какого-то уровня ➜ дальше не реагироватьТо есть, если человек работает в шумном месте, у него батарейка постоянно будет высаживаться за 6 часов?
Подавление шума уже тоже есть. И т.п.
P.S.
Снимать уровень звука ➜ ниже какого-то уровня ➜ дальше не реагировать.Без процессора??? Как? АЦП у вас в процессоре, чтобы определить уровень громкости — нужен CPU и FPU. С учетом, что там linux, а не RTOS, фактически для этого должен быть включен (запитан) весь процессор. А запитанные части процессора потребляют энергию, независимого от того, используются они или нет. Просто если используются — потребляют совсем много.
Я вам по одному из своих GPS-ных чипов скажу
«РЕЗЕРВ» — 8мкА
«ВЫКЛЮЧЕН» — 150 мкА
СОН — 5 мА
ЭНЕРГОСБЕРЕЖЕНИЕ — 10 мА
«ОБНУЛЕН» — 20 мА
РАБОТА — 50 мА
ЗАПУСК — 110 мА
Кто-то из России уедет, кто-то не уедет. В Silicon Valley гораздо менее живая социальная жизнь, чем в Москве.
По мне так это лишь в плюс Долине :)
— Серьёзно заняться этим проектом с прицелом на то как это можно будет встроить в телефоны. Какие нейросети самые популярные? Распознавание картинок? Что там ещё? Вот для них и сделать интересную демку. Идеальная демка выглядит примерно так: мы взяли нейросеть ResNet50, сделали её в софте и на нашем железе и получили разницу в скорости и энергопотреблении в 1000 раз и при этом мы даже не начали ещё ничего оптимизировать. Сделали акцент на то, что если такая фигня будет в телефонах, они смогут распознавать картинки гораздо лучше (одна из киллер фич нового Пикселя это именно распознавание текста камерой).
— Учить английский. Доходы и профессиональные возможности прежде всего зависят от того где вы работаете. Больших высот в Роснано не достичь.
— Подавать на internship в Гугл, Интел, NVidia и т.д. Судя по статье, она могла бы уже сейчас там работать. Представьте, что будет через 10 лет. За один internship летом вам дадут ну… тыщ 25 долларов.
— Получать диплом бакалавра или магистра и валить на следующий день. Диплом это пустая формальность, но он должен быть и на нём должны быть написаны правильные слова про математику и компьютерные науки. Все эти компании сейчас усиленно напирают на diversity & inclusion, поэтому оффер она получит в приоритетном порядке.
— Найти знакомых которые работают в этих компаниях и через них отправить резюме эйчарам. Можно конечно и напрямую послать, но у них там беклог из миллионов резюме и все посмотреть просто не получится. Идеальное место работы, как мне кажется, это подразделение Гугла которое занимается TPU. Там будут почти бесконечные ресурсы для всех этих ПЛИС.
По такому направлению годам к 25 можно грести в гугле пол миллиона долларов в год. Годам к 35 можно иметь некислый счёт в банке и возможность заиметь свою компанию.
1) Имплементация всех слоёв сети внурти ПЛИС на VHLD/Verilog.
Работает на маленьких и очень маленьких сетях. Какого бы ни был размера ПЛИС в итоге приходим к тому что внутренних ресурсов памяти (для weights и промежуточных результатов) перестает хватать. В итоге приходится постоянно качать туда-обратно данные из веншней памяти. Сделать это с высоким КПД не тривиальная задача. Решения такие масштабируются плохо (хотим не 20 а 40 слоёв): либо Routing а то и просто кол-во свободных ресурсов подведёт. А написать всё это да так чтобы работало на 300 + MHz тоже не просто. Тут приходится выбирать между удобством соединения слоёв, модульностью и хорошо спроектированной pipeline. Из плюсов — при условии что все влезло в ПЛИС и Timing сошёлся получаем совершенно бешеный FPS (если работаем с изображениями) при низком энергопотреблении.
Итог: Лично я отказался от этого пути быстро. Ребята из Xilinx даже сделали готовый проект потратив год работы команды инжинеров, но потом у них попросили что то поменять и большая часть рабты была выброшена.
2) ПЛИС как co-processor для ARM(SoC решения) или x86.
На данный момент оба производителя ПЛИС (маленьких в расчет не беру) осознали что при постоянном росте глубины сетей ни о какой полной имплетентации в ПЛИС не может быть и речи. Размеры чипов так быстро расти не могут и всвязи с этим путь был выбран иной.
Intel PSG (Altera) выкатил свое решение для data centers (Xenon CPU + PAC) соединенные через PCIe. На плате PAC стоит ПЛИС который умеет быстро считать разные влои и функции сетей но в 1 экземпляре. Задача CPU «кормить» очень быстрые модули на ПЛИС и считать самому то что ПЛИС не поддерживается.
Xilinx сделал что то очень похожее совместно с Amazon. Плюс они так же поддерживают Embedded решения. Там работу x86 выполняет встроенный ARM. Работает но не так густро как с 86-ым. Сдругой стороны — не везде 86-ой можно впихнуть: прожорливы и громоздки.
Как мне кажется — именно этот путь имеет шанс на успех. Эти решения реально рабоатют, пусть они пока только «в пеленках». Тем более что производители увеличивают количество поддерживаемых ПЛИС функций а за счет этого растет и скорость вычислений.
Если Даша хочет серьёзно подойти в ускорению вычислений — стоит задуматься о написании своего co-processor. Это не всё конечно. Нужна оптимизация и квантазация сети. Но с co-processor можно начать.
Xilinx вроде выкатили недавно Versal и специальные ПЛИСины, оптимизированные под нейросети. Насколько я понимаю, они очень серьезно настроены на чисто ПЛИСовскую реализацию — то, что они показывали, работало без процессоров и реально очень шустро, шустрее Nvidieвских графических плат.
Так что Даше удачи.
Бесспорно, эта ниша будет развиваться! Иногда думаю, как мне повезло что есть возможность начать знакомится с новой «идеей» прямо по мере её воплощения в жизнь. Согласитесь, в мире «железяк» это не так часто бывает
Xilinx Versal это ни что иное как ARM+co-processor+RAM в одном чипе.
Не очень. ARM там как были, так и остались, слегка увеличив свою производительность. Логика, RAM+DSP тоже. Но вот что новенькое — это AI Cores + внутренняя сеть для быстрой передачи данных (я так понял а-ля железная AXI). Так что ваш первый этап все еще жив.
Десятиклассница из Сибири хочет стать проектировщицей процессоров. Почему бы ей не сделать нейроускоритель на ПЛИС?