Я не знаю как правильно назвать обзор/гайд про эту плату. Самая китайская плата? Самая загадочная? Самая неоднозначная? В любом случае - одна из самых интересных!
На текущий момент мой топ Edge плат для Computer Vision / LLM, наверное такой:
Jetson Orin (Nano слабоват, а остальные норм)
Intel-based (без разницы что)
Hailo vs RochChip (не знаю что лучше)
Плата про которую мы будем говорить, наверное может потягаться за пятую позицию (скорее всего с Qualcomm). Но похоже, что не очень жаждет. Тем более за пределами Китая.
Мы будем говорить о плате на базе Huawei - OrangePi Ai Pro. Компания забанена в половине мира. Зато закачивается деньгами китайских налогоплательщиков. И делает достойные продукты!
Плата выпускается только для китайского рынка и является загадкой для тех кто не знает китайский. При этом в отличие от обычных китайских плат она не ужасная. Ну, почти.
Дисклеймер + контекст
Плату мне никто не присылал. Это у меня развлечение такое, доставать странные платы и смотреть насколько хорошо на них ML работает. А потом тащить в прод. За последние лет 15 работали и на блэкфинах и на прочей экзотике. Кажется, что были почти первооткрыватели Jetson’ов в 2014ом и RockChip’ов для Computer Vision года 3-4 назад.
Про всё это дело я делаю видео у себя на YouTube, пишу статьи тут, на медиуме или у себя в телеге.
В этом сравнении я буду опираться на много других плат. Моё мнение про многие из них можно найти в этом обзоре за 2022 год.
Данную статью можно найти на медиуме, или посмотреть в виде видео на YouTube
Покупка
Плату официально за пределы Китая, очевидно, не возят. Но достать, естественно, можно. Некоторое время назад было много путаницы с OrangePi 5 pro, но сейчас всё более-менее устаканилось. В России, кажется продается с оверпрайсом процентов 50 по сравнению с тем что в EC можно купить из Китая.
Кажется, что в Китае можно по 120-140$ купить.
Чипсет
Формально плата основана на процессоре Ascend (Ascend310B4).Сама 310 серия была запущена ещё году в 2018. B4, кажется, сделали ещё года 2 назад (но это не точно). Год назад была официальная референсная плата - Atlas 200I DK A2. Там уже и нормальный линукс и питон.
Но до сих пор всё что можно было купить было где-то за 500 евро, что дороговато. А OrangePi по цене неплох.
Документация
Подходим к первому квесту. Официальный сайт с документаций выглядит примерно вот так. На английском ничего. А все файлы, как водится, лежат только на Baidu.
Прямо пока я писал эту статью появилось англоязычный лендинг на сайте OrangePi. Но ссылки на скачивание пока что пустые.
Основной гайд можно найти на нескольких сайтах, например вот тут. Очевидно, что он на китайском. Но никаких образов или файлов там нет. И с остальными файлами сложнее.
Есть такой полуофициальный сайт. Тут есть не все + качает с него не у всех. Есть супер полезный сайт. Он про Atlas 200I DK A2. Софт весь совпадает. Но я не пробовал брать оттуда образ самой системы. И он отличается на 1GB. Так что именно его я бы не брал.
Но, понятно, можно выкачать с байду. Когда я упомянул у себя на канале что мне пришла плата, то ребята из KAVABANGA.TEAM поделились со мной скачанными с Байду образами. Выкладываю.
Точки получения информации
Комьюнити
Гиты
Прочее
Гайд как обойти ошибку с экспортом на плате - https://blog.csdn.net/qq_47941078/article/details/139277108
Официальный сайт, может наполниться - http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro(20t).html
Прошиваем
Документация советует писать образ через Balena Etcher. Но у меня не вышло. В итоге я записал через RPi imager. На сайте ascend есть своя тулза. Но она на китайском, я её не пробовал.
Запускаем
Запуск очевидный. Я предпочитаю через SSH. Люблю китайцев за то что логин пароль пишут на каждом столбе.
Можно подключаться через USB, через COM порт или напрямую монитор воткнуть.
Запускаем первый пример
Я очень люблю то, как китайцы в последнее время делают примеры. Даже в платах в которых почти нереально работать сделать красивый пример который запускается в 2 клика - это дело чести. Так было в:
Grove Vision AI (плата сама по себе скорее игрушка, но пример запускается из коробки)
MilkV, плате за 5 баксов. Один пример из коробки, а для запуска остального придётся пройти ад.
MaiX-III . Все примеры просто запускаются из питона. Но каждая сеть это запечённый бинарник на с++ с весами сети и кодом внутри
Короче красота первого примера меня в последнее время смущает. А тут он неплох:
cd samples/notebooks/
./start_notebook.sh
(ноутбук можно сконфигурировать чтобы просто было зайти снаружи, но я предпочитаю кидать туннель)
И всё. У вас интерфейс отуда можно запускать десяток примеров!
Мне кажется это самый простой и удобный способ запускать нейронки на удалённых бордах для новичков сейчас. Профессионал, понятно, полезет подключаться через VSCode. Но когда надо сделать быстро и понять что и как - удобно напрямую.
В этом месте заканчивается 99% гайдов про любые AI платы. А наш только начнётся.
Поговорим о том как запихать в плату вашу модель!
Экспорт
Если поискать поиском в основной документации. То вы не найдете слов ONNX, TensorFlow, PyTorch. Казалось бы это может сделать меня печальным. Но в официальном примере вроде как был описан экспорт. И вроде даже он работает прямо на плате:
Это редкость. Кажется, что на платах предпочитает конвертировать только Nvidia. Почти все остальные производители предпочитают делать экспорт на хост машине.
На практике - оно не запускается. По крайней мере на плате в 8Gb. Проблема описана тут.
Но это решение не работает. Судя по всему из-за того что референсная плата всё же другая. В примере от OrangePi видны попытки играться с свопом. Но у меня это не вышло. Процесс экспорта приводит к ребуту.
Уже когда я готовил статью я нашел вот этот подход к фиксу проблемы. Принудительно запускать компиляцию модели на одном ядре, добавив перед экспортом:
export TE_PARALLEL_COMPILER=1
export MAX_COMPILE_CORE_NUMBER=1
И это действительно помогает, но компиляция чудовищно долгая:
Чтобы её запустить надо инициировать все переменные и запустить:
. /usr/local/Ascend/ascend-toolkit/set_env.sh
export PYTHONPATH=/usr/local/Ascend/thirdpart/aarch64/acllite:$PYTHONPATH
atc --model=yolov5s.onnx --framework=5 --output=yolo5s_bs1 --input_format=NCHW --input_shape="input_image:1,3,640,640" --log=error --soc_version=Ascend310B4
Так что компиляцию счастливым владельцам 16GB плат оставим в качестве домашнего задания.
Настоящий экспорт
Для нас, простых смерных крестьян, доступен другой способ. Установка CANN-Toolkit на хост-машину. И экспорт через него. Обратите внимание что в системе должно быть не меньше 16 гигов оперативки. А лучше больше. Официальный гайд.
Скачиваем последний тулкит. Для меня это был седьмой.
Изначально я скачал версию 6.2 и ничего не работало. Пока я готовил публикацию вышла версия 8.0. Тоже не понятно совместима ли она или нет. Так что пока лучше использовать 7ой.Уставляем зависимости. Много.
sudo apt-get update
sudo apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev libbz2-dev libxslt1-dev unzip pciutils net-tools libblas-dev gfortran libblas3
Устанавливаем Python3 + pip3 если их ещё нет. Если есть не забудьте:
pip3 install --upgrade pip
А вот за этот кусок гайда надо отрывать руки. И учить людей делать в докерах. Так делают уже многие производители железа. Например Рокчип начал делать так. Hailo делает так. Нельзя вот так:
pip3 install attrs
pip3 install numpy
pip3 install decorator
pip3 install sympy
pip3 install cffi
pip3 install pyyaml
pip3 install pathlib2
pip3 install psutil
pip3 install protobuf
pip3 install scipy
pip3 install requests
pip3 install absl-py
Без указания версий, даже без готового Requirrements.txt … Короче, на сейчас как минимум numpy надо ставить <2.0. У меня пошло с 1.26.0. Каждый день разницы будет больше и больше. Теперь остаётся:
chmod +x Ascend-cann-toolkit_6.2.RC2_linux-x86_64.run
./Ascend-cann-toolkit_6.2.RC2_linux-x86_64.run --install
И в целом всё готово. Перед экспортом надо настроить энвайроменты:
source /home/ubuntu/Ascend/ascend-toolkit/set_env.sh
export LD_LIBRARY_PATH=/home/ubuntu/Ascend/ascend-toolkit/7.0.RC1/tools/ncs/lib64:$LD_LIBRARY_PATH
export PATH=/home/ubuntu/Ascend/ascend-toolkit/7.0.RC1/tools/ncs/bin/:$PATH
В разных гайдах стоит немного разное. Это то что зашло у меня. Установлено было в /home/ubuntu/Ascend/
Работает с какими-то ворнингами. Но работает!
Впечатление от экспорта
Это далеко не самая худшая плата:) Итоговый гайд достаточно простой и понятный. Совсем магических ошибок нет.
Но гайда нет готового ни в одном месте. Если либо на другую плату от Хуавея, либо очень обрывочный от OrangePi. Файлы системы надо собирать по всему инету. Даже при учёте что я хорошо понимаю что искать. А искать и гуглить ошибки на китайском, где Гугл не справляется - трешовенько.
Я бы дал 6-7 из 10. Справился где-то за ~5-6 часов.
ДИСКЛЕЙМЕР. По моему опыту с другими платами. Этот гайд пока работает. Но я уверен что не пройдет пол года и он уже сломается.
Переностимость слоёв
Все базовые сверточные сетки переносятся неплохо. Даже какие-то трансформеры пошли (Dinov2 проверил). Порог проходит там где уже надо работать с текстом. YoloWorld не экспортнулся из коробки.
И что с LLM не совсем понятно. Ни Torch ни Torch.jit не поддерживаются. Поддерживаются:
Onnx
Tensorflow
Caffe
MindSpore
Но, как вы понимаете, большая часть LLM’ок даже в ONNX плохо экспортиться. Так что ограничение, как мне кажется, больше будет на этом уровне. По чистым сверткам все ок, а всю логику надо доставать из модели.
Экспортнуть виспер отсюда удалось только частично.
Посмотрим на скорость
Плата хороша по скорости! Все тесты ниже были сделаны в FP16 (в int8 должно быть в 2 или в 4 раза быстрее). Yolov5:
preprocess time:
0.0060651302337646484
inference time:
0.04085516929626465
nms time:
0.0065386295318603516
Посмотрите на сравнение с другими платами тут (к сожалению, пока не добавил несколько новых ). Быстрее получаются:
Jetson Orin
RK3588 в режиме 12 потоков (из-за хитрого 3х-ядерного NPU там надо изголяться) в одном потоке медленнее
Hailo-8 (но hailo это int8 и очень зависимо от того насколько быстрая шина). Например модерновый RPi Ai Kit будет медленнее.
MAIX-III (но он абсолютно неюзабильный)
Intel процы (но достаточно современные)
При этом, по простоте, юзабильности, скорости, цене и поддержке единственный прямой конкурент получается RK3588 (и он мне больше нравиться, но об этом позже)
И немного сравнений Dinv2 я тестировал тут:
Dinov2S (224*224) - 46ms
Dinov2B (224*224) - 111ms
ResNet-50 - 12ms
Пара важных замечаний:
Платформа всегда может лучше перформить на других архитектурах. Не надо ждать аналогии в других сетях с тем же РокЧипом.
Увеличение размера батча не приводит к ускорению
Посмотрим на потребление
Я немного озадачен. Потребление в режиме ожидания составляет - 7Вт, а потребление при полной загрузке npu — 9Вт. Это полностью отличается от всех других плат, которые я тестировал.
Температура
Температура тоже очень странная. Я тестировал это без кулера. Плата очень горячая, даже в режиме ожидания. И температура почти такая же во время инференса сеток.
Общее мнение о юзабильности
Ох. А вот тут интересно.
Буду говорить на фоне всего того с чем я имел дело.
Когда выбираешь плату - то важно в первую очередь смотреть а что она решает и где её можно использовать.
Понятно что если плата будет использоваться в любой критической инфраструктуре. Больницы, умный город, и.т.д., то никто в Европе или Америке не будет использовать китайские платы. Там мы используем Jetson’ы, hailo, интелы. Можно ещё пяток других плат.
Частный бизнес вполне норм использовать китайцев. И это то почему всякие простые штуки (наблюдение за животными, умные магазины, частные парковки, и.т.д.) часто используют РокЧипы.
Но с orangePi AiPro есть проблемы:
Даже для Европы/Америке/Японии можно использовать не везде.
Даже Россия не является основным рынком для платы. Надо много чего дополнительного выдумывать чтобы оно работало корректно и поставлялось хорошо.
Даже не пытаются писать документацию на английском
И кажется, что этих трех проблем хватает чтобы выбирать пока рокчипы везде кроме супер больших партий (там надо смотреть на немного другие параметры)