Что это

Jetson nano позиционируется как платформа для запуска нейросетей или других сложных программ которым требуется CUDA, в которой есть GPIO порты.

  1. Характеристики

    1. GPU 128-core Maxwell™ GPU

    2. CPU Quad-core ARM A57 @1.43 GHz

    3. RAM 2 GB 64-bit LPDDR4 | 25.6 GB/s

    4. Хранилище - microSD

    5. 1x MIPI-CSI camera connector

    6. Питание через USB C - 5V 3A

    7. 40-pin GPIO

    8. 12-pin header: Power and related signals, UART

    9. 4-pin разъём под вентилятор

    10. Размеры: 100mm x 80mm x 29mm

    11. Нет wifi

Настройка CUDA

Первым делом я попытался запустить CUDA на официальном образе, в стоке. Но установщик выдавал рекурсивную ошибку. На просторах интернета был найден репозиторий с готовым образом. Записав его на microSD карточку(для комфортной работы надо минимум 64 гига, т.к. сам образ занимает 31 гиг), и открыв jtop(htop но специально под jetson, отображающий его GPU, и статус некоторых библиотек) я увидел заветные “CUDA: 10.2.300”.

CUDA включена!
CUDA включена!

Тестирование 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А

Фото usb тестера с потреблением в пике(которое смогли заснять, было 2.2А, но не успел заснять)
Фото usb тестера с потреблением в пике(которое смогли заснять, было 2.2А, но не успел заснять)
Потребление в режиме простоя
Потребление в режиме простоя

Корпус

Одна из проблем это голые контакты снизу платы, а следовательно риск замыкания от установки на металлическую поверхность, решается самым обычным корпусом. Корпус был найден на 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)


  1. Bo_K_S
    19.06.2024 19:36

    спасибо что указали репу откуда взяли код) я мельком глянул там и не увидел оптимизации модели в tensorrt, только openvino через onnx. если джетсон нано смог выдавить из ванильной yolo8n 11 фпс - то это сам по себе уже почётный результат) а вот если конвертнуть её в tensorrt с квантированием в int8, и картинки кидать какие-нить 128х128 то я бы тогда посмотрел на фпс)


    1. ret77876
      19.06.2024 19:36

      К сожалению, с TensorRT возникли проблемы, начиная с экспорта.
      https://habr.com/ru/articles/822917/ (ближе к концу статьи есть информация про Jetson Nano)


    1. Saz_An
      19.06.2024 19:36

      На Jetson Nano с int8 есть проблемки

      https://forums.developer.nvidia.com/t/why-jetson-nano-not-support-int8/84060


  1. 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-а?


  1. Yapokhozhnakota
    19.06.2024 19:36
    +1

    А масштабировать можно производительность?

    Например: исходный кадр 100*100 разбиваем на 4 по 50*50 и каждый обрабатываем на отдельном Jetson nano.


    1. Dynasaur
      19.06.2024 19:36
      +1

      А что делать с объектом распознавания, у которого ухо попадёт в один джетсон, а нос в другой? Можно поступить иначе - выделять из видеопотока каждый четвёртый кадр и обрабатывать на отдельном джетсоне, но и тут будут проблемы с отслеживанием объекта. Один распознает пульт управления как мобилу, а другой как клавиатуру и с разными ИД, координатами и размерами. А третий вообще не выделит. А четвёртый два объекта примет за один. Потом надо будет ещё понять, что это один и тот же объект.

      Да и слишком громоздко это выйдет. В таком случае проще будет запустить на обычном PC с нормальной видеокартой.


      1. Technik12345 Автор
        19.06.2024 19:36
        +1

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


        1. ViktorPavlovA
          19.06.2024 19:36
          +1

          не корректное сравнение.Все таки jetson nano это про автономность без излишнего энергопотребления, хотя тоже сейчас он безбожно устарел и надо крутить на npu rk3588-e привет


    1. Technik12345 Автор
      19.06.2024 19:36

      Спасибо, за совет, уже ище спонсоров)

      https://ozon.ru/t/oYPaqY2