Нейронные сеточки захватывают мир. Они считают посетителей, контролируют качество, ведут статистику и оценивают безопасность. Куча стартапов, использование в промышленности.
Замечательные фреймворки. Что PyTorch, что второй TensorFlow. Всё становиться удобнее и удобнее, проще и проще…
Но есть одна тёмная сторона. Про неё стараются молчать. Там нет ничего радостного, только тьма и отчаяние. Каждый раз когда видишь позитивную статью — грустно вздыхаешь, так как понимаешь что просто человек что-то не понял. Или скрыл.
Давайте поговорим про продакшн на embedded-устройствах.



В чём проблема.


Казалось бы. Посмотри производительность устройства, убедись что её достаточно, запусти и получай профит.
Но, как всегда, есть пара нюансов. Давайте разложим их по полкам:
  1. Production. Если ваше устройство делается не в единичных экземплярах, тогда надо быть уверенным что система не зависнет, что устройства не будут перегреваться, что при пропадании питания всё автоматически загрузится. И это на большой партии. Это даёт лишь два варианта — либо устройство должно быть полностью разработано с учётом всех возможных проблем. Либо надо побороть проблемы исходного устройства. Ну, например вот такие (1, 2 ). Что, понятно, жесть. Чтобы решить проблемы чужого устройства на больших партиях надо потратить нереальный объём сил.
  2. Реальные бэнчмарки. Очень много жульничества и хитрости. NVIDIA в большинстве примеров завышает производительность на 30-40%. Но не только она этим развлекается. Ниже я привожу много примеров когда производительность может быть в 4-5 раз меньше чем хочешь. Нельзя закладываться “на компе всё хорошо работало, тут будет пропорционально хуже”.
  3. Очень ограниченная поддержка архитектуры нейронных сетей. Есть много аппаратных embedded платформ которые очень сильно ограничивают сети которые можно на них запустить (Coral, gyrfalcone, snapdragon). Портирование на такие платформы будет вызывать боль.
  4. Поддержка. У вас что-то не работает, а проблема на стороне устройства?.. Это судьба, оно и не будет работать. Только для RPi комьюнити затыкает большую часть багов. И, частично, для Jetson.
  5. Цена. Многим кажется что embedded это дёшево. Но, в реальности, с ростом производительности устройства, цена будет расти почти экспоненциально. RPi-4 в 5 раз дешевле Jetson Nano/Google Coral и в 2-3 раза слабее. Jetson Nano в 5 раз дешевле Jetson TX2/Intel NUC, и в 2-3 раза слабее их.
  6. Лоргус. Помните такую конструкцию из Желязны? Кажется именно его я поставил в качестве титульной картинки...the Logrus is a shifting, three-dimensional maze which represents the forces of Chaos in the multiverse”.Тут так же. Всё это обилие багов и дыр, все эти разномастные железки, все меняющиеся фреймворки… Это нормально когда за 2-3 месяца картина рынка полностью меняется. За этот год она поменялась 3-4 раза. Нельзя войти в одну и ту же реку дважды. Так что все текущие мысли справедливы примерно на лето 2019 года.


Что есть


Разберём по порядку, на вкус он не сладкий… Что сейчас вообще есть и пригодно для нейронок? Вариантов, не смотря на их изменчивость, не так уж и много. Несколько общих слов, чтобы оограничить перебор:
  1. Я не буду разбирать нейронки/инференс на телефонах. Это сама по себе огромная тема. Но так как телефоны это embedded платформы лишь с натягом, не думаю что это плохо.
  2. Я затрону Jetson TX1|TX2. В нынешних условиях это не самые оптимальные из платформ по цене, но есть ситуации когда их всё же удобно использовать.
  3. Я не гарантирую что в списке будут все платформы которые существуют сегодня. Может что-то забыл, может про что-то не знаю. Если знаете ещё интересные платформы — пишите!


Итак. Основные вещи, которые явно Embeding. В статье мы будем сравнивать именно их:



  1. Платформа Jetson. Для неё есть несколько устройств:
    • Jetson Nano — дешевая и достаточно современная (весна 2019г.) игрушка
    • Jetson Tx1|Tx2 — достаточно дорогие но хорошие по производительности и универсальности платформы

  2. Raspberry Pi. Реально для нейронных сеток сейчас производительность есть лишь у RPi4. Но какие-то отдельные задачки можно и на третьем поколении делать. Совсем простые сетки я даже на первом пускал.
  3. Платформа Google Coral. По сути для embeding устройств там есть только один чип и два девайса — Dev Board и USB Accelerator
  4. Платформа Intel Movidius. Если вы не огромная компания, то для вас будут доступны только стики Movidius 1|Movidius 2.
  5. Платформа Gyrfalcone. Чудо китайских технологий. Есть уже два поколения — 2801, 2803


Прочее. Про них поговорим после основных сравнений:
  1. Intel процессоры. В первую очередь сборки NUC.Почти embedding
  2. Nvidia мобильные GPU. Готовые решения, можно считать, не embedding. А если собирать embedding, то получиться прилично по финансам.
  3. Мобильники. Android характерен тем что для использования максимума производительности надо использовать по максимуму именно то железо которое у конкретного производителя. Или использовать что-то универсальное, такое как tensorflow light. Для Apple то же самое.
  4. Jetson AGX Xavier — дорогая версия Jetson с большей производительностью.
  5. GAP8 — низкопотребляющие процессоры для супердешёвых устройств.
  6. Загадочный Grove AI HAT


Jetson


С Jetson мы работаем очень долго. Ещё в 2014 году Vasyutka придумал математику для тогдашнего Стрижа именно на Jetson. В 2015 году на встрече с Artec 3D мы рассказали о том какая это классная платформа, после чего они предложили нам собрать прототип на его базе. Через пару месяцев прототип был готов. Ещё пара лет работы всей фирмы, пару лет проклятий проклятий в адрес платформы и в адрес небес… И родился Artec Leo — самый классный сканер в своём классе. Даже Nvidia на презентации TX2 показывала его как один из самых интересных проектов созданных на платформе.
С тех пор TX1/TX2/Nano мы использовали где-то в 5-6 проектах.
И, наверное, знаем все проблемы которые были с платформой. Давайте разберём по порядку.

Jetson TK1


Про него особо говорить не буду. Платформа была очень эффективная по вычислительной мощности на свой день. Но она не была продуктовой. NVIDIA продавала чипы TegraTK1, который лежал в основе Jetson. Но эти чипы было невозможно использовать мелким и средним производителям. Реально что-то на них смогли сделать кроме Nvidia только Google/HTC/Xiaomi/Acer/Google. Все остальные интегрировали в прод либо отладочные платы, либо мародерствовали другие устройства.

Jetson TX1|TX2


Nvidia сделала правильные выводы, и следующее поколение было сделано офигенно. TX1|TX2, это уже не чипы, а чип на плате.
image image
Они дороже, но имеют вполне продуктовый уровень. Небольшая фирма может интегрировать их в свой продукт, этот продукт предсказуемый и стабильно работающий. Я видел лично как 3-4 продукта доводили до продакшна — и всё было неплохо.
Буду говорить про TX2, так как из текущей линейки это основная плата.
Но, естественно, не всё слава богу. Что не так:
  1. Jetson TX2 это дорогая платформа. В большинстве продуктов вы будете использовать основной модуль (как я понимаю от размера партии цена будет где-то от 200-250 до 350-400 у.е. за штуку). Для него нужна CarrierBoard. Не знаю текущий рынок, но раньше это было примерно 100-300 у.е. в зависимости от комплектации. Ну, и сверху ваш обвес.
  2. Jetson TX2 это не самая быстрая платформа. Ниже мы будем обсуждать сравнительные скорости, там я покажу почему это не лучший вариант.
  3. Надо отводить много тепла. Наверное это справедливо для почти всех платформ про которые мы будем говорить. Корпус должен решать проблему теплоотведения. Вентиляторы.
  4. Это плохая платформа для маленьких партий. Партии в сотни устройств — ок. Заказать материнские платы, разработать дизайн и корпусировать — норм. Партии в тысячи устройств? Разработать свою материнку — и шикарно. Если вам нужно 5-10 — плохо. Вам придётся брать DevBoard скорее всего. Они большого размера, их немного мерзко прошивать. Это не платформа уровня RPi-готовности.
  5. Плохая поддержка от Nvidia в плане технических вопросов. Слышал очень много ругани что на запросы отвечают что либо это секретная информация, либо ответы по месяцу.
  6. Плохая инфраструктура в России. Сложно заказывать, надо долго ждать. Но при этом дилеры работают хорошо. Мне попался недавно Jetson nano который сгорел в день запуска — поменяли без вопросов. Сам забрали курьером/привезли новый. ВАХ! Так же, сам видел, что московский офис консультирует хорошо. Но как только уровень их знаний не позволяет ответить на вопрос и требует запроса к международному офису — ответов ждать долго.


Что офигенно:
  1. Очень много информации, очень большое комьюнити.
  2. Вокруг Nvidia много мелких фирм выпускающих аксессуары. Они открыты к переговорам, вы можете затюнинговать их решение. И CarierBoard, и прошивку, и охлаждающие системы.
  3. Поддержка всех нормальных фреймворков (TensorFlow|PyTorch) и полноценная поддержка всех сетей. Единственную конвертацию которую, возможно, вам придётся сделать — это перенести код на TensorRT. Это сохранит память, возможно ускорит. По сравнению с тем что будет на других платформах это смешно.
  4. Я не умею разводить платы. Но от тех кто это делал для Nvidia — слышал что TX2 это неплохой вариант. Есть мануалы, соответствуют реальности.
  5. Неплохое энергопотребление. Но из всего что будет у нас именно “embedded” — самое плохое:)
  6. Суппорт в России (выше объяснял почему)
  7. В отличие от movidius | RPi | Coral | Gyrfalcon — это настоящий GPU. Вы можете гонять на нём не только сетки, но и нормальные алгоритмы


Как результат — это хорошая платформа для вас если у вас штучные девайсы, но по каким-то причинам вы не можете поставить полноценный комп. Что-то массовое? Биометрия — скорее нет. Распознавание номеров — на грани, зависит от потока. Переносимые устройства с ценой овер 5к баксов — возможно. Автомобили — нет, проще ставить более мощную платформу чуть дороже.
Как мне кажется, с выходом нового поколения дешёвых девайсов TX2 со временем умрёт.

Материнские платы для Jetson TX1|TX2|TX2i и прочие выглядят примерно так:
image
А вот тут или тут больше вариаций.

Jetson Nano


image
Jetson Nano это очень интересная штука. Для Nvidia это новый форм-фактор, который по революционности должен был бы сравниться с TK1. Но уже поджимают конкуренты. Есть и другие устройства про которые мы поговорим. Он в 2 раза слабее TX2, но дешевле в 4 раза. Точнее как… Математика тут сложная. Jetson Nano на демо-плате стоит 100 баксов (в Европе). Но если вы покупаете только чип, то он будет дороже. А ещё вам нужно будет его развести (материнок для него пока нет). И это на большой партии дай бог в 2 раза выйдет дешевле чем TX2.
По сути, Jetson Nano на своём базовом борде — это такой рекламный продукт для институтов/ресёрчеров/любителей, который должен подстегивать интерес и бизнес применение. По плюсам и минусам (частично пересекается с TX2):
  1. Конструкция слабая и не отлаженная:
    • Перегревается, при постоянной нагрузке периодически виснеты/вылетает. Знакомая фирма уже 3 месяца пытается забороть все проблемы — не выходит.
    • У меня один погорел при питании с USB. Слышал, что у одного знакомого погорел USB выход, а работал штекерный. Скорее всего какие-то траблы с питанием USB.
    • Если корпусировать оригинальную плату — то радиатора от NVIDIA не хватит, нафиг перегреется.

  2. Скорости как-то маловато. Почти в 2 раза меньше TX2 (в реальности может и в 1.5, но зависит от задачи).
  3. Партии в 5-10 устройств — вообще очень хорошо. 50-200 — сложно, придётся компенсировать все баги производителя, обвешивать вотчдогами, если надо добавить что-то типо POE, то будет больно. Более большие партии. На сегодня не слышал пока про успешные проекты. Но мне кажется, что там сложности могут всплыть как с TK1. Если честно, то хочется надеяться что в следующем году выйдет Jetson Nano 2, где эти детские болезни поправят.
  4. Поддержка плохая, same as TX2
  5. Плохая инфраструктура


Хорошее:
  1. Достаточно бюджетно, в сравнении с конкурентами. Особенно для малых партий. Выгодно по «цена/производительность»
  2. В отличие от movidius | RPi | Coral | Gyrfalcon — это настоящий GPU. Вы можете гонять на нём не только сетки, но и нормальные алгоритмы
  3. Просто запустить любую сеть (same as tx2)
  4. Энергопотребление (same as tx2)
  5. Суппорт в России (same as tx2)


Сам Nano вышел в начале весны, где-то с апреля/мая я активно в него тыкался. Успели уже два проекта сделать на них. В целом проблемы обозначил выше. Как хоббийный продукт/продукт для малых партий — очень круто. Но можно ли затащить в продакшн и как это сделать — пока не понятно.

Поговорим о скорости Jetson.


Сравнивать с другими устройствами мы будем сильно позже. А пока просто поговорим о Jetson и скорости. Почему Nvidia нас обманывает. Как оптимизировать ваши проекты.
Ниже всё пишется про TensorRT-5.1. С 17.09.2019 вышла TensorRT-6.0.1, все утверждения надо перепроверять там.
Давайте предположим, что поверим Nvidia. Откроем их сайт и посмотрим время инференса SSD-mobilenet-v2 на 300*300:
image
Вау, 39FPS (25ms). Да ещё и исходники выкладывают!

Хмм… А почему же вот тут пишут про 46ms?

Погодите… А вот тут пишут что 309 ms натив, а 72ms портированный…

image

Где правда?
Правда в том, что все считают очень разное:
  1. SSD состоит из двух частей. Одна часть — это нейронка. Вторая часть — постобработка того что выдала нейронка (non maximum suppression) + предобработка того что загружается на вход.
  2. Как я и говорил ранее, под Jetson всё надо конвертировать в TensorRT. Это такой нативный фреймворк от NVIDIA. Без него всё будет плохо. Только вот есть одна проблемка. Портируется туда далеко не всё, особенно из TensorFlow. Глобально есть два подхода:
    • Google, сам понимая, что это проблема, выпустил для TensorFlow такую штуку, которая называется “tf-trt”. По сути это надстройка на tf, которая позволяет конвертировать на tensorrt любую сетку. Части которые не поддерживаются — инферятся на CPU, остальное на GPU.
    • Переписать все слои/найти их аналоги


В примерах выше:
  • В этой ссылке время 300ms это обычный tensorflow без оптимизации.
  • Там же, 72ms — это tf-trt версия. Там весь nms по сути делается на проце.
  • Это фанатская версия, где человек весь nms перенёс и сам написал на gpu.
  • А это… Это NVIDIA решила измерить все производительности без постобработки нигде явно об этом не упомянув.


Для себя надо понимать, что если бы это была ваша нейронка, которую бы никто до вас не конвертировал, то без проблем вы бы смогли запустить её со скоростью 72ms. А со скоростью 46 ms посидев над мануалами и сорсами день-недельку.
По сравнению со многими другими вариантами — это очень хорошо. Но не забывайте, что что бы вы не делали — никогда не верьте бенчмаркам от NVIDIA!

RaspberryPI 4


Продакшн?.. Я так и слышу, как десятки инженеров начинают смеяться от упоминания слова “RPI” и “продакшн” рядом. Но, я вынужден сказать — RPI всё же стабильнее Jetson Nano и Google Coral. Но, безусловно, проигрывает TX2 и, судя по всему, gyrfalcone.
image
(Картинка отсюда. Мне кажется что приделывание вентиляторы к RPi4 это отдельное народная развлекуха.)
Из всего списка это единственный девайс который я не держал в руках/не тестил. Но пускал нейронки на Rpi, Rpi2, Rpi3 (например тут рассказывал). В целом Rpi4, как я понимаю, отличается только производительностью. Мне кажется, что плюсы и минусы у RPi знают всё, но всё же. Минусы:

  1. Как бы не хотелось, это не продуктовое решение. Перегревы. Периодические зависания. Но за счёт огромного комьюнити на каждую проблему есть сотни решений. Это не делает Rpi хорошим для тысячных тиражей. Но десятки/сотни — вай нот.
  2. Скорость. Это самое медленное устройство из всех основных про которые мы говорим.
  3. Поддержка от производителя почти отсутствует. Товар ориентирован на энтузиастов.

Плюсы:

  1. Цена. Нет, конечно, если вы сами разводите плату, то используя gyrfalcone вы может быть сможете сделать дешевле на партиях в тысячи. Но скорее всего это нереально. Там где производительности RPi хватает — это будет самое дешёвое решение.
  2. Популярность. Когда вышел Caffe2, то в базовом релизе была версия под Rpi. Tensorflow light? Конечно работает. И.т.д., и.т.п. Что не делает производитель — переносят пользователи. Я запускал на разных RPi и Caffe и Tensorflow и PyTorch, и кучу более редких вещей.
  3. Удобство для маленьких партий/штучных изделий. Просто прошить флешку и запустить. Есть WiFi на борту, в отличие от JetsonNano. Можно просто через PoE запитать (вроде там нужно докупить переходник, которые продаются активно).


Про скорость Rpi мы поговорим в конце. Так как производитель не постулирует что его продукт для нейронок — то мало бенчмарков. Всем понятно что Rpi не идеален по скорости. Но для каких-то задач годится даже он.
У нас было пара полупродуктовых задач, которые мы реализовывали на Rpi. Впечатление было приятное.

Movidius 2



Отсюда и ниже пойдут не полноценные процессоры, а процессоры разработанные специально под нейронные сетки. Это как бы их сильная и слабая сторона одновременно.
Итак. Movidius. Компания была куплена Intel в 2016 году. В интересующем нас сегменте компания выпустила два продукта, Movidius и Movidius 2. Второй быстрее, говорить будем только про второй.
Хотя нет, не так. Разговор надо начинать не с Movidius, а с Intel OpenVino. Я бы сказал, что это идеология. А точнее фреймворк. По сути это набор предобученных нейронок и инференесов к ним, которые оптимизированы под продукты компании Intel (процы, GPU, спецвычислители). Интегрированный с OpenCV, с Raspberry Pi, с кучей других свистелок и перделок.
Плюсом OpenVino является то, что в нём масса нейронок. В первую очередь самые известные детекторы. Нейронки для распознавания людей, лиц, номеров, букв, поз, и.т.д., и.т.п. (1, 2, 3). И они обучены. Не по открытым датасетам, а по датасетам собранным самим Intel’ом. Они сильно больше/разнообразнее и лучше открытых. Их можно дообучить по вашим кейсам, тогда работать будут вообще классно.
Можно ли сделать лучше? Конечно можно. Например распознавание номеров которое мы делали — работало ощутимо лучше. Но мы потратили на его разработку и понимание как его сделать идеально — много лет. А тут вы можете из коробки получить охрененное качество, которого вам хватит для большинства кейсов.
У OpenVino, конечно, есть несколько проблем. Сетки там появляются далеко не сразу. Если что-то новое выйдет — вам долго ждать. Сетки там появляются глубоко продуктовые. Никаких GANов вы там не найдёте. Только глубокая польза. И, по нашему опыту, туда достаточно сложно перегнать сетку, если у вас есть какие-то хитрости в архитектуре, отличные от суровых стандартов. Зато ребята перегнали некоторые, даже достаточно сложные модели:
image
Мне кажется, что Intel со своим OpenVino выбрал очень интересную стратегию. Они в роли постоянного догоняющего. Но такого, который после того как догоняет размазывает любого. В тот момент когда из нейронок выжмут всё — придёт Интел и захватит готовый рынок. Уже сейчас в 70% задачах можно собрать решение на основе OpenVino.
И в рамках этой стратегии Movidius выглядит её логичным дополнением. Это устройство на котором нужно инфересить всё это богатство. Большинство сеток оптимизировано именно под него (иногда даже до бинарной архитектуры, что очень быстро).
Глобально минус у него один. USB это, блин, не продуктовый разъём!!! Вы не можете сделать девайсину с USB. Выход есть. Intel продаёт чипы. Даже что-то такое есть в продаже на прошлом поколении (1, 2)
Вроде как есть продукты на нём. Но я не видел ни одной продуктовой платы на которой можно было бы разработать что-то. И ни одна знакомая мелко-средняя фирма ничего разрабатывать на базе этого чипа не начинала.
С другой стороны что будет танку?.. Он нас всё равно догонит и раздавит:)
Ах да, и из радостного. OpenVino, как я понимаю, разрабатывают в России, в Нижнем Новгороде (мне кажется что половину Computer Vision делают там). Вот тут Сергей про него рассказывает:

(доклад скорее про AI 2.0, но про OpenVino там много).

Ладно, уже почти про всё сказали. Краткая вытяжка по Movidius 2. Минусы:
  1. Базовая версия не продуктовая. Хуже Rpi и Jetson Nano. Можно ли купить чип и собрать на его основе свой девайс — не понятно. Но в любом случае это долго и дорого. Возможно выйдут Third Party решения?
  2. Свои сети сложно портировать. Необычные слои сразу в минус. Частично компенсируется представленным спектром сетей.
  3. Скорость не самая быстрая. Но об этом позже.
  4. Нужно базовое устройство для запуска. Скорость инференса зависит от устройства и от наличия на нём USB 3.0
  5. Если я правильно понимаю, то две сетки держать в памяти одновременно нельзя. Надо выполнить выгрузку-загрузку. Что замедляет инференс нескольких сетей. Для Movidius первого поколения это точно было так. Вроде ничего не должно было поменяться.

Плюсы:
  1. Очень простой и удобный. Достаточно минимального знания питона чтобы создать рабочий прототип. Не надо ничего обучать.
  2. Низкое энергопотребление, не перегревается
  3. Неплохая поддержка, как я слышал

Сами мы не использовали его ни в одном проекте. Все наши знакомые которые тестили его для инференса задач — в результате не взяли в продакшн.
Но пара фирм которые я консультировал, где были задачи уровня “нам надо поставить 20-30 камер на шлагбаумы, но покупать ничего не хотим, разработаем сами” — вроде как в итоге взяли именно Movidius.
Недавно Intel анонсировал новую платформу. Но пока никакой подробной информации нет, посмотрим.
image
UPD
Прислали ссылку на такое. Плата с двумя Мовидиусами вторыми. Вполне себе embedded формат. PCI-e шину много кто для такого использует. К таким вещам только в цене вопрос. Два мовидиуса — вряд ли такая штука будет дешевле чем 200 у.е. стоить. А ещё нужно будет свою плату с своей системой…

Google Coral


Я разочарован. Не, нет ничего чего бы я не предсказывал. Но я разочарован что Google решили выпустить это. Тестил это чудо я в начале лета. Может быть с тех пор что-то изменилось, но описывать я буду свой тогдашний опыт.
Настройка… Чтобы прошить Jetson Tk-Tx1-Tx2 вам надо было воткнуть его в компьютер хост и в питание. И этого было достаточно. Чтобы прошить Jetson Nano и RPi вам достаточно запушить образ на флешку.
А чтобы прошить Coral — вам нужно в правильном порядке втыкать три провода:

И не вздумайте ошибиться! Кстати, в гайде есть ошибки/неописанное поведение. Наверное я не буду их описывать, так как с начала лета что-то могли и пофиксить. Помню, что после установки Mendel пропадал любой доступ по ssh, включая описанный ими, пришлось вручную какие-то линуксовые конфиги править.
На этот процесс у меня ушло часа 2-3.
Ок. Запустили. Как вы думаете, просто ли запустить вашу сетку на нём? Почти никак:)
Вот список того что можно пустить.
Если честно, то до этой мысли я дошёл не быстро. Потратил пол дня. Нет, правда. Вы не можете скачать модель из репозитория TF и запустить на устройстве. Или там надо перекорёжить все слои. Инструкции не нашёл.
Так вот. Надо взять именно модель из репозитория сверху. Их там не много (с начала лета добавилось 3 модели). И как её дотренировать? Открыть в TensorFlow в стандартном пайплайне? ХАХАХАХАХАХАХА. Конечно нет!!!
У вас есть специальный Doker-контейнер, и модель будет тренироваться только в нём. (Наверное, можно как-то и в своём TF затрейнить… Но инструкции, инструкции… Которых не было и вроде нет.)
Скачали/установили/запустили. Что это такое… Почему GPU на нуле?.. ПОТОМУ ЧТО ТРЕНИРОВАТЬСЯ БУДЕТ НА CPU. Докер есть только под него!!! Хотите ещё прикол? В инструкции написано “based on a 6-core CPU with 64G memory workstation”. Кажется что это лишь совет? Может быть. Только вот мне не хватило моих 8 гигов на том серваке где большая часть моделей тренируется. Обучение на 4-ртом часу выжрало их все. Стойкое ощущение что у них что-то текло. Я попробовал ещё пару дней с разными параметрами на разных машинах, эффект был один.
Я не стал перепроверять это перед тем как выложить статью. Если честно, то мне хватило одного раза.
Что ещё добавить? Что этот код не генерит модель? Чтобы её сгенерить вы должны:

  1. Зафризить граф
  2. Сконверить его в tflite
  3. Скомпилировать в формал Edge TPU. Слава богу сейчас это делается на компе. Весной это можно было сделать только online. И там надо было ставить галочку “я не буду использовать это во зло/я не нарушаю никаких законов этой моделью”. Сейчас уже слава богу нет этого.

image
Это самое большое омерзение которое я испытал в отношении IT продукта за последний год…
Глобально Coral должен иметь ту же идеологию что и OpenVino с Мовидиусом. Только вот Интел уже по этому пути идёт несколько лет. С отличными мануалами, поддержкой и хорошими продуктами… А Гугл. Ну это просто Гугл…
Минусы:
  1. Эта плата не продуктовая на уровне АД. Про продажу чипов не слышал => продакшн нереален
  2. Уровень разработки максимально ужасен. Всё бажет. Пайплайн разработки не вписывается в традиционные схемы.
  3. Вентилятор. На “энергетически оптимальном чипе” они ставят его. Ладно, не буду больше про продакшн
  4. Стоимость. Дороже всего кроме TX2.
  5. Две сетки держать в памяти одновременно нельзя. Надо выполнить выгрузку-загрузку. Что замедляет инференс нескольких сетей.

Плюсы:
  1. Из всего о чём мы будем говорить Coral самый быстрый
  2. Потенциально, если чип довести, то он производительнее чем Movidius. И вроде его архитектура более оправдана для нейронок.


Gyrfalcon


image
Про этого китайского зверя говорят последние полтора года. Даже я год назад что-то про него рассказывал. Но говорить — это одно, а информацию давать — другое. Я общался с 3-4 крупными фирмами, где менеджеры проектов/директора рассказывали мне о том какой классный этот Гирфалькон. Но никакой документации у них не было. И живьём они его не видели. На сайте информация почти отсутствует. Скачать с сайта хоть что то могут только партнёры (разработчики железа). Более того, информация на сайте очень противоречива. В одном месте пишут что поддерживают только VGG, в другом что только свои нейронки основанные на GNet (которые по их заверениям очень маленькие и ваааще без потери точности). В третьем написано что всё конвертируется с TF|Caffe|PyTorch, а в четвёртом написано и про мобилнет и про прочие прелести.
Понять что правда — почти невозможно. Когда-то я копался и нарыл несколько видео, в которых проскакивают хоть какие-то числа:


Если это правда, то значит SSD (на мобилнете?) под 224*224 на чипе GTI2801 у них инфериться ~60ms, что вполне сравнимо с мовидиусом.
Вроде как чип 2803 у них сильно быстрее, но информации по нему ещё меньше:


Этим летом нам в руки попала плата от firefly (вот этот модуль там установлен для вычислений).

Была надежда что наконец то посмотрим живьём. Но не получилось. Плата была видна, но не работала. Ползая по отдельным английским фразам в китайской документации почти даже поняли в чём проблема была (исходная накатанная система не поддерживала нейронный модуль, надо было всё самим пересобирать и перенакатывать). Но просто это сделать не получилось, а подозрения что под нашу задачу плата не подойдёт уже были (2GB оперативной памяти это очень мало для нейронных сетей + системы. К тому же не было поддержки двух сетей одновременно).
Зато удалось посмотреть оригинальную документацию. Из неё тоже мало что понятно (китайский). По хорошему надо было тестить и смотреть исходники.
Техподдержка RockChip на нас тупо забила.
Не смотря на этот ужас мне понятно, что тут всё же в первую очередь косяки RockChip’а. И у меня есть надежда что в нормальной плате Gyrfalcon может быть вполне используемым. Но из-за недостатка информации мне сложно сказать.

Минусы:
  1. Нет открытых продаж, взаимодействуют только с фирмами
  2. Мало информации, нет комьюнити. Существующая информация зачастую на китайском. Нельзя заранее предсказать возможности платформы
  3. Скорее всего инференс не более одной сети одновременно.
  4. С самим гирфальконом можно взаимодействовать только производителям железяк. Остальным надо искать каких-то посредников/производителей плат.

Плюсы:
  1. Как я понимаю по цене чипа гирфалькон сильно дешевле остальных. Даже в форм факторе флешек.
  2. Уже сейчас есть сторонние устройства с интегрированным чипом. Следовательно разработка несколько проще чем у movidius.
  3. Уверяют что есть много предобученных сеток, перенос сеток сильно проще чем Movidius|Coral. Но я бы не гарантировал это как правду. У нас не получилось ничего.

Если вкратце рассказывать, то заключение такое: очень мало инфы. Нельзя закладываться только на эту платформу. И прежде чем что-то сделать на ней — надо произвести огромный ресёрч.

Скорости


Мне очень нравиться, как 90% сравнений embedded устройств сводят к сравнению скоростей. Как вы поняли выше — данная характеристика очень условна. Для Jetson Nano можно запускать нейронки как чистом tensorflow, можно на tensorflow-tensorrt, а можно на чистом tensоrrt. Устройства с специальной тензорной архитектурой (movidius | coral | gyrfalcone) — может будут быстры, но в первую очередь могут работать только с стандартными архитектурами. Даже для Raspberry Pi не всё так однозначно. Нейронки от xnor.ai дают ускорение в полтора раза. Но я не знаю насколько они честные, а что выиграно за счёт перехода к int8 или другим приколам.
При этом, ещё одной интересной штукой является такой момент. Чем сложнее нейронка, чем сложнее устройство для инференса — тем непредсказумее будет итоговое ускорение которое можно вытащить. Взять какой-нибудь OpenPose. Там нетривиальная сеть, сложная постобработка. И то и то можно оптимизировать за счёт:

  • Перенос постобрабтки на GPU
  • Отптимизация постобработки
  • Оптимизация нейронной сети под особенности платформы, например:
    • Использование сетей оптимизированных под платформу
    • Использование модулей сетей под платформу

  • Перенос на int8|int16|бинаризация
  • Использование нескольких вычислителей (GPU|CPU|и.т.д.). Помнится на Jetson TX1 мы однажды хорошо ускорились когда перенесли весь функционал связанный с стримингом видео на встроенные ускорители проца для этих целей. Банально, но сети ускорились. При балансировке всплывает очень много интересных комбинаций

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

К чему я это всё. К тому что тест “сколько времени работает MobileNet” — это очень плохой тест. Он может выдать что платформа X оптимальна. Но когда вы попробуете развернуть там свою нейронку и постобработку, то вас может ждать очень большое разочарование.
Но сравнение mobilnet’ов всё же даёт какую-то информацию о платформе. Для простых задач. Для ситуаций когда вы понимаете что всё равно задачу проще к стандартным подходам свести. Когда вы хотите оценить скорость именно вычислителя.
Таблица ниже взята из нескольких мест:
  • Вот эти исследования: 1, 2, 3
  • Для SSD есть такой параметр “число выходных классов”. И от этого параметра скорость инференса может сильно меняться. Я старался выбрать исследования с одинаковым числом классов. Но не везде это может быть так.
  • Наш опыт работы с TensorRT. Знал какие сорсы работают какие нет.
  • Для gyrfalcon вот эти видео из учёта того что там mobilnet v2 + оценка сколько стоит изменение площади. Вот это видео говорит что 2803 может быть в 3-4 раза быстрее. Но для 2803 нет никаких оценок по SSD. Вообще я наиболее сомневаюсь в скоростях в этом пункте.
  • Я старался выбирать то исследование которое давало реальную максимальную скорость (не брал версию Nvidia без NMS, например)
  • Для Jetson TX2 использовал вот эти оценки, но тут 5 классов, на том же числе классов что остальные будет медленнее. Я как-то прикинул по опыту/сравнению с Nano по ядрам, что там должно быть
  • Я не учитывал приколы с битностью. Я не знаю на какой битности работали Movidius и Gyrfalcon.

Как результат имеем:


Сравнение платформ


Попробую подвести всё что я говорил выше к некоторой единой таблице. Жёлтым я выделил те места где моих знаний мало чтобы сделать однозначный вывод. И, собственно 1-6 — это некоторое сравнительная оценка платформ. Чем ближе к 1 — тем лучше.

Я знаю что много для кого критичным является энергопотребление. Но мне кажется что тут всё несколько неоднозначно, а я слишком плохо в этом разбираюсь — так что вводить не стал. Тем более сама идеология вроде как всюду одинакова.

Шаг в сторону


То о чём мы говорили — это лишь небольшая точка в огромном пространстве вариаций вашей системы. Наверное, общие слова которыми можно охарактеризовать эту область:
  • Низкое энергопотребление
  • Маленький размер
  • Высокая вычислительная мощность

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

Intel


Как мы говорили, когда обсуждали Movidius, у Intel есть платформа OpenVino. Она позволяет очень эффективно обрабатывать нейронки на процессорах Intel. При этом платформа позволяет поддерживать даже всякие intel-gpu на чипе. Я сейчас боюсь точно утверждать о том какая там производительность под какие задачи. Но, как я понимаю, хороший камень с GPU на борту вполне ? производительности от 1080 выдаёт. По некоторым задачкам может даже быстрее.
image
При этом форм фактор, например Intel NUC, достаточно компактен. Хорошее охлаждение, корпусирование, и.т.д. По скорости будет быстрее чем Jetson TX2. По доступности/простоте покупки — сильно проще. Стабильность платформы из коробки — выше.
Минусов два — энергопотребление и цена. Разработка чуть сложнее.

Jetson AGX


image
Это ещё один джетсон. По сути самая старшая версия. По скорости примерно в 2 раза быстрее Jetson TX2 плюс есть поддержка int8 вычислений, что позволяет разогнать ещё в 4 раза. Кстати, зацените вот эту картинку от Nvidia:
image
Они сравнивают два своих же Джетсона. Один в int8, второй в int32. Я даже не знаю какие слова тут нужно говорить… Короче: “НИКОГДА НЕ ВЕРЬТЕ ГРАФИКАМ ОТ NVIDIA”.
Не смотря на то что AGX это хорошо — он не дотягивает до нормальных GPU от Nvidia по вычислительной силе. Тем не менее по энергоэффективности — они очень крутые. Основной минус цена.
Мы сами с ними не работали, так что мне сложно сказать что-то более подробное, описать спектр задач где они самые оптимальные.

Nvidia gpu | laptop version


Если отменить жёсткое ограничение на энергопотребление, то Jetson TX2 уже не выглядит оптимальным. Как и AGX. Обычно люди пугаются использовать GPU в продакшне. Отдельная плата, всё такое.
Но есть миллионы фирм которые предлагают собрать вам кастомное решение на одной плате. Обычно это платы под ноутбуки/миникомпьютеры. Или, в конце концов вот такое:
image
Один из стартапов в котором я работаю последние 2.5 года (CherryHome ) пошёл именно по такому пути. И мы очень довольны.
Минус, как водится, в энергопотреблении, что нам было не критично. Ну и цена немного кусается.

Мобильники


Я не хочу вдаваться в эту тему глубоко. Чтобы рассказать всё что есть в современных мобильниках для нейронок/какие фреймворки/какое железо, и.т.д., понадобится не одна статья с эту размером. А с учётом того что мы тыкались в эту сторону всего 2-3 раза, я считаю себя некомпетентным для этого. Так что лишь пара наблюдений:
  1. Существует очень много аппаратных ускорителей на которых можно оптимизировать нейронки.
  2. Не существует общего решения которое хорошо зайдёт везде. Сейчас есть какая-то попытка сделать Tensorflow lite таким решением. Но, как я понимаю, оно пока им не стало.
  3. У некоторых производителей есть свои специальные ферймворки. Мы год назад помогали оптимизировать под Snapdragon фреймворк. И это было ужасно. Качество нейронок там сильно ниже чем на всём о чём я сегодня говорил. Отсутствует поддержка 90% слоёв, даже базовых, таких как “сложение”.
  4. Так как нет питона — инференс сетей весьма странный, нелогичный и неудобный.
  5. По производительности — бывает что всё очень неплохо (например на каком-нибудь iphone).

Мне кажется, что для embedded мобилки не лучшее решение (исключение — какие-нибудь низкобюджетные системы face recognition). Но видел пару случаев когда их использовали как ранние прототипы.

GAP8


Недавно был на конференции Usedata. И там один из докладов был про инференс нейронок на самых дешёвых процах (GAP8). И, как говориться, голь на выдумки хитра. В рассказе пример был весьма притянут за уши. Но автор рассказывал как они смогли добиться инференса по лицам примерно за секунду. На очень простой сетке, по сути без детектора. Путём безумных и долгих оптимизаций и экономии на спичках.
Мне такие задачи всегда не нравятся. Никакого исследования, только кровь.
Но, стоит признать, что я могу представить себе задачки где низкопотребляющие процы дают классный результат. Наверное не для распознавания лиц. Но где-то где можно распознавать по 5-10 секунд входное изображение…

Grove AI HAT


image
Пока готовил эту статью, натолкнулся на эту embedded платформу. По ней очень мало информации. Как я понимаю — нулевая поддержка. Продуктивность тоже на нуле… И ни одного теста по скорости…

Сервер/удалённое распознавание


Каждый раз когда к нам приходят за консультацией по embedded платформе — мне хочется крикнуть “бегите, глупцы!”. Надо очень аккуратно оценивать необходимость такого решения. Проверять любые другие варианты. Всем и всегда я советую делать прототип с серверной архитектурой. И уже при его эксплуатации решать — нужно ли делать реальное embedded. Ведь embedded это:
  1. Увеличение сроков разработки, зачастую в 2-3 раза.
  2. Сложная поддержка и отладка в продакшне. Любая разработка с ML — это постоянная доработка, апдейт нейронок, обновления системы. Embedded — всё ещё сложнее. Как перезаливать прошивку? А если у вас и так есть доступ на все юниты — то зачем вычислять на них, когда можно вычислять на одном девайсе?
  3. Усложнение системы/повышение рисков. Больше точек отказов. При этом пока система не заработает целиком — можно и не понять: подходит ли платформа для данной задачи?
  4. Увеличение цены. Одно дело поставить простенькую плату типа nano pi. А другое — закупать TX2.

Да, я знаю, что есть задачи где нельзя делать серверные решения. Но, как ни странно, их сильно меньше чем принято считать.

Выводы


В статье я старался обойтись без явных выводов. Это скорее повествование про то что сейчас есть. Чтобы делать выводы — надо исследовать в каждом конкретном случае. И не только платформы. Но и саму задачу. Любую задачу можно немного упростить/немного изменить/немного заточить под устройство.
Проблема этой темы в том, что тема меняется. Приходят новые устройства/фреймворки/подходы. Например, если завтра NVIDIA включит поддержку int8 для Jetson Nano — то ситуация сильно изменится. Когда я пишу эту статья — я не могу быть уверенным, что информация уже не поменялась два дня назад. Но, надеюсь, что мой небольшой рассказ поможет вам лучше ориентироваться в вашем следующем проекте.
Было бы классно, если у вас есть дополнительная информация/я что то пропустил/что-то сказал не так — напишите тут подробности.

п.с.
Уже когда дописал статью почти, snakers4 скинул недавний пост из своего телеграмм канала Spark in me, который почти про те же проблемы с Jetson. Но, как я выше писал, — в условиях любого энергопотребления — я бы ставил что-то типо zotac'ов или IntelNUC. А как embedded джетсон не самая плохая платформа.

Комментарии (52)


  1. slovak
    23.09.2019 20:39

    +1 за Zotac
    Их версии с житкостным охлаждением так вообще красота.
    image


    1. ZlodeiBaal Автор
      23.09.2019 20:44

      Таких коробок есть много разных. Более того, есть много заводов которые при разумной партии готовы собрать совсем мелкие платы под заказ. На мобильных/полноценных гпушках.
      Но это всё же не совсем embedded. Тут скорее устройства в дом/в машину.


      1. slovak
        23.09.2019 21:42

        Будьте добры, приведите аналогичный пример небольшой производительной коробки с GPU?


        1. ZlodeiBaal Автор
          23.09.2019 21:57

          Миллионы китайских компов:)
          Zotac это по сути такие же китайцы, только более известные + которые экспортируют в Россию. В реальности, если партия более 100 штук, можно выходить на любого такого производителя и пробовать костылизировать кастомизировать под вашу задачу.

          Если вопрос «что кроме Зотака можно купить в России» — не знаю. В некоторых проектах люди брали IntelNUC. С дискретной карточкой, да под OpenVino он иногда даёт интересный результат.


        1. lelik363
          23.09.2019 22:08

          Может такая коробка сойдёт?
          image
          A177 Twister Industrial Rugged GPGPU Fanless RediBuilt SFF Supercomputer


          1. ZlodeiBaal Автор
            23.09.2019 22:16

            Такое обычно по 4-5к usd стоит.


            1. lelik363
              23.09.2019 22:55

              У этих ребят должно быть по дешевле:
              image
              M100-Nano-AI-enabled Embedded NVR Powered by NVIDIA® Jetson Nano


              1. ZlodeiBaal Автор
                23.09.2019 22:57

                А, это Jetson'ы же. Там выше зотаки и прочая китайчатина — это полноценные GPU. С embedded джетсонами проблем то нет.


                1. lelik363
                  24.09.2019 11:11

                  Что то от НТЦ Модуль тестили?


                  1. ZlodeiBaal Автор
                    24.09.2019 11:31

                    Издеваетесь?)
                    1) Это не по теме статьи даже. 1.3 кг, pci-e, 80 ВТ — это не эмбеддед и не рядом.

                    2) для «МС127.05» и «TensorFlow|Caffe|PyTorch» нет упоминания ни в одной статье совместного. Для 1879ВМ8Я две статьи где не понятно есть что-то или в разработке всё. Нет ничего с гайдами и мануалами.

                    3) Работать с любой окологосударственной конторой в поле «инновационные технологии» это блин… За гранью добра и зла… Это очевидные процессоры для военки/госзаказа. Если бы было не так — были бы цены, был бы маркетинг, был бы хоть один репозиторий на GitHub…


                    1. lelik363
                      24.09.2019 14:04

                      1.3 кг, pci-e, 80 ВТ — это не эмбеддед и не рядом.

                      Мне кажется в Acromag или Aitech с Вами не согласятся.
                      Для 1879ВМ8Я две статьи где не понятно есть что-то или в разработке всё. Нет ничего с гайдами и мануалами.

                      Как обычно — информация по запросу. На сколько я знаю есть коммерческое исполнение и уже продается.


                      1. ZlodeiBaal Автор
                        24.09.2019 17:43

                        1) Это не эмбеддед, это промышленный компуктер. Если его кто-то назвал эмбеддед, то это не делает его лучше для миллионов применений где сейчас embedded это достаточно маленькое устройство которое мало потребляет
                        2) Современное ML комьюнити работает немного не так: «информация предоставляется по запросу». Ни в один из десятков проектов где я консультирую/консультировал — я бы такую штуку не посоветовал. А всё что перечислил в статье — возможно. Именно из за того что и так слишком много вариантов/особенностей чтобы ещё возиться с «информация предоставляется по запросу». Они даже не пишут базовых параметров для сравнения. В мире 10-15 лет назад это могло работать. Сейчас нет.
                        3) Вы привели пример производителей корпусов. Достаточно большая разница между корпусами и алгоритмами/продакшном. Если бы вы привели пример продуктов не военного назначения — это другое…


                        1. lingvo
                          24.09.2019 17:55
                          +1

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


                          Потребляемая мощность в 80 Вт и 1,3кг не имеют значения, например, для embedded системы в составе автомобиля или самолета.


                          1. ZlodeiBaal Автор
                            24.09.2019 18:09

                            Как вы могли заметить — в статье трактовка embedded идёт от другого класса устройств. Для него кто-то использует ещё слово Edge. Но в русском все поголовно эмбеддед говорят про них.


                            1. lelik363
                              24.09.2019 21:56

                              Edge пришло несколько позже, чем embedded. На edge ещё мода не пришла, хотя такой класс устройств существовал всегда.


                            1. lingvo
                              25.09.2019 11:00

                              Edge — это вроде как понятие из IoT, противоположное cloud и относится к вычислениям.
                              Cloud — вычисления в облаке
                              Edge — вычисления в самой железяке.


  1. lingvo
    23.09.2019 21:08
    +1

    Как тот, кто занимается эмбеддед, спрошу:


    1. Можете привести пример решений AI, которые реально дошли до того, что их можно запихнуть в embedded железяку и получать профит предоставить пользователю какую-то фичу, за которую он готов тратить деньги? Чтобы понять объёмы и целевую стоимость таких устройств. Вы писали что-то про распознавание номеров — это явно не та штука, где сто баксов на железо что-то решают.
    2. Что у автомобильных производителей в этом плане?
    3. Может стоит плюнуть на все эти Jetsonы и использовать ПЛИС? По потреблению и цене, конечно, не айс, но зато с задачей справятся и не зависнут. Удивило, что вы их даже не рассматриваете, в то время как они серьезно решили скинуть Nvidia с этого пьедестала. Тот же Openvino в обязательном порядке включает ПЛИС, как ускорители. Они скорей всего просто пытаются упростить их использование за счет библиотек, которые за вас будут генерить HDL код.


    1. ZlodeiBaal Автор
      23.09.2019 21:40

      1. Из того к чему мы имели отношение:
      а) распознавание автономеров и всё с ними связанное. Там важно энергопотребление зачастую (удалённые точки). Я знаю несколько российских фирм которые свои решения сейчас на Jetson'ах делают. Да и по бюджету на один комплекс там весьма ограниченно зачастую. 100у.е. может трепит, а лишние 300-400 далеко не факт. Так же распознавание номеров есть не на трассах, а на въезде во дворы/супермаркеты/парковки. И там уже чем дешевле тем лучше. там и 50 баксов может решить. Мы как-то хотели сделать на RPi, но из-за ужаса в плане продакшна так и не собрались…
      б) Artec Leo, который я упоминал — тоже на каком-то из TX1|Tx2 джетсонов
      в) Биометрия, различные её применения — лица (2д/3д), радужка. Там без нейронок можно, но качество не очень и юзабилити. А с нейронками всё ок.
      г) В CherryHome это аналитика и мониторинг пожилых людей. Там embedded конечно в рамках квартиры, но именно он обеспечивает высокий уровень конфиденциальности данных.
      д) Системы подсчёта людей/учёта трафика
      е) Мы не участвовали, но я видел применение в рекламе имено на embedded устройствах (марка авто/пол/возраст)
      2. С авто я плохо знаком. Видел как люди полноценные видюхи ставят. Nvidia очень для этого продвигает и Jetson AGX Xavier. Вроде ещё какие-то решения аппаратные есть. Но с авто вариаций больше.
      3. Когда плисы доберуться до того же уровня «production ready» в плане разработки — можно говорить. Но пока любая разработка которую я видел в реальности — это было год-полтора, без нормального выхлопа. Те ПЛИСы где смогли сделать нормальные хорошие и удобные интерпретаторы нейронок — называются gyrfalcon|google coral) И это уже не плисы а кристалы)
      Я не видел пока ни одного серьёзного и удобного проекта где была бы хорошая поддержка современных нейрсетевых наработок.
      Это не факт что оно не появиться. Но пока всё как-то очень уныло…


      1. lingvo
        23.09.2019 21:57

        Ок. Спасибо. Из указанных задач, какие-то имеют реал-таймовые требования? Ну то есть, что надо получить результат ну вот за столько -то миллисекунд и если медленнее — результат уже нафиг никому не нужен? Вы же вроде о скорости писали — значит это важный фактор?


        1. ZlodeiBaal Автор
          23.09.2019 22:00

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


          1. lingvo
            24.09.2019 18:15
            +1

            То есть то, что вы ищете или разрабатываете — это акселератор для AI, который бы мог работать в составе встраиваемых систем.


            С этой точки зрения ваш подход к embedded с PyTorch и TensorFlow не очень хорош. Это пакеты, которые больше предназначены для компьютеров и неспешного решения AI задач на них. В embedded они попали только потому, что все больше и больше людей думают "а давай запустим этот linux(windows, PyTorch и т.д. нужное вычеркнуть) на вот этой железяке — мощности ведь хватит?" При этом получается никак не embedded решение, а тот же компьютер, только в формате кредитной карты (и с огромным вентилятором впридачу), который в железяку поставить может только очень смелый инженер или тот, кому наплевать на надежность. "Падает? Ну так сделаем ватчдог, чтобы каждый день перезагружал!"


            Зато опенсоурс. Но вот вы видели много опенсоурсных прошивок, например, на embedded системы для самолетов или автомобилей? Или даже в телевизоре Sony или навигаторе Garmin — опенсоурсная прошивка?


            Поэтому production ready в плане разработки — это больше миф, придуманный АйТишниками. Если вы не видите хороших решений в embedded нейросетях — это не значит, что их не существует. Они есть, как те же прошивки для телевизоров, но, конечно, это не опенсоурс и никто вам их так легко не покажет. Вам останется только удивляться, когда кто-то выпустит на рынок железяку, которая хоть и не будет блистать последними технологиями, зато будет работать как надо.


            Если вернуться к ПЛИС — я вот посмотрел на круг ваших задач, и по распознаванию автономеров поиск выдал кучу линков по реализации этой нейросети на ПЛИС. Конечно, это не то, что вам надо, это не то, что заработает из коробки. Это не то, что вы называете "production ready", так как над этим надо поработать с годик, чтобы сделать свой проект. Но разве это хуже, чем потратить тот же годик на изучение платформы, которая вам не подходит и через год может вообще исчезнуть с рынка? В результате вы получите свое ноухау и свой очень быстрый хардварный акселератор для AI — то что вам надо.


            Тут возникает вопрос в специалистах, конечно. По ПЛИСам их очень мало, но никогда не поздно учиться.


            1. ZlodeiBaal Автор
              24.09.2019 20:33
              +1

              Ваша парадигма была применима 10-15 лет назад. И, может быть, будет применима через 10 лет. Сейчас — нет. Сейчас можно сделать успешный/хороший и конкурентный продукт за пару месяцев. Вот например вы говорите «год разработки». Но это не так. Я видел 3-4 примера как что-то разрабатывали на ПЛИСах задачи машинного зрения/интеллектуального управления. И это всегда года два в лучшем случае.

              Основная причина того что ПЛИСы сейчас не работают в ML — в том что для ML задач сейчас парадигма разработки лежит в плоскости Software 2.0. Это динамическая, постоянно изменяющаяся структура постановки задачи и находимого решения. Вчера вы могли считать что ваш продукт — распознавание номеров. Завтра, что ваш продукт — распознавание номеров + контроль соблюдения логики ПДД, включая контроль пешеходов. Послезавтра — что ваш продукт это номера+пдд, но реально ваша цель — сбор информации о том какие марки авто в этом районе.
              Эти задачи можно просто и быстро решать когда у вас быстрый продакшн. Например в CherryHome мы можем поменять курс развития или протестировать новые идеи за месяц.
              Рынок систем распознавания номеров захватила система которая была сделана на Jetson. Именно из-за простоты и быстроты разворачивания. Её ребята продавали через 4 месяца после начала разработки (не скажу что оно у них хорошо работало, но что-то показывали).
              Когда мы лицензировали нашу системы распознавания номеров, то оказалось что заказчику нужно распознавать британские номера. Мы переобучили всё за пару недель.
              Я могу сказать десятки других случаев когда системы спасла именно возможность динамически перестроиться/изменить рабочий концепт.
              И тратить год времени на то чтобы сделать прототип — это не вариант.

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

              Про ваш пример:

              Но вот вы видели много опенсоурсных прошивок, например, на embedded системы для самолетов или автомобилей

              Я могу сказать лишь одно. OpenSource зачастую имеет выше качество чем продуктовый код. А для вашего условного самолёта нет разницы что за железо и что за софт вы используете. Единственная критичная точка — это как вы тестируете/как вы резервируете. Сделать это можно и в парадигме «делать логику на ПЛИСах» и в парадигме «воткнём 3 резервирующих Jetson'а».

              Тут возникает вопрос в специалистах, конечно. По ПЛИСам их очень мало, но никогда не поздно учиться.


              Специалистов по ПЛИСам мало. Но их и не требует рынок. В отличие от того же ML. Если бы в ПЛИСах было много работы и денег — было бы куча курсов по ним. Люди бы на них ходили. А так — я лет 13-14 назад был одним из немногих кто на нашем курсе МФТИ пошёл на курс по ним. Все остальные выбрали другие варианты. И это при том что половина нашей группы имела базу в МЦСТ
              Сейчас в МФТИ 20 курсов машинного обучения, они забиты. На них сложно попасть к хорошим препам.
              А ребята кто умел ПЛИСы прогать с нашего курса — почти все поменяли направление работы. И это не потому что там какой-то Rocket Science.


              1. lelik363
                24.09.2019 22:20

                OpenSource зачастую имеет выше качество чем продуктовый код

                А кто этот код поддерживать будет 10-20лет, сообщество? А сертификация?
                В embedded не просто сделать и забыть — это прежде всего ответственность.


              1. lingvo
                25.09.2019 11:09

                Вот например вы говорите «год разработки». Но это не так. Я видел 3-4 примера как что-то разрабатывали на ПЛИСах задачи машинного зрения/интеллектуального управления. И это всегда года два в лучшем случае.
                Эти задачи можно просто и быстро решать когда у вас быстрый продакшн.
                Например в CherryHome мы можем поменять курс развития или протестировать новые идеи за месяц.
                Именно из-за простоты и быстроты разворачивания.
                И тратить год времени на то чтобы сделать прототип — это не вариант.

                То есть вас в ПЛИСах больше всего не устраивает скорость разработки? Есть хорошие новости — благодаря автоматической генерации кода и HLS, разработка под них уменьшилась по времени раза в 2, а то и три за последние годы. Многие про это не знают.


                Основная причина того что ПЛИСы сейчас не работают в ML — в том что для ML задач сейчас парадигма разработки лежит в плоскости Software 2.0. Это динамическая, постоянно изменяющаяся структура постановки задачи и находимого решения. Вчера вы могли считать что ваш продукт — распознавание номеров. Завтра, что ваш продукт — распознавание номеров + контроль соблюдения логики ПДД...

                И это проблема сегодняшнего подхода к разработке встроенного ПО и на этом ваш Software 2.0 скорей всего закончится, когда народ начнет получать штрафы за нарушения ПДД, которые они не совершали, а AI посчитал по другому или если он не правильно распознал номер. AI can “silently fail” — не очень хорошая опция для настоящего embedded, особенно, если от его решений будет зависеть судьба человека или дорогое оборудование. Качественный OpenSource тоже в этом деле не очень хорош, когда вы будете просить поддержки у Community. IoTшники к этому еще придут и будет откат на 10 лет.


                1. ZlodeiBaal Автор
                  25.09.2019 11:45

                  Если что, то даже распознавание номера верифицируется сотрудником который штраф подписывает. А ещё так — habr.com/ru/news/t/468675. Естественно, они сначала откатали алгоритмы на которых вероятность ложного штрафа <0.1%.
                  Вы как-то очень странно и к интеграции OpenSource в продукт относитесь. Естественно, там свой форк делается, который тестами обкладывается. И естественно, нужна свои программисты которые эту ветку потом держат. 99% того что вы вокруг видите (включая кодеки на вашем компе/прошивку вашего телефона) — использует наработки OpenSource проектов… В тех же самолётах вся мультимедийная системы из открытых сборок линукса…


                  1. lingvo
                    25.09.2019 12:40

                    Вы как-то очень странно и к интеграции OpenSource в продукт относитесь.

                    У меня просто достаточно большой опыт life cycle — менеджмента встраиваемых систем. И поэтому когда я слышу про "быстрый продакшн" или "успешный продукт за пару месяцев", меня это как минимум улыбает. Это критерий успешности только в мире софта, а в мире embedded — это только начало очень длинного пути, в котором сама разработка — это от силы 30% ресурсов и времени.


                    Естественно, там свой форк делается, который тестами обкладывается. И естественно, нужна свои программисты которые эту ветку потом держат.
                    Ага, а еще это стоит бабок и в итоге получается совсем не open-source. Если это не учитывать, то появляются такие embedded проекты, которые выстреливают в воздух сырой продукт, а через год фирмы уже нет, поддержки нет, и есть только open-source community.

                    99% того что вы вокруг видите (включая кодеки на вашем компе/прошивку вашего телефона) — использует наработки OpenSource проектов…

                    Вы имеете ввиду мой комп на Windows, который ни разу не ембеддед, и мой телефон iPhone, в котором стоит проприетарная iOS?


              1. Karlson_rwa
                26.09.2019 21:11

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

                И по плисам есть много всего. Просто ваш машинлернинг сейчас мейнстрим, только и всего.


      1. Brak0del
        24.09.2019 20:49

        Когда плисы доберуться до того же уровня «production ready» в плане разработки

        Вроде как в случае нейронок производители ПЛИС последние пару лет в этом направлении серьезно рыли и уже добрались. Xilinx не так давно кое-что по теме выкатил. Не знаю как обстоят дела в действительности, обещали, что знать «железячную» часть при работе с этим инструментом не придется. Intel/Altera имеют свой аналог — упомянутый ранее OpenVino.


  1. zilm
    23.09.2019 23:05

    Что скажете про RK3399Pro. Это модификация RK3399, которую давно обещали, и вот вроде она наконец-то вышла, у того же firefly есть плата


    1. ZlodeiBaal Автор
      23.09.2019 23:28

      Я же писал про эту плату в разделе про Gyrfalcon…
      Может это какая-то другая ревизия, конечно (pro, как я понимаю). Но NPU модуль вроде тот же. И в целом плата та же…

      Но что больше RAM — Это, безусловно, хорошо. 2 (как у нас было), да даже 4 — это издевательство


      1. zilm
        23.09.2019 23:38

        У вас другая плата, как я понимаю.
        У вас на обычном rk3399, но есть отдельно npu Gyrafalcon NPU SPR2801S который подключен на самом деле по usb, как пишут, просто это всё разведено на плате. Возможно ее и сделали потому что замучились ждать, когда выйдет обещанный RK3399Pro.
        А та, что я кинул на rk3399pro без отдельного npu, оно там часть SoC.
        Вот такой benchmark ещё нашел, это не от firefly плата, но тоже на rk3399pro


        1. ZlodeiBaal Автор
          23.09.2019 23:55

          На нашей плате Gyrfalcon был отдельным устройством. Всё равно все его обёртки, как я понял, при настройке требуют указания пусти устройства в системе. У нас, условно, был "/dev/sg0". Мне кажется что драйвера/алгоритм использования там не должен поменяться даже если его перенесут на чип… Основными минусами будет что нельзя инферить несколько сеток одновременно + 2801 судя по всему не самый быстрый чип.

          Но тут такая штука, что Gyrfalcon слишком не определён и не предсказуем. Его создатели заявляют: «У нас конвертится TensorFlow, PyTorch, Caffe». А потом в драйверах лежит какая-то специфичная GNet, которая в 10 раз меньше по весу чем Мобилнет и подписано «почти не хуже чем Mobilnet». И для неё нет никаких нормальных файлов для разработки ни на TF ни на PT. В инете информации практически нет. Вся информация от разработчиков почти закрыта.

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


          1. zilm
            24.09.2019 00:03

            Так вот не факт что там тоже Gyrfalcon, но по производительности похоже. Покопался на сайте Rockchip, там тоже мало конкретики.
            Документация как и положено у китайцев — её едва нет.
            Вот есть описание API, и тут же примеры. Это похоже на Gyrfalcon?


            1. ZlodeiBaal Автор
              24.09.2019 00:11

              Не очень похоже. Но у Gyrfalcon было не то два не то три разных способа использования (SDK, MDK, PLAI). Так как у нас оно в итоге не запустилось мы их не использовали. Но то что в коде SDK я видел выглядело не так.


  1. Disasm
    23.09.2019 23:45

    Пока готовил эту статью, натолкнулся на эту embedded платформу. По ней очень мало информации. Как я понимаю — нулевая поддержка. Продуктивность тоже на нуле… И ни одного теста по скорости…

    Что-то не очень глубоко вы копали. Под модуль, который на паян на плате, есть MicroPython, есть демки. В самом чипе — аппаратная считалка свёрточных (если не ошибаюсь) нейросетей. К тому же, Grove AI HAT — не единственное исполнение: есть и другие платы с тем же модулем на борту (искать на том же сайте по "sipeed"), в том числе с экраном и камерой для обработки картинки в реальном времени.


    1. ZlodeiBaal Автор
      24.09.2019 00:06

      Вы тестили? Проверили что всё работает? Может расскажите?
      На каждом втором сайте коменты по типу такого:

      I bought 2, the support is null, check well the few documents that there is in seeed, If that is enough for you, grat buy it,and you are a god of coding and electronics, for the rest, just avoid any k210 or riscV until adafruit release something with with support and comunity.

      Примеров использования — ноль. Документацию полистал сам — она ужасна. Примеров инференса сложных сеток нет. Я даже не понял как на него портировать onnx или какой-либо другой формат нейронок. Как следствие — я не верю что оно хоть как-то работает с современным стеком AI технологий. Если я ошибаюсь — покидайте ссылок, думаю всем будет полезно.
      Показать видео где что-то обрабатывается — может каждый… Нейронку свою написать очень просто… А вот поддержать все существующие на современный день трюки, функции активаций, ReLU юнитов, и.т.д…


      1. pdima
        24.09.2019 01:25

        Сам не пробовал но чуть инфы:
        www.seeedstudio.com/Sipeed-Maixduino-Kit-for-RISC-V-AI-IoT-p-4047.html
        github.com/kendryte

        было бы интересно услышать если кто уже сталкивался.


      1. Disasm
        24.09.2019 10:37

        К сожалению, я не очень в теме нейронок, чтобы говорить о том, как это стыкуется с современным стеком. Навскидку:
        https://github.com/kendryte/nncase
        https://github.com/kendryte/caffe-workspace
        https://github.com/kendryte/tensorflow-workspace


        1. ZlodeiBaal Автор
          24.09.2019 11:39

          Надо сказать, что это очень просто, но, наверное, не совсем ужасно. У того же Gyrfalcon сильно больше что можно, но сорсы закрыты. Тут открытость плюс. Но по тому что поддерживается, по тому что там работает — всё очень грустно конечно. Плюс огромный пласт вещей без примеров у них => скорее всего не работает. Например конвертор написано поддерживает 4 формата, а в коде только tflite. Хотя, если бы была полноценная поддержка tflite — это уже было бы дело.
          А так — я бы брал этот процессор в последнюю очередь, после всего упомянутого в статье. Производительность у него, судя по всему не лучше чем у RPI.


          1. ZlodeiBaal Автор
            24.09.2019 11:44

            И опять же, даже такого нельзя говорить без тестов. Производители очень любят обманывать. Прежде чем говорить «такой функционал работает» — надо это всё проверить…


          1. Disasm
            24.09.2019 11:53

            Не, с многими платформами из этой статьи данный чип не сможет тягаться в принципе, но для простых применений — почему бы и нет, тем более что стоит сравнительно недорого. Меня он больше как платформа для embedded интересует: всё-таки, два приличных ядра, 6МБ оперативки и FPIOA — такое не на каждом углу встретишь. Ну и RISC-V, со всеми его плюсами.


            1. ZlodeiBaal Автор
              24.09.2019 12:15

              В любом случае, большое спасибо за информацию. Мне кажется что её так мало, что сейчас практически ни для какого случая нельзя понять какая из платформ оптимальна…


  1. smarttowel0
    24.09.2019 16:01
    +3

    А ещё вам нужно будет его развести (материнок для него пока нет)

    Их мало, но они есть. Например, от Auvidea. Неприятная особенность заключается в том, что хоть сам Jetson Nano и меньше по размеру, чем Jetson TX2, но вместе с материнкой Nano проигрывает по размерам.

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

    У нас почти все вопросы решалась либо через devtalks, либо напрямую с ConnectTech (мы используем их материнки). Да, у Nvidia есть штуки, которые доступны только их партнерам. Например, калибровочные данные для MIPI камер/сенсоров. Но их можно запросить, написав напрямую таким партнерам.

    Наверное, еще стоит добавить, что у AGX Xavier есть специальные ускорители для нейронок.
    А также, что Jetson'ы в целом умеют еще во много что другое. Например, аппаратный энкодинг/декодинг видео и кучу различных интерфейсов. А для кровавого энтерпрайза есть модули TX2i, с расширенным температурным диапазоном и устойчивостью к ударам.
    Самый большой минус, конечно — это цена.


    1. ZlodeiBaal Автор
      24.09.2019 17:37

      Спасибо, про эти борды не знал. Но оно ещё и по цене не очень адекватно получается. Jetson Nano без материнки стоит дороже чем с материнкой. С такой бордой будет овер 300 баксов…

      У нас почти все вопросы решалась либо через devtalks, либо напрямую с ConnectTech (мы используем их материнки). Да, у Nvidia есть штуки, которые доступны только их партнерам. Например, калибровочные данные для MIPI камер/сенсоров. Но их можно запросить, написав напрямую таким партнерам.


      Я скорее говорит про разводку плат. В Artec3D сначала пробовали на своей плате развести TK1 и это был ужас. Там только NVIDIA знала как это делать.
      Сейчас да, чаще отправляют к партнёрам. Тут один проект с которым мы работали NVIDIA почти прямо сказала «вот эти ребята у нас отреверсинжинерили, обращайтесь к ним, они дадут платные консультации».


      1. smarttowel0
        24.09.2019 18:45

        Я согласен, что TK1 — это ужас. И в плане софта в том числе.
        Но для TX1/TX2, по-моему, все не так сложно. Вся документация есть, достаточно зарегистрироваться у Nvidia на сайте в качестве разработчика.


        1. ZlodeiBaal Автор
          24.09.2019 18:55

          Ну вот с Nano сейчас у ребят возникло много проблем, когда они захотели что-то сделать с Ubunta критичное для их прода. И оказалось что никак даже кусочно её перебилдить просто нельзя…
          Про TX1|TX2 я согласен что там достаточно пристойно. Особенно в сравнении с всеми другими упомянутыми платформами. Но что «просто» я бы не сказал. Artec почти год разрабатывал свой сканер. Но они самыми первыми в России кто стартанул на них разработку. Возможно с тех пор стало проще.


    1. Karlson_rwa
      26.09.2019 21:13

      калибровочные данные для MIPI камер/сенсоров
      поясните, пожалуйста, что вы имеете в виду?




  1. ZlodeiBaal Автор
    25.09.2019 14:09

    Спасибо!
    Кстати, по цене достаточно адекватен + вроде по начинке разумен. Единственное, хочется верить что Movidius там на пате, а не по USB воткнут. А то пока гуглил натыкался на похожий, где просто в корпусе была флешка.


    1. lelik363
      25.09.2019 16:11

      хочется верить что Movidius там на пате, а не по USB воткнут

      Это вряд ли. Уже давно делаются платки формата M.2 или miniPCIe, хотя, скорее всего, через мост USB в PCIe.
      image


  1. Anachronox
    25.09.2019 17:21

    У платы с 8 х Movidius, используются PCIe — USB3.0 мосты. В варианте выше, скорее всего, тоже. На мой взгляд, это необходимое зло, с учетом желания Intel, иметь большой ассортимент плат с Movidius на борту, и при этом, унифицировать их взаимодействие с OpenVINO. https://software.intel.com/ru-ru/iot/hardware/vision-accelerator-movidius-vpu