Pull to refresh

Comments 73

У меня школьники всегда вызывают подозрение в создании очередной Болген ос.
В учебных процессорных ядрах и систолических массивах строк кода меньше, легче проверить на легитимность проекта
Вы считаете это опасным? Ведь они всё-равно не получат большого финансирования — общественный резонанс не позволит.
Не скажу, что подозрение совсем несправедливо, но это все-таки редкость. Я имею в виду такое несоответствие того что сделали с тем как представили.

ps. Мы в ЛШЮП такой фигни не делаем =)

Была и у меня такая привычка: всё созданное школьниками заранее подозревать в болгеносности. Но вот недавно выяснилось, что Павел Суходольский выпустил первые версии прошивки для АОНов "Русь" будучи школьником. Для меня это стало сюрпризом, я был уверен, что в девяностых ему было около пятидесяти. Призадумался. Школьник школьнику рознь.

UFO just landed and posted this here
У меня при слове школьники вспоминается 16-летний kitten, ныне больше всего известный как автор kPHP (ну и дважды призер международки по программированию) и 17летний yole, известный как создатель идеи языка kotlin и автор первой книжки по нему. Yole, правла, в свои 17 был уже на 3ем курсе.

Ну а я сам в 17 лет пытался писать компилятор. Правда написал только немного процедур нижнего слоя (разработка шла снизу вверх).
Прочитал статью и с тоской вспомнил свои школьные годы, где учитель на серьезных щах объясняла, что BSOD появляется, когда компьютер заражен вирусами…
Ну вы ему объяснили про виртуальную память, user/kernel mode итд?
Ей. Но, к сожалению, это была крайне твердолобая особа… Из тех, кто считает, что «яйцо курицу не учит». Один раз даже до завуча дошло дело, но та развела руками, ибо ругать меня было не за что :)
А что еще ему было объяснять? Человек первый раз в жизни увидел компьютер, прочитал кривую инструкцию и ему приходилось учить.
Ну не было тогда учителей по этому предмету, и вели его по совместительству учителя физики, или математики.
Так было, когда предмет «основы информатики и вычислительной техники» только начинался. Уже к 1992-му (где как) для этого начали появляться отдельные учителя. А сначала да, математики и физики к преподаванию привлекались.
2 десятилетия спустя все точно также в какой-нибудь глубинке. Учил самостоятельно TurboPascal в школе (ничего другого подоступнее не было), чтобы в универе учить TASM. Хотел как-то научиться управляться с компьютером, но воз и нынче там. Причем под управлением подразумеваю не тыкать мышкой/клавиатурой в соцсети (тогда их не было), а контроль на уровне — какой код можно выполнять, а какой нет. Смотреть в любой момент память или состояние регистров процессора, выполняемые задачи и т.д. И при этом понимать что вообще происходит! До такого состояния как до Луны. Хотя нет, до Луны ближе.
литературы по этой теме сейчас (точнее, не только сейчас, а уже лет 30 как) — более чем достаточно. как бумажной, так и электронной. Как для «соответсвующих специальностей ВУЗов», так и для школьников. начиная от «энциклопедии профессора фортрана», и заканчивая упомянутой Харрис&Харрис.
Для практики начиная от поиска где-нибудь на авито какого-нибудь УМПК-80/УМПК-51 (или эмулятора процессора), и заканчивая пинбордой с изиэлектроникс (или платой FPGA с алиэкспресса)…

Не по теме, не в обиду, а вы спите тоже с "натянутой" улыбкой?

Это такой местный американский социальный протокол. Входит в привычку. С волками жить — по волчьи выть.
Пожелаем Даше, чтобы ее фамилия никак не повлияла на ее умения и результаты ее труда. А у меня дилетантский вопрос:
Чему надо научиться, чтобы я смогу сделать что-то похожее? Насколько высок порог вхождения в эту область?
Звучит как «как мне захотеть». Тут уж или интересно, и тогда хватаешь любую информацию и сразу бросаешься проверять на практите, или не интересно, и тогда «ну нафиг, почитаю лучше Хабр или посмотрю сериал».
Проблема в том, что я не знаю, чего конкретно захотеть: гуманитарий, у которого точные науки кончились после 8 класса школы, вряд ли в состоянии оценить, какой общеобразовательный багаж нужен, чтобы разобраться в строении компьютерного железа. А Хабр читать, по-моему, очень полезно, если с разбором.
Если вы скачаете книжку «Цифровая схемотехника и архитектура компьютера» Дэвида и Сары Харрис, и начнете ее читать, вы очень быстро сориентируетесь что вам нужно. Книжка написана с нуля, с уровня 8 класса, и идет вплоть до обзора продвинутых микроархитектур, по пути обучая двум языкам описания аппаратуры, синтезируемому подмножеству, основам архитектуры, цифровой схемотехнике итд.
На самом деле таки вредный совет.
Харрис&Харрис, как бы её не позиционировали авторы, имеет не нулевой порог вхождения. Совсем. А для гуманитария это окажется полным адом из-за количества информации, которую придётся переваривать (пусть и язык не самый сложный).
Вам нужен «Код. Тайный язык информатики» Петцольда. По-моему, для полных нулей соотношение осиляемости Петцольда к осиляемости Харрис&Харрис примерно равно соотношению осиляемости Х&Х к «Архитектуре» Танненбаума.
«ну нафиг, почитаю лучше Хабр или посмотрю сериал»

Мне аж стыдно стало.
> Пожелаем Даше, чтобы ее фамилия никак не повлияла

Имя тоже хорошее. Так и просится заголовок «Помоги Даше сделать нейроускоритель на ПЛИС».

И сама Даша подозрительно похожа на автора.
Статья вроде про «Десятиклассницу из Сибири», а на фото какие-то левые мужики…
КДПВ шикарна.

P.S. Фото не подписаны, так что не понятно, кто, где, зачем…

По-моему производительность с питоном сравнивать не нужно. И так ясно будет. Если только он не использует open cl с какой-нибудь среднестатистический видеокартой.

У Гугла же вроде есть свои TPU для тензорфло. Когда можно будет попробовать нейросетки запустить на ускорителях от Wave?
Шлю лучи поддержки за работу с российской молодёжью, спасибо! :)
Оффтоп, но… Почему-то сейчас мне надо сделать усилие, чтобы прочитать РОСНАНО именно как роснано, а не ПОЧАХО.
Ну правильно, комменты о фамилии, внешнем виде и БолгенОС.

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

Если брать, например, Ленет, то несжатые коеффициенты не влезут в набортную память недорогих ПЛИС. О более крупных сетях я даже не говорю.
А значит, нужно как-то планировать вычисления: загрузить часть коэффициентов, применить, загрузить следующую.
Вот какую именно и в каком именно порядке — нетривиальное решение для сверточных сетей, особенно когда надо целиком уместиться в 128 кбайт и при этом не быть безнадежно тормознутым. Ну, вот, в частности, если хочется выгружать хотя бы по 16 коэффициентов из однопортовой памяти за раз, нужно чтобы они были расположены рядом. Если брать стандартный row-major alignment из всяких кафе и тензорфлоу, то хорошо будут работать первые слои, а если col-major из Julia с матлабом, то последние. И видимо, нужно или городить многопортовую память, или хитро готовить данные в зависимости от слоя. Кажется, именно последнее делает nvidiа и movidius, но как именно, они, конечно, не спешат рассказывать. Еще туда же: некоторые университетские реализации эту проблему вообще не решают и говорят, что у нас будут только сверточные слои.
Другая проблема — переполнение/нормализация. В выгодном на ПЛИС целочисленном режиме за этим нужно внимательно следить. Настолько внимательно, что, кажется, проще использовать аппаратное FP. В принципе, если выкинуть denormals, то оно не такое страшное и вполне компактное для фп16. Другой (куда более модный) подход — угореть по одно- двух- или четырехбитным коеффициентам. Это реально работает (тм), куча статей с историями успеха, но этот путь явно сложнее.

Так что да, проект крутой, несмотря на весь хайп и определенно менее затасканный, чем свой процессор.
В качестве идеи, можно использовать сенсор от оптической мышки и радостно демонстрировать realtime распознавание. Даром, что для этого не нужна такая уж прямо скорость :)
Да ладно, Илья, пусть распознает цифирьки с минимальной матрицы 3x5 (15 пикселей), а константы хардкодит. Использовать для inference fixed point, а floating point оставить для трейнинга, который делать на десктопе на питоне. И 15 пикселей вводить кнопочками. Что, так не будет работать?
Ну, так конечно будет работать, но тогда теряется интерес. Рукописного ввода прямо карандашом на листочке не будет, да и сама сеть не нужна: 15 бит можно полностью покрыть table lookup-ом :)

А в LeNet'е ценность в том, что он хоть и маленький, но полностью настоящий. Учебно-боевой. Но там, если мне память не изменяет, 400k коэффициентов.
Нужно иметь весь спектр, от тривиального до интересного. Так чтобы можно было еще строить графики размера, частоты, accuracy — чтобы был просто для олимпиадства и чтобы шло на всех платах — от плат за $20 до плат за $20,000. Сейчас благо этим интересуется МИЭТ, МИЭМ, Самара, РОСНАНО итд — так что разные варианты работ и проектов упражнений можно раскидать на кучу людей с разным уровнем skills.
Кстати, сразу исследовательский вопрос для школьно-десятиклассного проекта: при каком N размер и эффективность систолического массива становится выгоднее, чем lookup table? Может реализовать так и так и померять.
особо не программист, но к примеру не понимаю, зачем вообще нейросейти и им подобное экспериментировать на слабых ПЛИС? Только для опыта оптимизации?
Ведь в реальности все равно нейросети не стоят и в ближайшее время не будут стоят в каждом доме. Это удел корпораций, которые предоставляют (захотят/могут предоставить) к себе доступ.
*** зачем вообще нейросейти и им подобное экспериментировать на слабых ПЛИС? Только для опыта оптимизации? ***

Потому что принципы 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 часов?
Вообще то дальше было написано
Подавление шума уже тоже есть. И т.п.
Тут скорее не про шум, а про галдёж вокруг. Например, человек работает на вокзале или на рынке, где вокруг постоянные разговоры. Какой должен быть подавитель шума, чтобы отсечь галдёж, но не отсечь кодовую фразу.
Можно и без шумного места — просто включенное радио или телик. Там не шум — там разговоры.
А какая разница? В тихом месте тоже надо будет запитывать АЦП, и CPU c FPU для шумодавителя и анализатор громкости. Разница с полным анализом на основном проце — будет процентов 20 энергопотребления. Все равно одно ядро будет постоянно активно, а это уже немало.
Основное — это голосовая активация с потреблением 650мкА. Да, можно и на процессоре, вот потребление будет в 100 раз больше, то есть в районе 65 мА. Все-таки нужно включить таймеры, CPU, FPU, АЦП… а с учетом, что там linux — так и вообще почти весь процессор.

P.S.
Снимать уровень звука ➜ ниже какого-то уровня ➜ дальше не реагировать.
Без процессора??? Как? АЦП у вас в процессоре, чтобы определить уровень громкости — нужен CPU и FPU. С учетом, что там linux, а не RTOS, фактически для этого должен быть включен (запитан) весь процессор. А запитанные части процессора потребляют энергию, независимого от того, используются они или нет. Просто если используются — потребляют совсем много.

Я вам по одному из своих GPS-ных чипов скажу
«РЕЗЕРВ» — 8мкА
«ВЫКЛЮЧЕН» — 150 мкА
СОН — 5 мА
ЭНЕРГОСБЕРЕЖЕНИЕ — 10 мА
«ОБНУЛЕН» — 20 мА
РАБОТА — 50 мА
ЗАПУСК — 110 мА
За сутки? У меня без всяких нейросетей ни один смартфон до вечера не доживал.
У меня от 4 до 7 дней на одной зарядке. Правда там 108 китайских ватт-часов.
После девочка пойдет в Интел. Который в один прекрасный момент закроет свое очередное (к тому моменту уже последнее) представительство в РФ. Предложив офер с релокейшеном для тех немногих, кого считает интересными. Потом скорее всего Калифорния (хотя именно Интел живет вроде севернее?). Потом… ну там как сложится сложно загадывать.
Штаб-квартира Интела в Санта-Клара, Калифорния, самом центре Silicon Valley. Отделение Интела в Портланд, Орегон значительное, но возникло позже.

Кто-то из России уедет, кто-то не уедет. В Silicon Valley гораздо менее живая социальная жизнь, чем в Москве.
> Кто-то из России уедет, кто-то не уедет. В Silicon Valley гораздо менее живая социальная жизнь, чем в Москве.

По мне так это лишь в плюс Долине :)
Я живу в Долине более 25 лет и могу сказать на основе опыта, что первые несколько лет вы будете заняты изучением нового окружения, но лет через 15-20 вы почувствуете ценность российского культурного окружения. Мне хоть моя жизнь в Калифорнии нравится (продвинутые коллеги на переднем краю), походы по холмам с ихучением местной флоры, но я с большим удовольствием езжу регулярно в Москву и вообще хотел бы проводить там несколько месяцев в году.
> но я с большим удовольствием езжу регулярно в Москву и вообще хотел бы проводить там несколько месяцев в году.

И это тоже вариант. Почему нет? Если позволяет время (главное) и финансы (иначе смысл в Долине?) то вполне себе.
Очень круто выглядит. Не удивлюсь если лет через 20 аппаратные ускорители нейросетей будут бизнесом с оборотом в сотни миллиардов долларов. На её месте, я бы действовал так:

— Серьёзно заняться этим проектом с прицелом на то как это можно будет встроить в телефоны. Какие нейросети самые популярные? Распознавание картинок? Что там ещё? Вот для них и сделать интересную демку. Идеальная демка выглядит примерно так: мы взяли нейросеть ResNet50, сделали её в софте и на нашем железе и получили разницу в скорости и энергопотреблении в 1000 раз и при этом мы даже не начали ещё ничего оптимизировать. Сделали акцент на то, что если такая фигня будет в телефонах, они смогут распознавать картинки гораздо лучше (одна из киллер фич нового Пикселя это именно распознавание текста камерой).
— Учить английский. Доходы и профессиональные возможности прежде всего зависят от того где вы работаете. Больших высот в Роснано не достичь.
— Подавать на internship в Гугл, Интел, NVidia и т.д. Судя по статье, она могла бы уже сейчас там работать. Представьте, что будет через 10 лет. За один internship летом вам дадут ну… тыщ 25 долларов.
— Получать диплом бакалавра или магистра и валить на следующий день. Диплом это пустая формальность, но он должен быть и на нём должны быть написаны правильные слова про математику и компьютерные науки. Все эти компании сейчас усиленно напирают на diversity & inclusion, поэтому оффер она получит в приоритетном порядке.
— Найти знакомых которые работают в этих компаниях и через них отправить резюме эйчарам. Можно конечно и напрямую послать, но у них там беклог из миллионов резюме и все посмотреть просто не получится. Идеальное место работы, как мне кажется, это подразделение Гугла которое занимается TPU. Там будут почти бесконечные ресурсы для всех этих ПЛИС.

По такому направлению годам к 25 можно грести в гугле пол миллиона долларов в год. Годам к 35 можно иметь некислый счёт в банке и возможность заиметь свою компанию.
Удачи Даше в дальнейшей работе! Молодец!
Во первых удачи Даше. Во вторых у меня богатый опыт в вопросах ускорения вычислений нейросети в FPGA и я бы хотел поделится опытом. Ускорение вычислений прошло несколько этапов (и я тоже :) ) попробую описать:
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, кое-что в FPGA. Кстати Intel сделал что то очень похожее в своих Stratix.

Бесспорно, эта ниша будет развиваться! Иногда думаю, как мне повезло что есть возможность начать знакомится с новой «идеей» прямо по мере её воплощения в жизнь. Согласитесь, в мире «железяк» это не так часто бывает
Xilinx Versal это ни что иное как ARM+co-processor+RAM в одном чипе.

Не очень. ARM там как были, так и остались, слегка увеличив свою производительность. Логика, RAM+DSP тоже. Но вот что новенькое — это AI Cores + внутренняя сеть для быстрой передачи данных (я так понял а-ля железная AXI). Так что ваш первый этап все еще жив.

Вы правы!!!
Напишу письмо их field engineers. Может дадут пробник «поиграть».
Юрий, мне кажется задача не самая удачная. Ну какой ускоритель сможет сделать девочка Даша! Какую-нибудь несерьезную игрушку на Cyclone 10, не более. Ибо что-то более интересное уже стоит совсем других денег. Я бы давал школьникам какие-то более практические задачи. Скажем делаем какой-то девайс, что-то измеряющий, что-то выдающий. Разумеется не одной девочке, а команде. Схему, алгоритмы и т.п. пусть придумывают сами. Пусть сами решают что реализовать на процессоре, что на ПЛИС и т.п. У нас например (1976-й год) именно так вели факультатив по физике. Ставилась задача. Преподаватель (вел факультатив отец отец одного из парней, физик) только консультирует. Всё остальное (включая токарные и стеклодувные работы — сами).
Это один из подходов (ориентированный на практически полезный продукт), но не единственный. Систолический массив сам по себе иллюстрирует несколько важных принципов (конвейерность в частности) и тем самым имеет образовательную ценность даже если проект не имеет практической ценности для непосредственного использования. Я в данном случае предлагаю разработать образовательное упражнение (то есть результат — не какой-нибудь практический измеритель, а материал по лабе для обучения)
Тогда прошу прощения, сразу не понял. Если это действительно будет не просто учебный проект, а некий обучающий материал, это действительно уже вполне полезный продукт. Я в 1999-м кстати делал нечто подобное по контракту с Sony. Писал для их PlayStation-II SDK пример использования их Multimedia Instruction Set для генерации процедурных текстур в реальном времени. Если девочка напишет что-то подобное, это будет исключительно достойно.
Юрий, а вообще-то я на Вашем месте подумал бы о чём-то подобном. Некий проект, на не очень дорогой отладочной плате, в который публика может легко контрибьютить. На мой взгляд совершенно идеальная железка это ice40-hx8k breakout board. Впрочем наверно есть и другие очень дешевые и очень удобные платы. Однако общей идеологией должно стать получение чего-то общеполезного. Если хотите, давайте обсудим.
Sign up to leave a comment.

Articles