Ультимативное сравнение embedded платформ для AI |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-09-25 03:56 Нейронные сеточки захватывают мир. Они считают посетителей, контролируют качество, ведут статистику и оценивают безопасность. Куча стартапов, использование в промышленности.
Замечательные фреймворки. Что PyTorch, что второй TensorFlow. Всё становиться удобнее и удобнее, проще и проще… Но есть одна тёмная сторона. Про неё стараются молчать. Там нет ничего радостного, только тьма и отчаяние. Каждый раз когда видишь позитивную статью — грустно вздыхаешь, так как понимаешь что просто человек что-то не понял. Или скрыл. Давайте поговорим про продакшн на embedded-устройствах. В чём проблема. Казалось бы. Посмотри производительность устройства, убедись что её достаточно, запусти и получай профит.
Что есть
Итак. Основные вещи, которые явно Embeding. В статье мы будем сравнивать именно их:
Прочее. Про них поговорим после основных сравнений:
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, это уже не чипы, а чип на плате. Они дороже, но имеют вполне продуктовый уровень. Небольшая фирма может интегрировать их в свой продукт, этот продукт предсказуемый и стабильно работающий. Я видел лично как 3-4 продукта доводили до продакшна — и всё было неплохо. Буду говорить про TX2, так как из текущей линейки это основная плата.Но, естественно, не всё слава богу. Что не так:
Что офигенно:
Как результат — это хорошая платформа для вас если у вас штучные девайсы, но по каким-то причинам вы не можете поставить полноценный комп. Что-то массовое? Биометрия — скорее нет. Распознавание номеров — на грани, зависит от потока. Переносимые устройства с ценой овер 5к баксов — возможно. Автомобили — нет, проще ставить более мощную платформу чуть дороже. Как мне кажется, с выходом нового поколения дешёвых девайсов TX2 со временем умрёт. Материнские платы для Jetson TX1|TX2|TX2i и прочие выглядят примерно так: А вот тут или тут больше вариаций. Jetson Nano Jetson Nano это очень интересная штука. Для Nvidia это новый форм-фактор, который по революционности должен был бы сравниться с TK1. Но уже поджимают конкуренты. Есть и другие устройства про которые мы поговорим. Он в 2 раза слабее TX2, но дешевле в 4 раза. Точнее как… Математика тут сложная. Jetson Nano на демо-плате стоит 100 баксов (в Европе). Но если вы покупаете только чип, то он будет дороже. А ещё вам нужно будет его развести (материнок для него пока нет). И это на большой партии дай бог в 2 раза выйдет дешевле чем TX2. По сути, Jetson Nano на своём базовом борде — это такой рекламный продукт для институтов/ресёрчеров/любителей, который должен подстегивать интерес и бизнес применение. По плюсам и минусам (частично пересекается с TX2):
Хорошее:
Сам Nano вышел в начале весны, где-то с апреля/мая я активно в него тыкался. Успели уже два проекта сделать на них. В целом проблемы обозначил выше. Как хоббийный продукт/продукт для малых партий — очень круто. Но можно ли затащить в продакшн и как это сделать — пока не понятно. Поговорим о скорости Jetson. Сравнивать с другими устройствами мы будем сильно позже. А пока просто поговорим о Jetson и скорости. Почему Nvidia нас обманывает. Как оптимизировать ваши проекты.
В примерах выше:
Для себя надо понимать, что если бы это была ваша нейронка, которую бы никто до вас не конвертировал, то без проблем вы бы смогли запустить её со скоростью 72ms. А со скоростью 46 ms посидев над мануалами и сорсами день-недельку. По сравнению со многими другими вариантами — это очень хорошо. Но не забывайте, что что бы вы не делали — никогда не верьте бенчмаркам от NVIDIA! RaspberryPI 4 Продакшн?.. Я так и слышу, как десятки инженеров начинают смеяться от упоминания слова “RPI” и “продакшн” рядом. Но, я вынужден сказать — RPI всё же стабильнее Jetson Nano и Google Coral. Но, безусловно, проигрывает TX2 и, судя по всему, gyrfalcone. (Картинка отсюда. Мне кажется что приделывание вентиляторы к RPi4 это отдельное народная развлекуха.) Из всего списка это единственный девайс который я не держал в руках/не тестил. Но пускал нейронки на Rpi, Rpi2, Rpi3 (например тут рассказывал). В целом Rpi4, как я понимаю, отличается только производительностью. Мне кажется, что плюсы и минусы у RPi знают всё, но всё же. Минусы:
Плюсы:
Про скорость 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ов вы там не найдёте. Только глубокая польза. И, по нашему опыту, туда достаточно сложно перегнать сетку, если у вас есть какие-то хитрости в архитектуре, отличные от суровых стандартов. Зато ребята перегнали некоторые, даже достаточно сложные модели: Мне кажется, что Intel со своим OpenVino выбрал очень интересную стратегию. Они в роли постоянного догоняющего. Но такого, который после того как догоняет размазывает любого. В тот момент когда из нейронок выжмут всё — придёт Интел и захватит готовый рынок. Уже сейчас в 70% задачах можно собрать решение на основе OpenVino. И в рамках этой стратегии Movidius выглядит её логичным дополнением. Это устройство на котором нужно инфересить всё это богатство. Большинство сеток оптимизировано именно под него (иногда даже до бинарной архитектуры, что очень быстро). Глобально минус у него один. USB это, блин, не продуктовый разъём!!! Вы не можете сделать девайсину с USB. Выход есть. Intel продаёт чипы. Даже что-то такое есть в продаже на прошлом поколении (1, 2) Вроде как есть продукты на нём. Но я не видел ни одной продуктовой платы на которой можно было бы разработать что-то. И ни одна знакомая мелко-средняя фирма ничего разрабатывать на базе этого чипа не начинала. С другой стороны что будет танку?.. Он нас всё равно догонит и раздавит:) Ах да, и из радостного. OpenVino, как я понимаю, разрабатывают в России, в Нижнем Новгороде (мне кажется что половину Computer Vision делают там). Вот тут Сергей про него рассказывает:
Ладно, уже почти про всё сказали. Краткая вытяжка по Movidius 2. Минусы:
Плюсы:
Сами мы не использовали его ни в одном проекте. Все наши знакомые которые тестили его для инференса задач — в результате не взяли в продакшн. Но пара фирм которые я консультировал, где были задачи уровня “нам надо поставить 20-30 камер на шлагбаумы, но покупать ничего не хотим, разработаем сами” — вроде как в итоге взяли именно Movidius. Недавно Intel анонсировал новую платформу. Но пока никакой подробной информации нет, посмотрим. UPD Прислали ссылку на такое. Плата с двумя Мовидиусами вторыми. Вполне себе embedded формат. PCI-e шину много кто для такого использует. К таким вещам только в цене вопрос. Два мовидиуса — вряд ли такая штука будет дешевле чем 200 у.е. стоить. А ещё нужно будет свою плату с своей системой… Google Coral Я разочарован. Не, нет ничего чего бы я не предсказывал. Но я разочарован что Google решили выпустить это. Тестил это чудо я в начале лета. Может быть с тех пор что-то изменилось, но описывать я буду свой тогдашний опыт. Ок. Запустили. Как вы думаете, просто ли запустить вашу сетку на нём? Почти никак:) Вот список того что можно пустить. Если честно, то до этой мысли я дошёл не быстро. Потратил пол дня. Нет, правда. Вы не можете скачать модель из репозитория TF и запустить на устройстве. Или там надо перекорёжить все слои. Инструкции не нашёл. Так вот. Надо взять именно модель из репозитория сверху. Их там не много (с начала лета добавилось 3 модели). И как её дотренировать? Открыть в TensorFlow в стандартном пайплайне? ХАХАХАХАХАХАХА. Конечно нет!!! У вас есть специальный Doker-контейнер, и модель будет тренироваться только в нём. (Наверное, можно как-то и в своём TF затрейнить… Но инструкции, инструкции… Которых не было и вроде нет.) Скачали/установили/запустили. Что это такое… Почему GPU на нуле?.. ПОТОМУ ЧТО ТРЕНИРОВАТЬСЯ БУДЕТ НА CPU. Докер есть только под него!!! Хотите ещё прикол? В инструкции написано “based on a 6-core CPU with 64G memory workstation”. Кажется что это лишь совет? Может быть. Только вот мне не хватило моих 8 гигов на том серваке где большая часть моделей тренируется. Обучение на 4-ртом часу выжрало их все. Стойкое ощущение что у них что-то текло. Я попробовал ещё пару дней с разными параметрами на разных машинах, эффект был один. Я не стал перепроверять это перед тем как выложить статью. Если честно, то мне хватило одного раза. Что ещё добавить? Что этот код не генерит модель? Чтобы её сгенерить вы должны:
Это самое большое омерзение которое я испытал в отношении IT продукта за последний год… Глобально Coral должен иметь ту же идеологию что и OpenVino с Мовидиусом. Только вот Интел уже по этому пути идёт несколько лет. С отличными мануалами, поддержкой и хорошими продуктами… А Гугл. Ну это просто Гугл… Минусы:
Плюсы:
Gyrfalcon Про этого китайского зверя говорят последние полтора года. Даже я год назад что-то про него рассказывал. Но говорить — это одно, а информацию давать — другое. Я общался с 3-4 крупными фирмами, где менеджеры проектов/директора рассказывали мне о том какой классный этот Гирфалькон. Но никакой документации у них не было. И живьём они его не видели. На сайте информация почти отсутствует. Скачать с сайта хоть что то могут только партнёры (разработчики железа). Более того, информация на сайте очень противоречива. В одном месте пишут что поддерживают только VGG, в другом что только свои нейронки основанные на GNet (которые по их заверениям очень маленькие и ваааще без потери точности). В третьем написано что всё конвертируется с TF|Caffe|PyTorch, а в четвёртом написано и про мобилнет и про прочие прелести. Понять что правда — почти невозможно. Когда-то я копался и нарыл несколько видео, в которых проскакивают хоть какие-то числа:
Зато удалось посмотреть оригинальную документацию. Из неё тоже мало что понятно (китайский). По хорошему надо было тестить и смотреть исходники. Техподдержка RockChip на нас тупо забила. Не смотря на этот ужас мне понятно, что тут всё же в первую очередь косяки RockChip’а. И у меня есть надежда что в нормальной плате Gyrfalcon может быть вполне используемым. Но из-за недостатка информации мне сложно сказать. Минусы:
Плюсы:
Если вкратце рассказывать, то заключение такое: очень мало инфы. Нельзя закладываться только на эту платформу. И прежде чем что-то сделать на ней — надо произвести огромный ресёрч. Скорости Мне очень нравиться, как 90% сравнений embedded устройств сводят к сравнению скоростей. Как вы поняли выше — данная характеристика очень условна. Для Jetson Nano можно запускать нейронки как чистом tensorflow, можно на tensorflow-tensorrt, а можно на чистом tensоrrt. Устройства с специальной тензорной архитектурой (movidius | coral | gyrfalcone) — может будут быстры, но в первую очередь могут работать только с стандартными архитектурами. Даже для Raspberry Pi не всё так однозначно. Нейронки от xnor.ai дают ускорение в полтора раза. Но я не знаю насколько они честные, а что выиграно за счёт перехода к int8 или другим приколам. При этом, ещё одной интересной штукой является такой момент. Чем сложнее нейронка, чем сложнее устройство для инференса — тем непредсказумее будет итоговое ускорение которое можно вытащить. Взять какой-нибудь OpenPose. Там нетривиальная сеть, сложная постобработка. И то и то можно оптимизировать за счёт:
Иногда кто-то пробует оценить что-то такое для всех возможных комбинаций. Но реально, как мне кажется, это бесперспективно. Сперва надо определиться с платформой, а уже потом пробовать полностью вытащить всё что можно. К чему я это всё. К тому что тест “сколько времени работает MobileNet” — это очень плохой тест. Он может выдать что платформа X оптимальна. Но когда вы попробуете развернуть там свою нейронку и постобработку, то вас может ждать очень большое разочарование. Но сравнение mobilnet’ов всё же даёт какую-то информацию о платформе. Для простых задач. Для ситуаций когда вы понимаете что всё равно задачу проще к стандартным подходам свести. Когда вы хотите оценить скорость именно вычислителя. Таблица ниже взята из нескольких мест:
Как результат имеем: Сравнение платформ Попробую подвести всё что я говорил выше к некоторой единой таблице. Жёлтым я выделил те места где моих знаний мало чтобы сделать однозначный вывод. И, собственно 1-6 — это некоторое сравнительная оценка платформ. Чем ближе к 1 — тем лучше. Я знаю что много для кого критичным является энергопотребление. Но мне кажется что тут всё несколько неоднозначно, а я слишком плохо в этом разбираюсь — так что вводить не стал. Тем более сама идеология вроде как всюду одинакова.Шаг в сторону То о чём мы говорили — это лишь небольшая точка в огромном пространстве вариаций вашей системы. Наверное, общие слова которыми можно охарактеризовать эту область:
Но, глобально, если уменьшить значимость одного из критериев — в список можно вносить множество других устройств. Ниже я пройдусь по всем подходам которые встречал. Intel Как мы говорили, когда обсуждали Movidius, у Intel есть платформа OpenVino. Она позволяет очень эффективно обрабатывать нейронки на процессорах Intel. При этом платформа позволяет поддерживать даже всякие intel-gpu на чипе. Я сейчас боюсь точно утверждать о том какая там производительность под какие задачи. Но, как я понимаю, хороший камень с GPU на борту вполне ? производительности от 1080 выдаёт. По некоторым задачкам может даже быстрее. При этом форм фактор, например Intel NUC, достаточно компактен. Хорошее охлаждение, корпусирование, и.т.д. По скорости будет быстрее чем Jetson TX2. По доступности/простоте покупки — сильно проще. Стабильность платформы из коробки — выше. Минусов два — энергопотребление и цена. Разработка чуть сложнее.Jetson AGX Это ещё один джетсон. По сути самая старшая версия. По скорости примерно в 2 раза быстрее Jetson TX2 плюс есть поддержка int8 вычислений, что позволяет разогнать ещё в 4 раза. Кстати, зацените вот эту картинку от Nvidia: Они сравнивают два своих же Джетсона. Один в int8, второй в int32. Я даже не знаю какие слова тут нужно говорить… Короче: “НИКОГДА НЕ ВЕРЬТЕ ГРАФИКАМ ОТ NVIDIA”. Не смотря на то что AGX это хорошо — он не дотягивает до нормальных GPU от Nvidia по вычислительной силе. Тем не менее по энергоэффективности — они очень крутые. Основной минус цена. Мы сами с ними не работали, так что мне сложно сказать что-то более подробное, описать спектр задач где они самые оптимальные. Nvidia gpu | laptop version Если отменить жёсткое ограничение на энергопотребление, то Jetson TX2 уже не выглядит оптимальным. Как и AGX. Обычно люди пугаются использовать GPU в продакшне. Отдельная плата, всё такое. Мобильники Я не хочу вдаваться в эту тему глубоко. Чтобы рассказать всё что есть в современных мобильниках для нейронок/какие фреймворки/какое железо, и.т.д., понадобится не одна статья с эту размером. А с учётом того что мы тыкались в эту сторону всего 2-3 раза, я считаю себя некомпетентным для этого. Так что лишь пара наблюдений:
Мне кажется, что для embedded мобилки не лучшее решение (исключение — какие-нибудь низкобюджетные системы face recognition). Но видел пару случаев когда их использовали как ранние прототипы. GAP8 Недавно был на конференции Usedata. И там один из докладов был про инференс нейронок на самых дешёвых процах (GAP8). И, как говориться, голь на выдумки хитра. В рассказе пример был весьма притянут за уши. Но автор рассказывал как они смогли добиться инференса по лицам примерно за секунду. На очень простой сетке, по сути без детектора. Путём безумных и долгих оптимизаций и экономии на спичках. Мне такие задачи всегда не нравятся. Никакого исследования, только кровь. Но, стоит признать, что я могу представить себе задачки где низкопотребляющие процы дают классный результат. Наверное не для распознавания лиц. Но где-то где можно распознавать по 5-10 секунд входное изображение… Grove AI HAT Пока готовил эту статью, натолкнулся на эту embedded платформу. По ней очень мало информации. Как я понимаю — нулевая поддержка. Продуктивность тоже на нуле… И ни одного теста по скорости… Сервер/удалённое распознавание Каждый раз когда к нам приходят за консультацией по embedded платформе — мне хочется крикнуть “бегите, глупцы!”. Надо очень аккуратно оценивать необходимость такого решения. Проверять любые другие варианты. Всем и всегда я советую делать прототип с серверной архитектурой. И уже при его эксплуатации решать — нужно ли делать реальное embedded. Ведь embedded это:
Да, я знаю, что есть задачи где нельзя делать серверные решения. Но, как ни странно, их сильно меньше чем принято считать. Выводы В статье я старался обойтись без явных выводов. Это скорее повествование про то что сейчас есть. Чтобы делать выводы — надо исследовать в каждом конкретном случае. И не только платформы. Но и саму задачу. Любую задачу можно немного упростить/немного изменить/немного заточить под устройство. Источник: habr.com Комментарии: |
|