Что это
Jetson nano позиционируется как платформа для запуска нейросетей или других сложных программ которым требуется CUDA, в которой есть GPIO порты.
-
Характеристики
GPU 128-core Maxwell™ GPU
CPU Quad-core ARM A57 @1.43 GHz
RAM 2 GB 64-bit LPDDR4 | 25.6 GB/s
Хранилище - microSD
1x MIPI-CSI camera connector
Питание через USB C - 5V 3A
40-pin GPIO
12-pin header: Power and related signals, UART
4-pin разъём под вентилятор
Размеры: 100mm x 80mm x 29mm
Нет wifi
Настройка CUDA
Первым делом я попытался запустить CUDA на официальном образе, в стоке. Но установщик выдавал рекурсивную ошибку. На просторах интернета был найден репозиторий с готовым образом. Записав его на microSD карточку(для комфортной работы надо минимум 64 гига, т.к. сам образ занимает 31 гиг), и открыв jtop(htop но специально под jetson, отображающий его GPU, и статус некоторых библиотек) я увидел заветные “CUDA: 10.2.300”.

Тестирование YOLOv8
Начнём с того, что я буду тестировать Yolo V8 (подробнее про запуск тут). Сначала нужно установить yolo, которая входит в пакет Ultralytics, а он вместе с собой доставляет ещё кучу всего, так что нужно активировать виртуальное окружение
// создаём и переходим в папку
mkdir yolo_test
cd yolo_test
// активируем виртуальное окружение
python3 -m venv yolo_test
source venv/bin/activate
// Ставим YOLO
pip install ultralytics
Активируем jetson-clock, снимаем ограничение на питание, врубаем вентилятор
sudo nvpmodel -m 0 // отключаем ограничение потребления
sudo jetson_clocks // Фиксируем частоты
sudo bash -c "echo 255 > /sys/devices/pwm-fan/target_pwm" //Ставим вентилятору максимальные обороты
Код для запуска тестов нейросети взял (тут)
Запускаем….
Jetson намертво завис, решаем отключением питания.
Отключаем графический интерфейс sudo systemctl stop gdm, cнова запускаем.
Скрипт начинает работу, но система убивает его, из-за недостатка оперативки. Расширяем swap:
git clone https://github.com/JetsonHacksNano/resizeSwapMemory
./setSwapFileSize [ [-g #gigabytes ] | [ -m #megabytes ] | [ -h ]
Снова запускаем и получаем результаты
Диаграмма FPS на 2х моделях(минимальной и модели для сегментации(подробнее тут, тут))

Как мы видим, fps на cpu очень низкий(1 кадр в секунду), и использовать его будет сложно реально. А фпс на CUDA отличается в лучшую сторону, 11 фпс это хороший результат при потреблении максимум в 9-10 вт.
Энергопотребление
Jetson nano крайне требовательный к питанию(по оф сайту 5в 2а, но на самой плате написано 5v 3a ?). У меня получалось так, что при минимальной просадке напряжения меньше 5 в, jetson выдаёт OS ALARM 0x0000001, и начинает тротлить. Из-за этого необходимо найти хороший блок питания, который не будет просаживать напряжение при скачках потребления. Я пробовал на нескольких блоках питания(и на 1 повербанке) с одинаковыми характеристиками(выдают 5v 3А). В итоге, получились такие результаты:
Noname повербанк: в пиках нагрузки периодически возникает os alram.
Xiaomi блок питания 33w: работает идеально, никаких os alarm нет.
Лабораторный блок питания(Wanptek APS3010H) выставленный на 5.15v, 8А, питающий jetson через порезанный type-c провод: В пиках выдает многократные os alram.
Xiaomi блок питания 33w, в нём usb тестер fnirsi: В пиках выдает многократные os alram.
Тесты проводились на блоке питания Xiaomi. Так-же вентилятор который я поставил(подробнее позже) кушает неплохо, с его учётом jetson потребляет в пике 2.2А, без него 1.8А


Корпус
Одна из проблем это голые контакты снизу платы, а следовательно риск замыкания от установки на металлическую поверхность, решается самым обычным корпусом. Корпус был найден на grabcad(корпус, подходит для обычного jetson nano и jetson nano 2gb), распечатан на 3D принтере, зашкурен и покрашен в чёрный цвет.
Охлаждение
Сразу после того, как он попал ко мне в руки, я заменил штатную термопасту на arctic mx-6. В режиме простоя jetson греется не сильно, градусов 30-40 максимум, благодаря хорошему радиатору. А вот во время активной работы, радиатор нагревается до такого состояния, что касаться больно, но при этом температура gpu и cpu не превышает 45 градусов. Для решения проблемы был куплен кулер NIDEC UltraFlo R40W12BS5AC-65(не судите строго, искал на авито, с подходящими размерами 40х40 и 4х пиновым штекером), и установил его пользуясь шпильками и гайками.

WiFi
В качестве WiFi модуля был выбран tplink wn725n, система его сразу опознала, подключение к wifi сети делается командой nmcli d wifi connect <network_name> password <password>
Возможно мне ‘повезло’, но у меня jetson подключался к сети примерно каждый 2 ребут)
Вывод
По моему мнению, данное устройство имеет смысл покупать если вам нужно запускать нейросети в поле, и при этом вам нужен gpio(например для общения с arduino(вдруг вы решите сделать турель с автонаведением)) или если вам нужны ядра CUDA, и вы не можете экспортировать модель например в openvino. Если вам нужны CUDA ядра(их тут 128), и нужна мобильность то имеет смысл покупать jetson nano, но на 4GB памяти(его цена отличается не сильно). В случаях если вам надо запускать нейросеть, и при этом нужен GPIO, имеет смысл брать jetson nano но на 4гб. В случаях когда CUDA не принципиально нужна(можно экспортировать например в openvine), энергопотребление не важно и GPIO тоже не нужно, я бы посоветовал присмотреться к мини пк с N100 или с другими процессороми Intel.
Комментарии (9)

DustCn
19.06.2024 19:36>> Как мы видим, fps на cpu очень низкий
https://docs.ultralytics.com/integrations/neural-magic/#benefits-of-integrating-neural-magics-deepsparse-with-yolov8 же или это тестирование ARM vs GPU внутри Jettison-а?

Yapokhozhnakota
19.06.2024 19:36+1А масштабировать можно производительность?
Например: исходный кадр 100*100 разбиваем на 4 по 50*50 и каждый обрабатываем на отдельном Jetson nano.

Dynasaur
19.06.2024 19:36+1А что делать с объектом распознавания, у которого ухо попадёт в один джетсон, а нос в другой? Можно поступить иначе - выделять из видеопотока каждый четвёртый кадр и обрабатывать на отдельном джетсоне, но и тут будут проблемы с отслеживанием объекта. Один распознает пульт управления как мобилу, а другой как клавиатуру и с разными ИД, координатами и размерами. А третий вообще не выделит. А четвёртый два объекта примет за один. Потом надо будет ещё понять, что это один и тот же объект.
Да и слишком громоздко это выйдет. В таком случае проще будет запустить на обычном PC с нормальной видеокартой.

Technik12345 Автор
19.06.2024 19:36+1Ну да, за счет 4х джетсонов можно купить комп с нормальной видяхой, с 4060 иди даже 4070, и будет больше 3000 CUDA ядер(4 * 128 = 512 CUDA у 4х джетсонов), нормальная память(у видяхи будет своя память, и не придётся брать свапом с CD карточки, и нейросеть будет работать быстрее), но разве что будет большое энергопотребление, и в условном роботе с 18650 будет сложно запускать.

ViktorPavlovA
19.06.2024 19:36+1не корректное сравнение.Все таки jetson nano это про автономность без излишнего энергопотребления, хотя тоже сейчас он безбожно устарел и надо крутить на npu rk3588-e привет
Bo_K_S
спасибо что указали репу откуда взяли код) я мельком глянул там и не увидел оптимизации модели в tensorrt, только openvino через onnx. если джетсон нано смог выдавить из ванильной yolo8n 11 фпс - то это сам по себе уже почётный результат) а вот если конвертнуть её в tensorrt с квантированием в int8, и картинки кидать какие-нить 128х128 то я бы тогда посмотрел на фпс)
ret77876
К сожалению, с TensorRT возникли проблемы, начиная с экспорта.
https://habr.com/ru/articles/822917/ (ближе к концу статьи есть информация про Jetson Nano)
Saz_An
На Jetson Nano с int8 есть проблемки
https://forums.developer.nvidia.com/t/why-jetson-nano-not-support-int8/84060