Nvidia jetson tx2 windows 10
Ю. В. Соколовский
Инженер-программист 1 категории
Введение
В настоящий момент компанией NVIDIA разработана серия программно-аппаратных платформ, предназначенных для использования в составе систем технического зрения беспилотных летательных аппаратов $($БПЛА$)$, различных роботов и «умных» электронных устройств.
Одной из ведущих программно-аппаратных платформ, возможных к применению в различных устройствах промышленного назначения, является NVIDIA Jetson TX2 с набором инструментов JetPack 4.2, которая обладает низким уровнем энергопотребления, обеспечивая вычислительную производительность на уровне сервера для любых современных устройств. NVIDIA Jetson TX2 $($рисунок 1$)$ оснащена 256-ядерным графическим процессором NVIDIA с архитектурой Pascal, 64-битным модулем CPU Complex ARMv8 с шестью ядрами и 8 ГБ памяти LPDDR4 с 128-битным интерфейсом. Модуль CPU Complex объединяет в себе четырехъядерный кластер ARM Cortex-A57 и два ядра NVIDIA Denver 2. NVIDIA Jetson TX2 имеет габариты 50 х 87 мм, ее вес составляет 85 г, а уровень энергопотребления при стандартной нагрузке – всего 7,5 Вт.
Рисунок 1 — Программно-аппаратная платформа NVIDIA Jetson TX2
Настройка и конфигурирование NVIDIA JETSON TX2
Важным этапом подготовки NVIDIA Jetson TX2 для использования в составе мультикамерной системы технического зрения является установка пакета Jetpack 4.2. Для этого необходимо перейти на официальный сайт производителя по ссылке $($рисунок 2$)$.
Рисунок 2 – Страница NVIDIA JetPack 4.2
С сайта производителя необходимо скачать и проинсталлировать менеджер установки NVIDIA SDK Manager для JetPack 4.2 $($рисунок 3$)$, который предназначен для программно-аппаратных платформ Jetson AGX Xavier, TX2, and Nano Developer Kits. Подробнее о SDK можно прочитать в NVIDIA SDK Manager Documentation $($рисунки 4-5$)$.
Рисунок 3 – Скачивание NVIDIA SDK Manager для JetPack 4.2
Рисунок 4 – Ссылка на документацию NVIDIA SDK Manager
Рисунок 5 – Документация NVIDIA SDK Manager
Установку NVIDIA SDK Manager будем осуществлять на виртуальную машину с операционной системой Linux Ubuntu 16.04, для чего необходимо скачать пакет установки $($рисунок 6$)$ и скопировать или перенести его в предварительно созданную папку $($рисунок 7$)$.
Рисунок 6 – Скачивание пакета установки NVIDIA SDK Manager в Linux Ubuntu 16.04
Рисунок 7 — Копирование пакета установки NVIDIA SDK Manager в отдельную папку
Пакет установки NVIDIA SDK Manager предусматривает возможность запуска инсталляции как путем нажатия на него $($открывается окно установки$)$, так и через терминал. Для того, чтобы воспользоваться последним, способом следует в папке с пакетом открываем терминал и ввести команду для установки пакета:
sudo apt install ./sdkmanager_0.9.12-4180_amd64.deb
После чего ввести пароль для продолжения установки с правами администратора $($рисунок 8$)$.
Рисунок 8 – Установка пакета NVIDIA SDK Manager
После завершения установки пакета раскроется окно менеджера $($рисунок 9$)$.
Рисунок 9 — Окно запуска менеджера NVIDIA SDK Manager
Запуск sdk так же возможен двумя способами: нажатием кнопки Launch или через терминал. Для того, чтобы воспользоваться вторым способом $($рисунок 10$)$, необходимо открыть терминал и ввести команду:
Рисунок 10 – Запуск NVIDIA SDK Manager с помощью эмулятора терминала
В открывшемся окне $($рисунок 11$)$ необходимо ввести данные своей учетной записи, под которой вы зарегистрированы на developer.nvidia.com.
Рисунок 11 – Окно авторизации NVIDIA SDK Manager
После нажатия кнопки Login, появиться сообщение об разрешении использования data collection $($рисунок 12$)$, на этом этапе от данного шага можно отказаться, так как на процесс дальнейшей установки это не повлияет.
Рисунок 12 – Окно выбора использования data collection в NVIDIA SDK Manager
После чего появится окно конфигурации программного обеспечения и оборудования $($рисунок 13$)$.
Рисунок 13 – Окно конфигурирования программного обеспечения и оборудования
В конфигурации оборудования Target Hardware следует выбрать Jetson TX 2 $($рисунок 14$)$.
Рисунок 14 – Выбор программно-аппаратной платформы NVIDIA Jetson TX 2
После выбора устройства и нажатия кнопки OK следует перейти к шагу 2 — установке компонентов $($рисунок 15$)$.
Рисунок 15 – Окно установки компонентов JetPack 4.2
В состав компонентов для установки входят на хостовой машине:
- CUDA;
- компьютерное зрение — Computer Vision $($включает в себя OpenCV и VisionWorks$)$;
- набор инструментов разработчика — Developers Tools $($включает NVIDIA Nsight Graphics, NVIDIA Nsight Systems, DevTools Documentation$)$.
На программно-аппаратную платформу NVIDIA Jetson TX2 устанавливаются: операционная система Jetson $($файловая и операционная системы, драйверы и Flash Jetson TX2$)$ и JetsonSDK.
Jetson SDK включает в себя следующие компоненты:
- CUDA $($CUDA Toolkit for L4T$)$;
- AI $($cuDNN и TensorRT$)$;
- компьютерное зрение — Computer Vision $($включает в себя OpenCV и VisionWorks$)$;
- пакет для работы с Multimedia $($Multimedia API$)$.
Нажав Expand all можно просмотреть полный список устанавливаемых компонентов $($рисунки 16-18$)$.
Рисунок 16 – Список компонентов, устанавливаемых на JetPack 4.2 на хостовую машину
Рисунок 17 — Список компонентов, устанавливаемых на программно-аппаратную платформу NVIDIA Jetson TX2
Рисунок 18 — Список компонентов, устанавливаемых на программно-аппаратную платформу NVIDIA Jetson TX2
CUDA — это программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы NVIDIA. CUDA Toolkit предоставляет собой среду разработки для разработчиков C и C ++, создающих высокопроизводительные приложения с GPU-ускорением с библиотеками CUDA. Инструментарий включает в себя:
- Nsight Eclipse Edition $($средства отладки и профилирования, а также набор инструментов для кросс-компиляции приложений$)$;
- NVIDIA Nsight Systems $($инструмент профилирования для всей системы с минимальными издержками, предоставляющий разработчикам идеи для анализа и оптимизации производительности программного обеспечения$)$;
- NVIDIA Nsight Graphics $($это автономное приложение для отладки и профилирования графических приложений$)$.
Инструментарий для работы с системами искусственного интеллекта $($AI$)$ представлен:
- сuDNN $($CUDA Deep Neural Network$)$ – библиотекой, которая предоставляет высокопроизводительные примитивы для систем глубокого обучения и включает поддержку сверток, функций активации и тензорных преобразований;
- TensorRT — это высокопроизводительной средой для глубокого обучения для классификации изображений, сегментации и нейронных сетей обнаружения объектов. Она ускоряет процесс глубокого обучения, а также уменьшает объем памяти, выделяемой во время выполнения, для сверточных и неконвенционных нейронных сетей. TensorRT специально предназначена для быстрого и эффективного запуска уже обученной сети на графическом процессоре с целью получения результата $($процесса, который называется Inference$)$.
Система компьютерного зрения включает в себя:
- OpenCV — являющуюся лидирующей библиотекой с открытым исходным кодом для компьютерного зрения, обработки изображений и машинного обучения, и теперь имеет ускорение на GPU для работы в реальном времени;
- VisionWorks — это пакетом разработки программного обеспечения для систем компьютерного зрения и обработки изображений.
Пакет для работы с Multimedia $($Multimedia API$)$ предоставляет API низкого уровня для гибкой разработки приложений, в том числе:
- API приложения камеры, предлагающий низкоуровневый API-интерфейс с синхронизацией кадров для приложений камеры с возможностью управления параметрами камеры для каждого кадра, поддержкой нескольких $($в том числе синхронизированных$)$ камер и вывода потока EGL;
- API драйвера датчика$($сенсора$)$ содержащий: API V4L2 $($обеспечивает функции декодирования, кодирования, преобразования и масштабирования видео$)$ и V4L2 $($обеспечивает функции управления скоростью передачи, предустановки качества, кодирования с низкой задержкой, временный компромисс, карты векторов движения и т.д.$)$
Для установки на хостовой машине будет необходимо создать папки, предназначенные для скачивания и установки пакетов sdk_downloads и nvidia_sdk, и указать их в качестве папок назначения в менеджере установки NVIDIA SDKManager$($рисунки 19-20$)$.
Рисунок 19 — Создание директорий для скачивания и установки JetPack 4.2
Рисунок 20 — Выбор директорий для скачивания и установки JetPack 4.2 в NVIDIA SDK Manager
После указания и выбора папок следует закрыть DOWNLOAD & INSTALL OPTION, подтвердить согласие с лицензионным соглашением и нажать CONTINUE, для перехода к следующему шагу установки $($рисунок 21$)$.
Рисунок 21 – Подтверждение согласия с лицензионным соглашением NVIDIA
В появившейся форме ввести пароль администратора для продолжения установки $($рисунок 22$)$.
Рисунок 22 – Форма для подтверждения прав администратора и продолжения установки
После чего начнется загрузка и установка компонентов на хостовую машину $($рисунок 23$)$.
Рисунок 23 – Загрузка и установка компонентов JetPack 4.2 на хостовую машину
При завершении установки компонентов на хостовой машине будет предложено выполнить установку компонентов на программно-аппаратную платформу NVIDIA Jetson TX2.
После чего следует перейти в режим ручной $($рисунок 24$)$. установки и выполнить шаги согласно предлагаемой инструкции:
- Отключить устройство отсоединив адаптер питания;
- Заново присоединить адаптер;
- Нажать кнопку POWER для включения устройства;
- Нажать и удерживать кнопку RECOVERY FORCE;
- Нажать и отпустить кнопку RESET $($пока держите нажатой кнопку RECOVERY FORCE$)$;
- Подождать 2 секунды и отпустить кнопку RECOVERY FORCE.
Рисунок 24 – Окно ручного режима установки JetPack 4.2
После установки операционной системы $($Ubuntu 18.04$)$ на программно-аппаратной платформе NVIDIA Jetson TX2 на хостовой машине появляется окно автоматического продолжения установки с просьбой ввести IP, имя пользователя и пароль. Для получения IP следует в NVIDIA Jetson TX2 ввести в терминале ifconfig и получить требуемый IP-адрес, после чего ввести, имя пользователя и пароль, после чего продолжится установка компонентов $($рисунки 25-26$)$.
Рисунок 25 – Установка компонентов на программно-аппаратную платформу NVIDIA Jetson TX2
Рисунок 26 – Установка компонентов на программно-аппаратную платформу NVIDIA Jetson TX2
После завершения установки $($рисунок 27$)$ следует завершить подготовку и настройку программно-аппаратной платформы NVIDIA Jetson TX2 для использования в составе мультикамерной системы технического зрения. В виду малого объема собственного накопителя $($32 ГБ$)$. Следует доукомплектовать программно-аппаратную платформу твердотельным накопителем SSD $($который будет использоваться для установки программного обеспечения$)$ и SD картой памяти $($используемой в качестве Swap раздела$)$.
Рисунок 27 – Завершение установки Jetpack 4.2
Для контроля использования ядер и оперативной памяти следует установить утилиту, предназначенную для вывода на терминал списка запущенных процессов и информации о них $($монитор процессов$)$. В данном случае была установлена утилита htop, для чего в окне терминала была введена команда:
sudo apt-get install htop
Далее следует отформатировать SSD $($в нашем случае был взят SSD объёмом 512 Гб$)$ и SD карту памяти $($была взята карта памяти объемом 256 Гб$)$, которая будет использована как swap раздел. С целью выполнения описанных выше действий используем встроенную в Ubuntu утилиту $($рисунки 28-29$)$.
Рисунок 28 – Использование встроенной утилиты для форматирования твердотельного накопителя SSD и SD карты памяти
Рисунок 29 – Пример использования утилиты для форматирования
Для установки программного обеспечения $($например, сборки Qt, Qt-creator и т.п.$)$ требуется объём памяти больше, чем предоставляет платформа NVIDIA Jetson TX2. Для решения данной проблемы была использована в качестве swap раздела SD карта памяти объемом 256 Гб, вставленная в разъем кардридера имеющейся платформы. Для использования SD карты памяти с помощью встроенной утилиты discs было выполнено ее форматирование в формате Linux Swap Partition $($для этого следует нажать на SD -> форматировать –> тип Other, и выбирать раздел Linux Swap Partition$)$. После форматирования нажать на кнопку Activate selected swap partition $($рисунки 30-32$)$.
Рисунок 30 – Выбор типа форматирования для SD карты памяти
Рисунок 31 – Выбор форматирования SD памяти как Swap раздела
Рисунок 32 – Активация SD карты памяти в качестве Swap раздела
Проверка настроек и работоспособности программно-аппаратной платформы с помощью примеров
Для сборки примеров необходимо выполнить Makefile находящийся в папке с примерами командой:
$ sudo make –j8
Предварительно, для ускорения сборки, следует запустить дополнительные ядра программно-аппаратной платформы с помощью специального bash-скрипта или командами:
$ sudo echo 1 > /sys/devices/system/cpu/cpu1/online
$ sudo echo 1 > /sys/devices/system/cpu/cpu2/online
Введение NVIDIA Jetson TX2 Development Kit приводит к появлению нового инструмента nvpmodel-интерфейса командной строки. Nvpmodel представляет пять различных «режимов» на NVIDIA Jetson TX2. В таблице 1 приведены режимы, используемые ядра ЦП и максимальная частота используемого ЦП и ГП. Тестирование осуществлялось на всех режимах. Результаты выполнения тестовых примеров для CUDA и WorkVision представлены в таблице 2.
Таблица 1- Параметры nvpmodel-режимов.
Режим | Название режима | Denver 2 | Частота | ARM A57 | Частота | Частота GPU |
---|---|---|---|---|---|---|
0 | Max-N | 2 | 2.0 GHz | 4 | 2.0 GHz | 1.30 Ghz |
1 | Max-Q | 0 | 4 | 1.2 Ghz | 0.85 Ghz | |
2 | Max-P Core-All | 2 | 1.4 GHz | 4 | 1.4 GHz | 1.12 Ghz |
3 | Max-P ARM | 0 | 4 | 2.0 GHz | 1.12 Ghz | |
4 | Max-P Denver | 1 | 2.0 GHz | 1 | 2.0 GHz | 1.12 Ghz |
Таблица 2 — Результаты выполнения тестовых примеров для CUDA и WorkVision.
Тестовый пример | Количество fps в зависимости от режима | ||||
---|---|---|---|---|---|
0 $($Max-N$)$ | 1 $($Max-Q$)$ | 2 $($Max-P Core-All$)$ | 3 $($Max-P ARM$)$ | 4 $($Max-P Denver$)$ | |
smokeParticles$($CUDA 10.0$)$ | 25.5-33.7 | 19.4-28.4 | 18.3-28.4 | 23.5-31.2 | 23.0-28.7 |
Particles$($CUDA 10.04$)$ | 178.9-220.0 | 166.9-201.2 | 148.1-187.8 | 189.9-232.7 | 198.2-261.8 |
SfM Point Cloud Algoritm/Display, Display ограничен 30 fps $($VisionWorks$)$ | 20.8-45.2 / 18-30 | 11.2-27.2 / 15-20 | 19.3-35.1 / 15-20 | 13.7-34.7 / 14-20 | 16.6-35.4 / 15-20 |
GLX gears | 1327.9-1407.7 | 1042.7-1151.0 | 1054.6-1123.0 | 1682.0-2157.7 | 721.0-300.9 |
Количество включенных ядер $($htop$)$ | 6 ядер | 4 ядра | 6 ядер | 4 ядра | 2 ядра |
Для дополнительной оценки скорости GPU использовался тест GLX gears. Который устанавливается в операционной системе Linux Ubuntu 18.04 с помощью команды:
$ sudo apt-get install mesa-utils
Для оценки скорости GPU необходимо отключить вертикальную синхронизацию, которая ограничивает работу теста 60 fps, для чего следует выполнить команду:
$ vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears
При этом, мы видим, что максимальная производительность для тестовых примеров обеспечивается в режимах Max-N и Max-P ARM, а минимальная — в режиме Max-P Denver.
С целью тестирования Multimedia API произведем декодирование видео формата .h264 и .h265 полученное из тестовых видео $($имеющихся в свободном доступе для скачивания в сети интернет$)$ Big Buck Bunny для разрешений 640×360, 1280×720, 1920×1080 для формата .h264 и jellyfish $($доступном на сайте$)$ разрешением 3840×2160 $($4K$)$ для формата .h265.
Следует отметить, что видео-файлы изначально представлены в медиаконтейнерах .mp4 и .mkv, которые кроме видео могут включать аудио, субтитры и другие вложения. Для извлечения потока видео без вложений воспользуемся утилитой ffmpeg, представляющую собой набор свободных библиотек с открытым исходным кодом, предназначенных для конвертирования видеофайла из одного формата в другой, извлечения видео и захватывать видео в реальном времени и т.д.
Для этого необходимо скачать утилиту с официального сайта FFmpeg,выбрав тип операционной системы. После чего следует разархивировать скачанный архив ffmpeg-20190618-ebcf4d3-win64-static.zip.
Для запуска утилиты и получения сведений о файле необходимо поместить видео-файл в одну папку с файлом ffmpeg.exe, после чего запустить интерпретатор командной строки, введя в командной строке проводника или файлового менеджера $($Total Commander$)$, команду cmd.
В открывшемся окне введя команду:
ffmpeg -i
можно получить детальную информацию о файле продолжительность, bitrate, сведения о потоках, которые находятся в медиаконтейнере и др.
Для извлечения потоков необходимо ввести команды:
- для video — $ video_decode H264 –fps 60 —stats test.h264
- для video c аппаратной поддержкой $ video_dec_cuda test.h265 H265 -fps 60
При запуске видео в формате .h264 vs были получены следующие результаты, число fps:
- для видео разрешением 640×360, 1280×720, 1920×1080 – максимальное количество fps 60 $($что в два раза больше характеристики для видеопотока, полученной с помощью утилиты ffmpeg$)$;
- для видео высокой четкости 4К $($3840 × 2160$)$ максимальное количество fps 60 $($что соответствует полученному в качестве характеристики для видеопотока с помощью утилиты ffmpeg$)$.
При запуске видео в формате .h265 в декодере с аппаратной поддержкой, мы получаем максимальное количество fps установленного для данного типа видео, в данном случае — 60fps. Попытка увеличить количество fps c помощью средств, поддерживаемых утилитой для проигрывания тестовых примеров, как и воспроизвести видео с помощью декодера без аппаратной поддержки, успехом не увенчались.