Варианты имплементации нейронных сетей на Nvidea Jetson Nano

автор рубрика , ,
Варианты имплементации нейронных сетей на Nvidea Jetson Nano

Варианты имплементации нейронных сетей

После успешного сбора мини-компьютера Jetson Nano хочется поближе познакомиться с его возможностями. Но если обычный пользователь не увидит разительных отличий от стандартного дистрибутива Ubuntu, то мы обратим внимание на инструменты, которые помогут нам в дальнейшем имплементировать обученную нейронную сеть на стенд, или, как говорят датасаентисты, «выкатить модель в прод».

Но прежде, чем бросаться реализовывать нейронные сети, давайте знакомиться.

Кратко о системе Jetson Nano

Для получения исчерпывающей информации о версии программного обеспечения и параметрах «железа» вашего Jetson Nano удобно использовать утилиту jtop. Запуск простой команды в Terminal Jetson Nano:

$ jtop — приоткрывает внутренний мир нашего устройства

Варианты имплементации нейронных сетей на Nvideo Jetson Nano

Важно в дальнейшем помнить про версию Jetpack 4.5.1 (L4T 32.5.1) – от нее зависит некоторые версии дополнительных утилит (например, версия образа docker для имплементации решений на базе Tensorflow). 

Помимо всего прочего данная утилита полезна при наблюдении за температурой и загрузкой процессорных ядер и графического ускорителя во время выполнения программы.

Убедившись в мощности нашего устройства и запомнив версию прошивки, далее перейдем к насущным вопросам.

Какими способами можно имплементировать модели на Jetson Nano?

В силу специфики элементной базы, на которой построен Jetson Nano, нельзя просто скопировать и развернуть нейронную сеть, обученную на стандартной машине в вашем любимом фреймворке на подобии Tensorflow, Pytorch, Caffe и т.д. Однако выход из такой неудобной ситуации все-таки есть, а точнее даже три:

  1. Конвертация моделей в TensorRT
  2. Использование контейнеризации (docker)
  3. Использование сторонних пакетов (jetson-inference), выступающих в качестве высокоуровневого интерфейса взаимодействия с TensorRT моделями

Теперь по порядку.

Конвертация моделей в TensorRT

Варианты имплементации нейронных сетей на Nvideo Jetson Nano

Tensor RT в широком смысле это отдельный комплект разработки программного обеспечения, позволяющий оптимизировать выполнение операций нейронной сети на чипах Nvidia. Для нас достаточно того факта, что практически все популярные фреймворки позволяют сконвертировать модели в формат TensorRT и оптимизировать их. Для подробной информации можно обратиться к документации.

Мы пока не останавливаемся на деталях имплементации моделей на TensorRT. Давайте просто убедимся, что в базовом окружении python, поставляемым с дистрибутивом системы, действительно имеется предустановленный пакет tensorrt. Для этого достаточно ввести следующую команду в Terminal Jetson Nano:

$ pip3 list

На экране мы увидим все доступные нам пакеты и модули python, нас же интересует строка:

Варианты имплементации нейронных сетей на Nvideo Jetson Nano

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

Хоть у нас теперь и есть решение «в лоб», но время не стоит на месте, и все большую популярность набирает следующая парадигма.

Использование контейнеризации (docker)

Мода последних лет на микро сервисные архитектуры программного обеспечения не обошла стороной разработки инженеров Nvidia. В комплекте программного обеспечения Jetson Nano идет встроенная поддержка docker.

Варианты имплементации нейронных сетей на Nvideo Jetson Nano

По данной ссылке можно найти множество вариантов образов контейнеров под практически любые задачи. Основное удобство состоит в том, что один раз собрав контейнер, вы может с легкостью переносить его на другие устройства Jetson Nano с аналогичной прошивкой. Масштабируемость за бесплатно – пользуйтесь.

В нашем случае мы взяли образ TensorFlow Container. Для скачивания образа вводим в Terminal команду

$ sudo docker pull nvcr.io/nvidia/ l4t-tensorflow:r32.5.0-tf2.3-py3

которая предоставит образ для нашей версии прошивки с предустановленным внутри Tensorflow 2.3.

Для запуска контейнера достаточно воспользоваться следующей командой Terminal:

$ sudo docker run -it —rm —runtime nvidia —network host nvcr.io/nvidia/ l4t-tensorflow:r32.5.0-tf2.3-py3

После сборки контейнера вы получаете среду с пакетами python, необходимыми для имплементации моделей нейроных сетей.

Продемонстрируем наш образ, хранящийся на Jetson Nano, выполнив команду Terminal

$ sudo docker image ls

Варианты имплементации нейронных сетей на Nvideo Jetson Nano

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

Использование сторонних пакетов (jetson-inference)

Компания Nvidia прикладывает все усилия не только к монополизации рынка графических вычислителей, но и созданию собственных высокопроизводительных компьютеров с мощными процессорами. И это еще не все. Инженерами Nvidia делается попытка создания собственной экосистемы разработки, которая включает высокоуровневое программное обеспечения, позволяющее «на коленке» создавать рабочие прототипы решений на базе подходов с использованием искусственного интеллекта. Такая прибыльная ниша как микро-компьютеры не осталась без внимания.

Мы рассмотрим (не прорекламируем) пакет jetson-inference. Для работы с ним необходимо пройти путь установки и тестирования для чего есть отличное видео. Мы не будем останавливаться на деталях установки и полном разборе имеющихся возможностей, но приведем часть наиболее важных инструментов.

Использование ранее обученных нейронных сетей для непосредственного запуска. Идея состоит в том, что часто для построения прототипа достаточно просто попробовать уже готовое решение. И Jetson Nano дает вам такую возможность. Представим на секунду, что ваша бизнес-задача — это детектирования предметов на стуле на кухне вечером, на который смотрит веб камера. Для того, чтобы ее успешно решить достаточно пройти следующие шаги:

1. Проверить подключение к вашей камере с использованием команды Terminal:

$ v4l2-ctl –list-devices

в нашем случае результат положительный

Варианты имплементации нейронных сетей на Nvideo Jetson Nano

2. Найти в папке с пакетом скрипт по детектированию предметов: 

jetson-inference/build/aarch64/bin/my-detection.py

3. Запустить скрипт командой Terminal:

$ python3 my-detection.py

и наблюдать запуск TensorRT

Варианты имплементации нейронных сетей на Nvideo Jetson Nano

4. Если все прошло успешно, то вы сможете начать анализировать возможность решения вашей бизнес-задачи и писать отчет. В нашем случае вывод прост: задачу можно решать методами искусственного интеллекта при небольших доработках исходной модели. А результат на экране — кружка и бутылка:

Варианты имплементации нейронных сетей на Nvideo Jetson Nano

Использование дообучения имеющихся моделей на ваших данных. Такой способ часто используется на практике, и мы с вами подробно познакомимся с ним в следующих частях нашей серии статей.

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

Как итог

Сегодня мы познакомились со способами имплементации решений на основе нейронных сетей в Jetson Nano. Кратко проговорили про каждый из трех подходов. Нельзя выделить из них лучший – данный вопрос решается индивидуально в рамках конкретной бизнес-задачи. Далее нас ждет сквозной пример выработки решения для задачи детектирования объектов – от подготовки данных до выкатки решения на стенде Jetson Nano.

Комментировать