Ультимативное сравнение embedded платформ для AI

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

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


Казалось бы. Посмотри производительность устройства, убедись что её достаточно, запусти и получай профит.
Но, как всегда, есть пара нюансов. Давайте разложим их по полкам:

  1. Production. Если ваше устройство делается не в единичных экземплярах, тогда надо быть уверенным что система не зависнет, что устройства не будут перегреваться, что при пропадании питания всё автоматически загрузиться. И это на большой партии. Это даёт лишь два варианта — либо устройство должно быть полностью разработано с учётом всех возможных проблем. Либо надо побороть проблемы исходного устройства. Ну, например вот такие (1, 2). Что, понятно, жесть. Чтобы решить проблемы чужого устройства на больших партиях надо потратить нереальный объём сил.
  2. Реальные бэнчмарки. Очень много жульничества и хитрости. NVIDIA в большинстве примеров завышает производительность на 30–40%. Но не только она этим развлекается. Ниже я привожу много примеров когда производительность может быть в 4–5 раз меньше чем хочешь. Нельзя закладываться «на компе всё хорошо работало, тут будет пропорционально хуже».
  3. Очень ограниченная поддержка архитектуры нейронных сетей. Есть много аппаратных embedded платформ которые очень сильно ограничивают сети которые можно на них запустить (Coral, gyrfalcone, snapdragon). Портирование на такие платформы будет вызывать боль.
  4. Поддержка. У вас что-то не работает, а проблема на стороне устройства?… Это судьба, оно и не будет работать. Только для RPi комьюнити затыкает большую часть багов. И, частично, для Jetson.
  5. Цена. Многим кажется что embeded это дёшево. Но, в реальности, с ростом производительности устройства, цена будет расти почти экспоненциально. 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. Я не буду разбирать нейронки/инференс на телефонах. Это сама по себе огромная тема. Но так как телефоны это embeded платформы лишь с натягом, не думаю что это плохо.
  2. Я затрону Jetson TX1|TX2. В нынешних условиях это не самые оптимальные из платформ по цене, но есть ситуации когда их всё же удобно использовать.
  3. Я не гарантирую что в списке будут все платформы которые существуют сегодня. Может что-то забыл, может про что-то не знаю. Если знаете ещё интересные платформы — пишите!

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

reuwk49r6lwkkhssus1lqwamlyq.jpeg

  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, это уже не чипы, а чип на плате.
imageimage
Они дороже, но имеют вполне продуктовый уровень. Небольшая фирма может интегрировать их в свой продукт, этот продукт предсказуемый и стабильно работающий. Я видел лично как 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. Неплохое энергопотребление. Но из всего что будет у нас именно «embeded» — самое плохое:)
  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


kigql3xgdsddqwgx-iwrjznthpc.jpeg
Отсюда и ниже пойдут не полноценные процессоры, а процессоры разработанные специально под нейронные сетки. Это как бы их сильная и слабая сторона одновременно.
Итак. 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

Google Coral


Я разочарован. Не, нет ничего чего бы я не предсказывал. Но я разочарован что Google решили выпустить это. Тестил это чудо я в начале лета. Может быть с тех пор что-то изменилось, но описывать я буду свой тогдашний опыт.
Настройка… Чтобы прошить Jetson Tk-Tx1-Tx2 вам надо было воткнуть его в компьютер хост и в питание. И этого было достаточно. Чтобы прошить Jetson Nano и RPi вам достаточно запушить образ на флешку.
А чтобы прошить Coral — вам нужно в правильном порядке втыкать три провода:
deb4hsbxm_ra3ajx7_kuoljd0ls.jpeg
И не вздумайте ошибиться! Кстати, в гайде есть ошибки/не описанное поведение. Наверное я не буду их описывать, так как с начала лета что-то могли и пофиксить. Помню, что после установки 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.


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

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


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

© Habrahabr.ru