Комментарии 22
Интереснее обученную сеть в ПЛИС погонять
Согласен, развлекаться интереснее, чем работать ))
Если правда интересно и есть минимальные компетенции в ПЛИС, что погонять вполне реально. Вот, к примеру, из нового - проект выиграл конкурс https://github.com/ptoupas/amd-open-hardware-23
Да и вообще, в плане запустить на 1 плате вендоры стараются. Мне это не интересно, но насколько знаю, контента полно и маршрут известен. Поищите информацию от производителей.
То есть вы хотите сказать что реализовали нейронную сеть на ПЛИС и успешно ее обучили?
К слову, я за последние пару недель, реализовал масштабируемую нейронную сеть(через параметры задаем число узлов в каждом слое, число слоев, есть возможность внедрения условного рандома весовым коэффициентам при инициализации), эта сеть имеет в себе механизм обучения обратного распространения ошибки. И я на этапе симуляции ее обучаю, в целом успешно(структура нейронной сети 2,3,2,1 - нейронов в каждом слое), но есть ряд проблем: 1.выбор активационной функции, метод обучения(набор данных, накапливать ошибку или после каждого прогона корректировать веса). 2.разрядность констант/данных/коэффициентов (если выбрать слишком большие разрядности то ресурсы съедаются огромные, если выбрать слишком маленькие разрядности то сеть ни когда не сойдется к нулевой ошибке)
P.S. кстати, если механизм обучения убрать из нейронной сети то она начинает весить в разы меньше, и если сеть с обучением занимает 2-3 ПЛИСы то без обучения она может и в одну влезть, возникает вопрос о сохранении(выгрузки) весовых коэффициентов пользователю, мне кажется этот механизм отъест еще больше ресурсов
А какже там всякие Google Coral и прочие, разве там не ПЛИС/ASIC ?
А во главе всего — отсутствие решающего преимущества
В начале статьи очень много рассуждений об абстрактных преимуществах и недостатках обучения ИНС на том или ином железе, но потом почему-то сразу резкий переход на обсуждение конкретных имплементаций в ПЛИС, а что и ради чего оптимизируем - как-то упущено.
В капиталистическом обществе эксплуатантов интересуют только две вещи: CapEx & OpEx. Лично я не вижу у ПЛИС для задачи обучения ИНС какого-то картбаланша, чтобы при удачном стечении обстоятельств (имплементации какой-либо супер-мега-архитектуры) они "выстрелили". Пиковыми TOPSами в обществе в 2023г как-то уже меряться неприлично, всем подавай реальный коэффициент утилизации на конкретной задаче.
PS: Если у вас есть инсайт, то с удовольствием бы послушал - может действительно ветер сменился и пора расчехлять синтезатор.
а что и ради чего оптимизируем - как-то упущено.
Странно, я вроде на этом как раз и делал акцент.
Сколько GPT обучается? 3 недели, месяц? А если бы она обучалась, скажем, за 2 дня - это ли не картбланш? Для ОпенАИ может и нет, а вот для догоняющих очень даже!
TOPSами мерятся действительно толку нету, но я о них и не говорил. Если Вы имеете ввиду цифры скорости потоков - то они имеют сугубо практическое значение.
А производительность считается просто(в конце статьи пример). Для обработки изображений: (пикселей в картинке / 4) * картинок в 1 эпохе * на количество эпох * (3.333пс период рабочей частоты)
Для "внимания" ещё не могу сказать, к сожалению.
Благодарю за развёрнутый ответ.
"Сокращение времени обучения в N раз" - процедура не бесплатная, более того имеющая какой-то запас масштабируемости в рамках уже используемого железа/подхода при увеличении стоимости железа в M раз.
Т.о. вопросы (от эксплуатантов этой инфраструктуры) остаются прежними при выборе/сравнении GPU vs FPGA:
при единоразовой трате на оборудование в Х рублей сколько обученных ИНС можно получить в год/месяц/день?
какие эксплуатационные расходы необходимы для получения одной обученной ИНС на этом оборудовании?
И даже если на графиках GPU vs FPGA (X/Y: time/$) FPGA где-то догонит и перегонит GPU, то это может быть очень большой срок, который врядли устроит эксплуатантов (и склонит их выбор в сторону FPGA). А если они не готовы платить, то уже имеем то, что имеем: "общее низкое число специалистов, слабое сообщество, бесконечная сложность написания кода по сравнению с PyTorch". Рыночек порешал, как говорится.
не нашел reti_neurali_base_0828 в репозитории, гляньте если не сложно
Интересно, а на вскидку, какие ресурсы должен иметь автономный агробот для распознавания колорадского жука, личинок, сорняков (чтобы их чикнуть) ?
Извините, я пока далёк от практики "в поле" )
А чем CUDA не устраивает?
Обычно используют nvidia xavier или мощную видеокарту, как например nvidia 3080. Вообще, автономному роботу может понадобиться параллельно ещё делать другие расчёты, как, например, планировать маршрут, определять собственное положение в пространстве, поэтому может понадобиться параллельно использовать несколько нейросетей одновременно. У Xavier на это мощности хватит.
не лазером же это делать
Вы будете удивлены ;) уже давно натыкался на какую-то статью зарубежную, там было то ли рыбное хозяйство, то ли еще что-то подводное, но в акватории реального водоема, и вот, если в садок с "разводимым материалом" (уж не помню, чего они там разводили, а ссылку найти не могу - пусть будут рыбы) проникал вредитель и начинал их жрать, комплюктерные методы детектировали ситуацию, получаемую с систем видеонаблюдения и делали лазером пиу-пиу. Даже видосик был в той статье. Выглядит футуристично.
(triller599) Интересно, разработчики "далеки от практики "в поле" или оборудование не дозрело ? (автономный - это без связи и размером с собачку)
Если обучать нейросеть на рассмотренной системе из нескольких FPGA на частоте ядра 300 МГц изображениями 640х640 и подавать на вход алгоритма 4 пикселя за такт, то для прогона 1 млн изображений необходимо около 6 минут.
Признаться я прочитал статью несколько по диагонали, особенно после упоминания обучения на целочисленной математике. Но вот это утверждение в конце вызывает у меня явное недоумение.
Вы правда думаете, что самым узким местом в этой системе будут входные активации данные, а не все те веса параметры, которые вам надо обновлять на каждом шаге? Я уже не говорю про один или более моментов на каждый параметр, если для обучения используется какой-нить Adam.
Кстати, ваша "стандартная свёрточная нейросеть" включает batch normalization или какие-то другие слои подразумевающие несколько проходов по всем данным batch-а при прямом и/или обратном распространении? Какая функция ошибок предполагается к использованию?
Моё общее впечатление, что вы выбрали довольно удобный частный случай и сделанные на его основе предположения лёгким движением руки прикладываете к намного более широкому кругу задач. Вот только всякие милые частности, которые так любят придумывать разработчики нейросетей в полном отрыве от проблем их вычислительной сложности, могут запросто порушить вашу архитектуру.
Ну и в качестве вишенки на торте. Даже если вы внезапно разработаете аппаратную часть этого проекта, не забудьте прибавить ещё два раза по столько же человеко-часов недешёвых программистов, которые будут сращивать её со всякими там TensorFlow, PyTorch и что там ещё нынче модно из framework-ов. Потому что, как вы правильно заметили в статье, разработчикам нейросетей не нужны эти ваши железки, им нужно готовое решение которое по нажатию одной кнопки будет проглатывать их свежее творение в tf, pt или ещё каком-нить модном формате, запускать его обучение выдавая в процессе понятные этим разработчикам графики и циферблаты, и возвращать результат упакованный в тот же модный формат. И к этим два раза по столько человеко-часов не забудьте прибавить ещё неопределённое количество на поддержку всё новых версий и вариантов этих framework-ов.
Это всё я вам пишу как человек, который работает в компании занимающейся NN-ускорителями, где большая часть инженеров - это таки программисты а не железячники. И это вовсе не потому что начальство программистов больше любит...
Отличный комментарий, спасибо!
Ну и в качестве вишенки на торте. Даже если вы внезапно разработаете аппаратную часть этого проекта, не забудьте прибавить ещё два раза по столько же человеко-часов недешёвых программистов, которые будут сращивать её со всякими там TensorFlow, PyTorch
Вот по-диагонали прочитали, отсюда и вопрос. Я чётко указал, что без участия вендоров проблему широкого распространения и простого использования не решить. Они, кстати, вкладывают приличные деньги в развитие, но как я уже высказал в статье, по-моему не туда.
им нужно готовое решение которое по нажатию одной кнопки будет проглатывать их свежее творение в tf, pt или ещё каком-нить модном формате, запускать его обучение выдавая в процессе понятные этим разработчикам графики и циферблаты, и возвращать результат упакованный в тот же модный формат.
Я не согласен. "Модные циферблаты" нужны IT-отделам банков и прочим, потому, что иметь IT отдел модно. А в результате работы всё равно наверху никто толком не разберётся.
Работающий и зависящий от результата инженер не будет загонять свой "полёт фантазии(ваши слова)" в видеокарту и ждать сутки. Он будет думать сутки - а вот проверить хотел бы за полчаса. Чтобы дальше думать.
Моё общее впечатление, что вы выбрали довольно удобный частный случай
Я выбрал для себя наиболее понятный и наглядный вариант. А самое важное - тот, который могу в одиночку реализовать. Если будет возможность, я приделаю «внимание» - тогда всё станет гораздо понятнее.
Кстати, ваша "стандартная свёрточная нейросеть" включает batch normalization или какие-то другие слои подразумевающие несколько проходов
Извините, но Ваши рассуждения мне кажутся именно «модными». Сделать всё стандартно и пусть железо тянет. В моей реализации нет нормализации, но их существует уже с десяток разных и некоторые вполне хорошо должны лечь на архитектуру ПЛИС.
Батч-нормализация, float-ы, да даже softmax – плоды ограничений существующей доминирующей архитектуры. А ещё подхода «не думать!» Я использую пороги в качестве ошибки, но и softmax с определённой точностью нормально ложится на ПЛИС — есть алгоритмы. Если вопрос именно в этом.
особенно после упоминания обучения на целочисленной математике
Снова «стандарт» Хотя, если Вы разработчик ускорителей, то Вас и должны интересовать модные инженеры с деньгами, и думать Вы должны с их точки зрения. Я это понимаю.
В то же время считаю, что float – вообще зло! Моя практика показывает, что важно, насколько точно можно подстраивать веса при обратном распространении а не абсолютный динамический диапазон. Ведь смысл float именно в возможности представить и очень большие, и очень маленькие значения.. приблизительно! А что будет, если для float16(для наглядности примера) к числу 2048 прибавить 1? А ничего, оно не изменится. То же самое верно и для чисел меньше 1. С обучением сети веса начинают изменятся всё меньше и меньше и в какой то момент большая часть начинает «терять» ошибку и наблюдается рост lossa. Я это видел благодаря int очень чётко, а вот многие этого даже не поняли — благодарности float.
И моё ИМХО таково, что батч-нормализация существует отнюдь не для выравнивания мат ожидания и дисперсии, а чтобы сузить динамический диапазон значений. Ведь существует dropout, а при нём вообще каждое новое данное имеет своё мат ожидание и дисперсию — и ничего, работает как-то.
Хотя эта тема для отдельной статьи после накопления материала. Ну или нет, если мои рассуждения — глупости))
В целом пока, конечно, можно сказать, что ты «оторван от реальности» и мне с этим будет спорить сложно, но лично я реализовав на практике чесную конвейерную нейросеть с ростом масштаба предвижу потенциальные проблемы с потоками а не с параметрами
Если обучать нейросеть на рассмотренной системе из нескольких FPGA на частоте ядра 300 МГц изображениями 640х640 и подавать на вход алгоритма 4 пикселя за такт, то для прогона 1 млн изображений необходимо около 6 минут.
Скажите пожалуйста, это по-Вашему много или мало? Раз уж Вы отреагировали именно на эту фразу. Мне это важно.
Хорошо, если вы хотите цифр то их есть у меня.
Чтобы придать реалистичности понятию "стандартная свёрточная нейросеть" возьмём широко известный и часто используемый для тестов производительности ResNet50. У меня в закромах как раз завалялся простенький калькулятор вычислительной сложности для этой сети, сделанный когда-то для оценки реализуемости одного проекта. Сделан он был на коленке, так что за абсолютную точность не ручаюсь, но оценку количества требуемых MADD-ов он выдаёт вполне реалистичную.
Так вот, для входа размером 640х640 у меня получилось 100G (я имею в виду 100,000,000,000) MADD-ов на один кадр. Это для режима обучения, который обычно требует х3 операций по сравнению с прогоном обученной сети.
Если взять для ориентира упомянутый в статье Кинтекс с 2000 DSP блоков работающих на 300 МГц, и предположить что все эти блоки задействованы со 100% эффективности, то мы получаем производительность в 600G MADD-ов в секунду. Т.е. на одном таком ПЛИС производительность обучения ResNet50 составит порядка 6 кадров в секунду. Поправьте меня если я где-то ошибся в вычислениях.
Как видно, это сильно отличается от 3000 кадров в секунду, которые вы заявляете в заключительной части статьи. И если даже предположить что вы обеспечите идеальную масштабируемость, то ваши "несколько FPGA" плавно превращаются в 500 штук. Даже если рассчитывать на более "жирные" ПЛИС, их количество будет хорошо если двузначным.
Надеюсь что я достаточно подробно объяснил, почему я сильно сомневаюсь что именно ввод данных будет узким местом в такой системе?
Кроме того, что-то мне подсказывает что система сопоставимой стоимости на базе GPU (или каких-то специализированных ASIC-ов) будет иметь как минимум не меньшую производительность, потому как в эффективную параллелизацию можно играть отнюдь не только с использованием ПЛИС. Да и быстрые линки и внешняя память в этих системах вполне себе используется.
Я вижу, что вам нравится ваша архитектура и вы готовы её защищать от посягательств безответственных критиканов, вроде меня. Это чудесно на самом деле, поскольку мотивация очень важна для инженера. Боюсь только что ваш подход "я придумал правильную архитектуру и вы все должны подстроиться под неё" не подходит для проекта претендующего на широкое распространение. Увы, если вы хотите сделать что-то, что люди будут использовать, вам стоит начать с того, что они хотят. А хотят они вот эти самые модные float-ы, batch normalization и много чего ещё. И надо вам сказать, во многих случаях они хотят это не от хорошей жизни, а потому что по другому сеть просто не сходится.
Если вы твёрдо уверены, что ваш подход эффективнее, чем всё что придумали все эти люди, 100% времени занятые тем чтобы найти более лучшие алгоритмы обучения, то возможно вам стоит начать с статьи в каком-то профильном издании или на конференции в которой вы покажете как избежать детских ошибок и получить отличные результаты сходимости на реальных задачах по обучению. Тогда и желающие использовать вашу архитектуру появятся.
P.S.Извините, что сразу не ответил - карма моя уже не та, а потом было немного не до того.
Обучение больших нейронных сетей на ПЛИС: утопия или…