Развертывание на NVIDIA Jetson с помощью TensorRT и DeepStream SDK
📚 В этом руководстве рассказывается, как развернуть обученную модель на платформе NVIDIA Jetson и выполнить вывод с помощью TensorRT и DeepStream SDK. Здесь мы используем TensorRT , чтобы максимизировать производительность вычислений на платформе Jetson.
Проверка аппаратного обеспечения
Мы протестировали и проверили это руководство на следующих устройствах Jetson
- Seeed reComputer J1010, построенный с помощью модуля Jetson Nano
- Seeed reComputer J2021, построенный с помощью модуля Jetson Xavier NX
Прежде чем начать
Убедись, что ты правильно установил JetPack SDK со всеми SDK-компонентами и DeepStream SDK на устройство Jetson, так как они включают в себя CUDA, TensorRT и DeepStream SDK, которые необходимы для этого руководства.
JetPack SDK предоставляет полноценную среду разработки для аппаратного ускорения разработок в области искусственного интеллекта. Все модули и наборы разработчика Jetson поддерживаются JetPack SDK.
Существует два основных способа установки, включая,
- Метод изображения на SD-карте
- Метод NVIDIA SDK Manager
Очень подробное руководство по установке ты можешь найти на официальном сайте NVIDIA. Там же можно найти руководства, соответствующие вышеупомянутым reComputer J1010 и reComputer J2021.
Установи необходимые пакеты
- Шаг 1. Зайди в терминал устройства Jetson, установи pip и обнови его
- Шаг 2. Клонируй следующее репо
- Шаг 3. Открой файл requirements.txt
- Шаг 5. Отредактируй следующие строки. Здесь тебе нужно сначала нажать i, чтобы войти в режим редактирования. Нажми ESC, затем набери :wq, чтобы сохранить и выйти из игры.
Примечание: torch и torchvision пока исключены, потому что они будут установлены позже.
- Шаг 6. Установи следующие зависимости
- Шаг 7. Установи необходимые пакеты
Установи PyTorch и Torchvision
Мы не можем установить PyTorch и Torchvision из pip, потому что они не совместимы для работы на платформе Jetson, которая основана на архитектуре ARM aarch64. Поэтому нам нужно вручную установить предварительно собранный PyTorch pip wheel и скомпилировать/установить Torchvision из исходников.
Посети эту страницу, чтобы получить доступ ко всем ссылкам PyTorch и Torchvision.
Вот некоторые из версий, поддерживаемых JetPack 4.6 и выше.
PyTorch v1.10.0
Поддерживается JetPack 4.4 (L4T R32.4.3) / JetPack 4.4.1 (L4T R32.4.4) / JetPack 4.5 (L4T R32.5.0) / JetPack 4.5.1 (L4T R32.5.1) / JetPack 4.6 (L4T R32.6.1) с Python 3.6.
- file_name: torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- URL: https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl
PyTorch v1.12.0
Поддерживается JetPack 5.0 (L4T R34.1.0) / JetPack 5.0.1 (L4T R34.1.1) / JetPack 5.0.2 (L4T R35.1.0) с Python 3.8.
- file_name: torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
-
Шаг 1. Установи torch в соответствии с твоей версией JetPack в следующем формате
Например, здесь мы используем JP4.6.1, поэтому выбираем PyTorch v1.10.0.
cd ~
sudo apt-get install -y libopenblas-base libopenmpi-dev
wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- Шаг 2. Установи torchvision в зависимости от версии PyTorch , которая у тебя установлена. Например, мы выбрали PyTorch v1.10.0, значит, нам нужно выбрать Torchvision v0.11.1.
sudo apt install -y libjpeg-dev zlib1g-dev
git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision
cd torchvision
sudo python3 setup.py install
Здесь список соответствующих версий torchvision, которые тебе нужно установить в соответствии с версией PyTorch :
- PyTorch v1.10 - torchvision v0.11.1
- PyTorch v1.12 - torchvision v0.13.0
Конфигурация DeepStream для YOLOv5
- Шаг 1. Клонируй следующее репо
- Шаг 2. Скопируй файл gen_wts_yoloV5.py из DeepStream-Yolo /utils в yolov5 каталог .
- Шаг 3. Внутри репо yolov5 скачай pt-файл из релизов YOLOv5 (пример для YOLOv5s 6.1).
- Шаг 4. Создай файлы cfg и wts
Примечание: Чтобы изменить размер вывода (по умолчанию: 640)
- Шаг 5. Скопируй сгенерированные файлы cfg и wts в папку DeepStream-Yolo.
- Шаг 6. Открой папку DeepStream-Yolo и скомпилируй библиотеку.
cd ~/DeepStream-Yolo
CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.1
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.0.1 / 6.0
- Шаг 7. Отредактируй файл config_infer_primary_yoloV5.txt в соответствии с твоей моделью
- Шаг 8. Отредактируй файл deepstream_app_config
- Шаг 9. Измени источник видео в файле deepstream_app_config. Здесь загружен видеофайл по умолчанию, как ты можешь видеть ниже
...
[source0]
...
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
Выполните умозаключение
Приведенный выше результат запущен на Jetson Xavier NX с FP32 и YOLOv5s 640x640. Мы видим, что FPS составляет около 30.
Калибровка INT8
Если ты хочешь использовать точность INT8 для выводов, то тебе нужно выполнить следующие шаги
- Шаг 1. Установи OpenCV
- Шаг 2. Скомпилируй/перекомпилируй библиотеку nvdsinfer_custom_impl_Yolo с поддержкой OpenCV.
cd ~/DeepStream-Yolo
CUDA_VER=11.4 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.1
CUDA_VER=10.2 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.0.1 / 6.0
-
Шаг 3. Для набора данных COCO скачай файл val2017, извлеки его и перемести в папку DeepStream-Yolo.
-
Шаг 4. Создай новую директорию для калибровочных изображений
- Шаг 5. Выполни следующие действия, чтобы выбрать 1000 случайных изображений из набора данных COCO для проведения калибровки
Примечание: NVIDIA рекомендует использовать не менее 500 изображений, чтобы получить хорошую точность. В данном примере выбрано 1000 изображений, чтобы добиться большей точности (больше изображений = больше точность). Более высокие значения INT8_CALIB_BATCH_SIZE приведут к большей точности и скорости калибровки. Установи его в соответствии с памятью твоего GPU. Ты можешь установить его в диапазоне head -1000. Например, для 2000 изображений - head -2000. Этот процесс может занять много времени.
- Шаг 6. Создай файл calibration.txt со всеми выбранными изображениями
- Шаг 7. Установи переменные окружения
- Шаг 8. Обновите файл config_infer_primary_yoloV5.txt
С сайта
На
- Шаг 9. Выполни умозаключение
Приведенный выше результат запущен на Jetson Xavier NX с INT8 и YOLOv5s 640x640. Мы видим, что FPS составляет около 60.
Результаты бенчмарка
В следующей таблице приведены данные о том, как разные модели работают на Jetson Xavier NX.
Название модели | Точность | Размер умозаключения | Время вывода (мс) | FPS |
---|---|---|---|---|
YOLOv5s | FP32 | 320x320 | 16.66 | 60 |
FP32 | 640x640 | 33.33 | 30 | |
INT8 | 640x640 | 16.66 | 60 | |
YOLOv5n | FP32 | 640x640 | 16.66 | 60 |
Дополнительные
Этот туториал написан нашими друзьями из Seeed @lakshanthad и Элейн.