Как стать автором
Обновить

Jetson nano 2 GB. Есть жизнь для AI, или в гроб его?

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров3.2K

Что это

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.

Теги:
Хабы:
+12
Комментарии10

Публикации

Истории

Работа

Python разработчик
133 вакансии
Data Scientist
83 вакансии

Ближайшие события

12 – 13 июля
Геймтон DatsDefense
Онлайн