Насколько быстрее новый Raspberry Pi? Это намного быстрее.

В начале прошлого месяца я приступил к тестированию нового поколения аппаратного ускорителя, предназначенного для ускорения вывода машинного обучения на периферии. Так что у меня есть приблизительный критерий для сравнения, я также провел те же тесты на Raspberry Pi. Впоследствии многие люди жаловались, что мне следовало использовать TensorFlow Lite на Raspberry Pi, а не полноценный TensorFlow. Они были правы, все шло намного быстрее.

Затем, с выпуском фреймворка AI2GO от Xnor.ai, который использует бинарные весовые модели нового поколения, я посмотрел на скорость вывода этих моделей следующего поколения по сравнению с традиционным TensorFlow. Это также работало намного быстрее.

Однако с сегодняшним запуском нового Raspberry Pi 4, Model B, пора вернуться и снова взглянуть на тесты и посмотреть, насколько новый Raspberry Pi 4 быстрее предыдущей модели. Спойлер? Это намного быстрее.

Заголовок результатов сравнительного анализа

В целом новый Raspberry Pi 4 значительно быстрее, чем наши оригинальные результаты Raspberry Pi 3 и последующие, смотрящие на платформу AI2GO.

Мы видим примерно двукратное увеличение скорости вывода между исходными тестами TensorFlow и новыми результатами Raspberry Pi 4, наряду с аналогичным увеличением скорости вывода с использованием платформы Xnor AI2GO.

Однако мы видим гораздо большее изменение, глядя на результаты Coral USB Accelerator от Google. Добавление USB 3.0 к Raspberry Pi 4 означает, что мы видим приблизительное увеличение в 3 раза скорости вывода между нашими исходными и новыми результатами.

И наоборот, время логического вывода для Coral USB Accelerator, когда он был подключен через USB 2, а не через новую шину USB 3, фактически увеличилось в 2 раза. Этот несколько неожиданный результат, вероятно, связан с архитектурными изменениями, внесенными в новый Raspberry Pi.

Эти результаты демонстрируют как увеличенную пропускную способность вычислений NEON Raspberry Pi 4, так и преимущество включения в конструкцию пары портов USB 3.0: в первую очередь мы планировали использовать их для подключения устройств хранения данных, поэтому интересно увидеть еще один приложение в дикой природе . - Эбен Аптон , основатель, Raspberry Pi Foundation

Часть I - Бенчмаркинг

Более глубокий анализ результатов

Наши исходные тесты были выполнены с использованием TensorFlow и TensorFlow Lite на Raspberry Pi 3, Model B +, и они были повторно запущены с использованием нового Raspberry Pi 4, Model B, с 4 ГБ оперативной памяти. Логический вывод был выполнен с использованием моделей MobileNet v2 SSD и MobileNet v1 0.75 depth SSD, обе модели обучены на наборе данных Общие объекты в контексте (COCO). Тесты с использованием Coral USB Accelerator были аналогичным образом перезапущены с ключом ускорителя, подключенным к шине USB 2 и USB 3 Raspberry Pi 4.

ℹ️ Информация Наши исходные тесты сравнивали логический вывод на следующих платформах; Coral Dev Board, NVIDIA Jetson Nano, Coral USB Accelerator с Raspberry Pi 3, Model B +, оригинальный Movidus Neural Compute Stick с Raspberry Pi 3, Model B +, и второе поколение Intel Neural Compute Stick 2 снова с Raspberry Pi 3, Model B +. Наконец, мы снова запустили те же модели на моем Apple MacBook Pro (2016) с четырехъядерным процессором Intel Core i7 с тактовой частотой 2,9 ГГц и ванильным Raspberry Pi 3, Model B + без какого-либо ускорения.

Платформа Xnor.ai AI2GO была протестирована с использованием их средней модели детектора кухонных объектов. Эта модель представляет собой сеть с двоичными весами, и, хотя природа обучающего набора данных неизвестна, доступны некоторые технические документы по этой модели.

Использовалось одно тестовое изображение размером 3888 × 2916 пикселей, содержащее в кадре два узнаваемых объекта - банан🍌 и яблоко🍎. Размер изображения был уменьшен до 300 × 300 пикселей перед тем, как представить его каждой модели, и модель была запущена 10 000 раз, прежде чем было взято среднее время вывода. Первый прогон логического вывода, который занимает больше времени из-за накладных расходов на загрузку в случае моделей TensorFlow, был отброшен.

⚠️ Предупреждение. Хотя тесты выполнялись для TensorFlow, AI2GO и Coral USB Accelerator, обновления Raspbian, необходимые для поддержки платы - от Raspbian Stretch до Raspbian Buster - означают, что установленная версия Python перемещена с Python 3.5 на 3.7. Это изменение означало, что я не смог запустить тесты для TensorFlow Lite, Movidus Neural Compute Stick или Intel Neural Compute Stick 2. Хотя проблемы с TensorFlow Lite, вероятно, будут решены довольно легко, переход инфраструктуры Intel OpenVINO с Python 3.5 на 3.7 займет некоторое время. Поэтому не стоит ожидать, что Intel Neural Compute Stick будет работать с Raspberry Pi 4 в ближайшем будущем.

В целом для моделей на базе процессоров мы видим примерно двукратное увеличение производительности.

Имея примерно вдвое большую емкость NEON, чем Raspberry Pi 3, мы могли бы ожидать такого порядка ускорения производительности для хорошо написанных ядер NEON, и, как и ожидалось, после решения проблем с тепловым регулированием мы увидели примерно двукратное увеличение производительности. как для моделей MobileNet v1, так и для фреймворка Xnor.ai AI2GO.

Улучшения производительности, наблюдаемые с моделями бинарных весов платформы AI2GO, с наблюдаемым временем вывода 79,5 мс на неускоренном Raspberry Pi 4, напрямую сопоставимы с MacBook Pro (2016), у которого время вывода составляло 71 мс для SSD MobileNet v2.

Однако гораздо меньшее ускорение, которое мы наблюдаем для моделей MobileNet V2, интригует, предполагая, что модель v2 может использовать очень разные операции TensorFlow, которые плохо оптимизированы для данной архитектуры.

Хотя логический вывод с использованием TensorFlow Lite не был выполнен из-за перехода с Python 3.5 на 3.7, сломавшего колесо Python, я также ожидал бы увидеть примерно двукратное ускорение во время вывода для этих моделей по той же причине.

Однако, вероятно, самый большой вывод для тех, кто хочет использовать новый Raspberry Pi 4 для логических выводов, - это повышение производительности, наблюдаемое с Coral USB Accelerator. Добавление USB 3.0 к Raspberry Pi 4 означает, что мы видим приблизительное увеличение скорости вывода в 3 раза по сравнению с нашими исходными результатами.

Это уменьшение времени логического вывода с 49,3 мс до 14,9 мс для модели MobileNet v1 с глубиной SSD 0,75 и уменьшение с 58,1 мс до 18,2 мс для модели MobileNet v2 SSD. Это фактически приводит к тому, что время вывода для Raspberry Pi 4 ниже, чем у Coral Dev Board, у которого время вывода для моделей составляло 15,7 и 20,9 мс соответственно.

И наоборот, время логического вывода для Coral USB Accelerator, когда он был подключен через USB 2, а не через новую шину USB 3, фактически увеличился в 2 раза. Этот несколько неожиданный результат, скорее всего, связан с архитектурными изменениями, внесенными в новый Raspberry Pi. Теперь, когда хост XHCI находится на дальнем конце шины PCI Express, в системе потенциально намного больше задержки. В зависимости от модели трафика вы можете себе представить, что блокировка, в отличие от потоковой передачи, использование канала может быть медленнее.

ℹ️ Информация. Хотя на предварительной плате, которую я использовал, было 4 ГБ ОЗУ, маловероятно, что для Coral USB Accelerator, где логический вывод выполняется вне платы на Edge Сам TPU, что это существенно повлияет на результат и ожидает увидеть те же результаты тестов или, в худшем случае, в целом схожие для плат Raspberry Pi 4 с 1 ГБ или 2 ГБ оперативной памяти на борту.

Факторы окружающей среды

Хотя скорость вывода, вероятно, является нашим самым важным показателем, это устройства, предназначенные для машинного обучения на периферии. Это означает, что нам также необходимо обращать внимание на факторы окружающей среды. Разработка смарт-объекта - это не только программное обеспечение, которое вы на него устанавливаете, вы также должны обращать внимание на другие факторы, и здесь мы особенно озабочены нагревом и охлаждением и диапазоном мощности. Потому что при проектировании для Интернета вещей может потребоваться компромисс между скоростью вывода и другими факторами.

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

Потребляемая мощность

Измерения тока проводились с использованием мультиметра, встроенного в кабель USB с заявленной точностью ± 0,01 А (10 мА).

За исключением MacBook Pro, все наши платформы используют номинальное входное напряжение 5 В. Однако на самом деле напряжение будет несколько колебаться из-за требований, предъявляемых платой, и большинство USB-источников фактически находятся в диапазоне от +5,1 до + 5,2 В. Поэтому при выполнении грубых расчетов для получения мощности (в ваттах) я обычно принимаю напряжение USB-источника питания равным + 5,15 В, поскольку хороший источник обычно пытается поддерживать подаваемое напряжение около этого значения, несмотря на быстрые колебания в потребляемом токе.

Эти колебания спроса часто случаются, когда вы используете периферийные устройства с Raspberry Pi, и часто вызывают отключение электричества, а многие USB-зарядные устройства, предназначенные для обеспечения постоянного тока для зарядки мобильных телефонов, обычно этого не делают. Я хорошо со всем справляюсь. Это одна из причин, по которой новый Raspberry Pi 4 перешел с micro USB на стандарт USB-C.

Во время нашего предыдущего тестирования мы увидели, что Raspberry Pi 3, модель B +, была сравнительно энергоемкой, и только NVIDIA Jetson Nano нуждалась в большей мощности. Наши новые измерения показывают, что новый Raspberry Pi 4 является худшим из всех платформ, потребляя более 1400 мА на пике во время расширенного тестирования. Он также имеет самое высокое потребление в состоянии покоя, потребляя больше холостого тока, чем Coral Dev Board.

Отопление и охлаждение

В предыдущих расширенных тестах мы видели, что температура Raspberry Pi приближается к точке 80 ° C, но не превышает ее, когда происходит тепловое дросселирование процессора во время логического вывода с использованием моделей TensorFlow и TensorFlow Lite.

Мои первоначальные результаты теста AI2GO дали время вывода 90,9 мс, что было значительно выше, чем ожидалось. Однако во время этих тестовых прогонов мы наблюдали температуры значительно выше порога теплового дросселирования.

$ vcgencmd measure_temp
temp=84.0'C
$ vcgencmd measure_clock arm
frequency(48)=1000265600

Добавление маленького вентилятора, приводимого в действие собственными разъемами GPIO Raspberry Pi, было достаточным для поддержания стабильной температуры процессора на уровне 45 ° C во время тестирования.

После стабилизации температуры процессора время определения скорости снизилось с 90,9 мс до 79,5 мс. Этот результат больше соответствует ожидаемому результату: емкость NEON на новой плате примерно вдвое больше.

Однако из-за этой необходимости активно охлаждать Raspberry Pi во время тестирования, я бы порекомендовал, если вы собираетесь использовать новую плату для логических выводов в течение длительных периодов времени, вы должны добавить по крайней мере пассивный радиатор. Хотя, чтобы полностью исключить возможность троттлинга процессора, вполне вероятно, что небольшой вентилятор может быть хорошей идеей.

Потому что, давайте посмотрим правде в глаза, троттлинг процессора может испортить вам день.

Резюме

Повышение производительности, наблюдаемое с новым Raspberry Pi 4, делает его очень конкурентоспособной платформой для логических выводов машинного обучения на периферии.

Тесты с использованием платформы AI2GO и сетевых моделей с двоичным весом показывают, что время вывода может быть конкурентоспособным с NVIDIA Jetson Nano с использованием их оптимизированных для TensorRT моделей TensorFlow. Однако именно добавление шины USB 3.0 на новую плату делает ее не только по скорости, но и по цене конкурентоспособной с нашей предыдущей лучшей в своем классе платой Coral Dev Board от Google.

Версия нового Raspberry Pi 4 с объемом памяти 1 ГБ, оцененная в 35 долларов, значительно дешевле, чем Coral Dev Board за 149 долларов. Добавление дополнительных 74,99 доллара за Coral USB Accelerator к цене Raspberry Pi означает, что вы можете превзойти предыдущую «лучшую в своем классе» плату за 109,99 доллара. Это экономия на 39,01 доллара США по сравнению с Coral Dev Board за счет повышения производительности.

Часть II - Методология

Подготовка Raspberry Pi

К счастью, несмотря на различия между новым Raspberry Pi 4 и предыдущими поколениями, установка необходимого вспомогательного программного обеспечения не сильно отличалась. Однако по пути были некоторые икоты.

Установка программного обеспечения Coral

К сожалению, поскольку я запускал Coral Software Development Kit на совершенно новой плате Raspberry Pi, которая все еще была секретной, а команда Google еще даже не слышала о ней, я не мог установить все в обычном режиме. К счастью, со сценарием установки при доставке было лишь несколько небольших исправимых проблем. Вероятно, эта проблема будет быстро решена. Однако до тех пор вам нужно будет внести некоторые изменения, прежде чем все будет установлено и запущено.

Скачайте комплект для разработки программного обеспечения с помощью wget и распакуйте пакет в свой домашний каталог.

$ wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/edgetpu_api.tar.gz
$ tar -xvzf edgetpu_api.tar.gz
$ cd python-tflite-source

Но перед запуском скрипта установки пришлось внести некоторые изменения. Сценарий install.sh использует еще один сценарий, называемый platform_recognizer.sh, чтобы выяснить, на какой платформе развертывается Coral SDK, и установить соответствующие библиотеки. Я пошел дальше и добавил следующие строки,

elif [[ "$board_version" == "Raspberry Pi"* ]]; then
   platform="other_raspberry"
   echo -e "${GREEN}Recognised some other Raspberry Pi"

в дерево решений в скрипте platform_recognizer.sh. Это означает, что содержимое файла /proc/device-tree/model,

$ cat /proc/device-tree/model
Raspberry Pi ? Rev 1.1

для моей предварительной версии аппаратного и программного обеспечения было признано. Затем я изменил сценарий install.sh, чтобы принять это как правильный ответ,

elif [[ "$platform" == "raspberry_pi_3b" ]] || [[ "$platform" == "raspberry_pi_3b+" ]] || [[ "$platform" == "other_raspberry" ]];then

в обоих местах, где скрипт проверяет платформу, что будет в строках 64 и 109. Нам также нужно будет разделить строку 92 на две отдельные строки,

sudo udevadm control --reload-rules 
sudo udevadm trigger

из-за некоторых изменений между Debian Stretch и Buster.

Наконец, сценарий установки ожидает Python 3.5, а новейшая версия Raspbian, поставляемая с Raspberry Pi 4, представляет собой разновидность Debian Buster, которая поставляется с Python 3.7. Таким образом, вам также придется изменить строку 116 сценария install.sh, изменив python3.5 на python3.7,

python3.7 setup.py develop --user

прежде чем вы сможете запустить сценарий установки,

$ ./install.sh

который теперь должен успешно завершиться.

После завершения установки подключите USB-ускоритель с помощью короткого кабеля USB-C - USB-A, который прилагается к USB-накопителю в коробке. Если вы уже подключили его, вам необходимо удалить его и снова подключить, поскольку сценарий установки добавляет несколько udev правил, позволяющих программному обеспечению, запущенному на Raspberry Pi, распознавать наличие оборудования Edge TPU.

Установка TensorFlow

Раньше установка TensorFlow на Raspberry Pi была непростым процессом, однако к середине прошлого года все стало намного проще.

К сожалению, официально выпущенный wheel имеет некоторые проблемы с Python 3.7. Теоретически это означает, что мы либо построим TensorFlow из исходного кода и всех его зависимостей, либо вернемся на Python 3.5. Ни то, ни другое не является особенно приятной мыслью, поскольку состояние репозитория пакетов Raspbian Buster все еще несколько меняется во время предварительной версии.

К счастью, Pete Warden представил колесо кандидатов для Python 3.7, а Ben Nuttall предоставил мне колеса для всех необходимых зависимостей. Скоро они станут официальными, поэтому вполне вероятно, что к моменту выпуска вы сможете установить TensorFlow официальным методом,

$ sudo apt-get install libatlas-base-dev
$ sudo apt-get install python3-pip
$ pip3 install tensorflow

но проверьте эту проблему с GitHub, прежде чем продолжить, чтобы убедиться, что это так.

Установка AI2GO

Платформа AI2GO устанавливается и запускается из коробки на новом Raspberry Pi 4, поэтому вы можете просто следовать инструкциям в разделе методологии моих предыдущих тестов, используя Raspberry Pi 3, чтобы настроить и загрузить комплект вашей модели.

После того, как вы его скачали, продолжайте и устанавливайте модельный набор,

$ cd ~/kitchen-object-detector-medium-300
$ pip3 install xnornet-1.0-cp35-abi3-linux_armv7l.whl
Processing ./xnornet-1.0-cp35-abi3-linux_armv7l.whl
Installing collected packages: xnornet
Successfully installed xnornet-1.0
$

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

Проблемы с TensorFlow Lite

Хотя официальный двоичный дистрибутив TensorFlow не включает сборку TensorFlow Lite, существует неофициальный дистрибутив, который включает. К сожалению, это колесо не было обновлено для поддержки Raspbian Buster и Python 3.7. Однако вполне вероятно, что ситуация изменится после того, как новый Rapsberry Pi будет официально выпущен, и в этот момент я, вероятно, вернусь и еще раз взгляну на TensorFlow Lite.

Проблемы с Neural Compute Stick

Программное обеспечение для поддержки Neural Compute Stick - это набор инструментов OpenVINO, и в настоящее время нет поддержки для запуска этого набора инструментов под Python 3.7, который поставляется с Raspbian Buster. К сожалению, мне не удалось провести тестирование производительности Movidus Neural Compute Stick или Intel Neural Compute Stick 2. Исходя из прошлой производительности, вероятно, обновление образа карты Raspberry Pi может занять некоторое время.

⚠️ Предупреждение. Не стоит ожидать, что Movidius Neural Compute Stick или Intel Neural Compute Stick 2 будут работать с Raspberry Pi 4 в ближайшем будущем.

Код сравнительного анализа

Код из наших предыдущих тестов был повторно использован без изменений.



В заключение

По-прежнему сложно сравнивать эти платформы на равных. Но очевидно, что новый Raspberry Pi 4 представляет собой надежную платформу для логических выводов машинного обучения на периферии.

Ссылки на предыдущие контрольные показатели

Если вас интересуют подробности предыдущих тестов.







Ссылки на руководства по началу работы

Если вы хотите начать работу с любым аппаратным ускорителем, который я использовал во время своих тестов, я собрал руководства по началу работы для оборудования Google, Intel и NVIDIA, на которое я смотрел во время анализа.