Rockchip · AI & Linux Hub

AI-инференс

RKNN2 V2.5.0, часть 3: Toolkit, Runtime Android/Linux и компиляторы

RKNN2 V2.5.0, часть 3: Toolkit, Runtime Android/Linux и компиляторы · RKNN2 V2.5.0

· ArmSoM Editorial · Rockchip source documentation · 9 мин чтения

Область применения: справочный материал RKNN2 V2.5.0 для RK3562, семейств RK3566/3568/3576/3588 и RV1126B. Плате ArmSoM с тем же SoC всё равно нужны соответствующие BSP, драйвер NPU и Runtime; нельзя напрямую переносить требования EVB Rockchip к питанию, USB и прошивке. Требования к ПК и драйверу приведены ниже. Проверка на оборудовании ArmSoM не проводилась.

Подготовлено по локальным китайскому и английскому оригиналам V2.5.0 с сохранением нумерации. Китайский использует китайские рисунки, остальные языки — рисунки английского источника. Восстановлены переносы PDF, продолжения таблиц и отступы кода. Примеры вывода не являются испытаниями ArmSoM.

Rockchip source

RKNN2 V2.5.0, часть 1: развёртывание, платформы и репозитории SDK

RKNN2 V2.5.0, часть 2: подключение и проверка ADB

RKNN2 V2.5.0, часть 3: Toolkit, Runtime Android/Linux и компиляторы

RKNN2 V2.5.0, часть 4: преобразование и развёртывание MobileNet

RKNN2 V2.5.0, часть 5: детекция YOLOv5 и оценка точности

RKNN2 V2.5.0, часть 6: Docker, диагностика и документация

3. Подготовка среды компьютера и платы

3.1 Установка RKNN-Toolkit2

Здесь описан только рекомендуемый путь Conda + pip. Установка с Docker приведена в главе 5.

3.1.1 Установка среды Python

Если Python 3.8 (рекомендуемая версия) не установлен или имеются несколько версий Python, рекомендуется создать новую среду Python 3.8 с помощью Miniforge Conda.

Шаг 1: установить Miniforge Conda

Проверьте установку Miniforge Conda следующей командой в терминале компьютера. Если программа уже установлена, этот этап можно пропустить.

conda -V
# Reference output: conda 23.3.1, indicating that the Miniforge Conda version is 23.3.1
# If it shows 'conda: command not found', it means Miniforge Conda is not installed.

Если Miniforge Conda не установлен, загрузите установщик: https://github.com/conda-forge/miniforge/releases/download/25.3.0-1/Miniforge3-25.3.0-1-Linux-x86_64.sh

Затем установите Miniforge Conda следующими командами:

# Copy to the user directory
cp /path/to/Miniforge3-25.3.0-1-Linux-x86_64.sh ~

# Grant executable permissions
chmod 777 Miniforge3-25.3.0-1-Linux-x86_64.sh

# Run the installation script
bash Miniforge3-25.3.0-1-Linux-x86_64.sh

Шаг 2: создание среды Python

После установки выполните в терминале компьютера следующую команду для переключения в базовую среду Conda:

source ~/miniforge3/bin/activate # The installation directory of Miniforge
# Upon success, the command prompt will change to the following form:
# (base) xxx@xxx:~$

Создайте среду Python 3.8 с именем toolkit2:

conda create -n toolkit2 python=3.8

Активируйте toolkit2. В эту среду будет установлен RKNN-Toolkit2:

conda activate toolkit2
# Upon success, the command prompt will change to the following form:
# (toolkit2) xxx@xxx:~$

Примечание: далее команды Python по умолчанию выполняются в среде toolkit2.

3.1.2 Установка RKNN-Toolkit2

После активации toolkit2 установите RKNN-Toolkit2 из источника pip либо локального wheel-пакета.

Способ 1: установка через источник pip

pip install rknn-toolkit2 -i https://pypi.org/simple

# If RKNN-Toolkit2 is already installed, you can upgrade it with the following command
pip install rknn-toolkit2 -i https://pypi.org/simple --upgrade

Способ 2: установка локального wheel-пакета

# Switch to the rknn-toolkit2 directory
cd Projects/rknn-toolkit2/rknn-toolkit2

# Please choose the appropriate requirements file based on the Python version and processor architecture:
# where cpxx is the Python version
pip install -r packages/x86_64/requirements_cpxx.txt
# pip install -r packages/arm64/arm64_requirements_cpxx.txt

# Install RKNN-Toolkit2
# Please choose the appropriate wheel package file based on the Python version and processor architecture:
# where x.x.x is the RKNN-Toolkit2 version number, cpxx is the Python version
pip install packages/x86_64/rknn_toolkit2-x.x.x-cpxx-cpxx-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# pip install packages/arm64/rknn_toolkit2-x.x.x-cpxx-cpxx-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

3.2 Проверка установки Toolkit

Не выходя из активированной среды toolkit2, выполните:

python -c "from rknn.api import RKNN; print('RKNN-Toolkit2 import OK')"

Если вывод следующий:

RKNN-Toolkit2 import OK

базовая проверка импорта Toolkit пройдена.

При сбое установки см. раздел 5.4.2 «RKNN-Toolkit2 Installation Issue» руководства RKNN2 SDK Development Guide с подробными решениями ошибок установки среды.

3.3 Установка или проверка RKNPU2 на плате

Перед запуском Demo убедитесь, что драйвер NPU, служба rknn_server и библиотека Runtime установлены корректно.

3.3.1 Проверка версии драйвера NPU

Запросить версию драйвера RKNPU2 можно следующей командой на плате:

dmesg | grep -i rknpu

На следующем рисунке показан исходный пример: версия драйвера RKNPU2 — 0.8.8.

Рисунок английского оригинала · PDF 16

Рисунок английского оригинала · PDF 16

Рисунок 3-1. Сведения о версии драйвера RKNPU2

Официальные прошивки плат Rockchip содержат драйвер RKNPU2. Если команда не возвращает версию драйвера NPU, возможно, используется сторонняя прошивка без драйвера. При наличии исходного кода прошивки задайте CONFIG_ROCKCHIP_RKNPU в конфигурации ядра значение ‘y’, затем пересоберите и прошейте драйвер ядра. Рекомендуется версия драйвера RKNPU2 >= 0.9.8.

3.3.2 Проверка rknn_server и библиотеки Runtime

Для отладки с подключённой платой RKNN-Toolkit2 нужны установленная среда RKNPU2 и работающая служба rknn_server. Если rknn_server или Runtime отсутствуют либо версии не согласованы, переустановите среду RKNPU2.

Обычно плата уже поставляется со средой RKNPU2 согласованных версий. Проверьте это командами ниже. Если среда отсутствует или версии различаются, установите/обновите её по разделу 3.3.3.

  1. Плата с Android

Проверка установки RKNPU2: возможность запуска службы rknn_server означает, что среда RKNPU2 установлена на плате.

# Switch to the board
adb shell

# Start rknn_server
su
setenforce 0
/vendor/bin/rknn_server &

Следующий вывод означает успешный запуск rknn_server и наличие установленной среды RKNPU2.

start rknn server, version: x.x.x

Проверьте согласованность версий:

# Query rknn_server version
strings /vendor/bin/rknn_server | grep -i "rknn_server version"

# Query librknnrt.so library version
# For 64-bit systems
strings /vendor/lib64/librknnrt.so | grep -i "librknnrt version"
# For 32-bit systems
strings /vendor/lib/librknnrt.so | grep -i "librknnrt version"

В следующем примере вывода версия rknn_server — x.x.x, версия librknnrt.so — x.x.x.

rknn_server version: x.x.x
librknnrt version: x.x.x
  1. Плата с Linux

Проверка установки RKNPU2: возможность запуска службы rknn_server означает, что среда RKNPU2 установлена на плате.

# Switch to the board
adb shell

# Start rknn_server
restart_rknn.sh

Следующий вывод означает успешный запуск rknn_server и наличие установленной среды RKNPU2.

start rknn server, version: x.x.x

Проверьте согласованность версий:

# Query rknn_server version
strings /usr/bin/rknn_server | grep -i "rknn_server version"

# Query librknnrt.so library version
strings /usr/lib/librknnrt.so | grep -i "librknnrt version"

В следующем примере вывода версия rknn_server — x.x.x, версия librknnrt.so — x.x.x.

rknn_server version: x.x.x
librknnrt version: x.x.x

3.3.3 Установка/обновление среды RKNPU2

Разным системам платы соответствуют разные среды RKNPU2. Ниже приведены способы установки для каждой системы.

Примечание: если среда RKNPU2 с согласованными версиями уже установлена, этот раздел можно пропустить.

  1. Плата с Android

Перейдите в каталог rknpu2, передайте на плату соответствующие rknn_server и librknnrt.so с помощью adb, затем запустите rknn_server. Пример команд:

# Switch to the rknpu2 directory
cd Projects/rknn-toolkit2/rknpu2

# Switch to root user permissions
adb root

# Remount the file system as read-write
adb remount

# Push the rknn_server executable
# Note: In a 64-bit Android system, BOARD_ARCH corresponds to the arm64 directory; in 32-bit systems, it corresponds to the arm directory.
adb push runtime/Android/rknn_server/${BOARD_ARCH}/rknn_server /vendor/bin/

# Push the librknnrt.so library
# For 64-bit systems
adb push runtime/Android/librknn_api/arm64-v8a/librknnrt.so /vendor/lib64/
# For 32-bit systems
adb push runtime/Android/librknn_api/armeabi-v7a/librknnrt.so /vendor/lib/

# Switch to the board
adb shell

# Grant executable permissions
chmod +x /vendor/bin/rknn_server

# Restart the rknn_server service
su
setenforce 0
/vendor/bin/rknn_server &
  1. Плата с Linux

Перейдите в каталог rknpu2, передайте на плату соответствующие rknn_server и librknnrt.so с помощью adb, затем запустите rknn_server. Пример команд:

# Switch to the rknpu2 directory
cd Projects/rknn-toolkit2/rknpu2

# Push rknn_server to the board
# Note: In 64-bit Linux systems, BOARD_ARCH corresponds to the aarch64 directory; in 32-bit systems, it corresponds to the armhf directory.
adb push runtime/Linux/rknn_server/${BOARD_ARCH}/usr/bin/* /usr/bin

# Push librknnrt.so
adb push runtime/Linux/librknn_api/${BOARD_ARCH}/librknnrt.so /usr/lib

# Switch to the board
adb shell

# Grant executable permissions
chmod +x /usr/bin/rknn_server
chmod +x /usr/bin/start_rknn.sh
chmod +x /usr/bin/restart_rknn.sh

# Restart the rknn_server service
restart_rknn.sh

3.4 Установка средств компиляции

3.4.1 Установка CMake

В терминале компьютера выполните следующую команду:

# Update package list
sudo apt update

# Install cmake
sudo apt install cmake

3.4.2 Установка компиляторов

3.4.2.1 Определение типа ОС и архитектуры платы

Для краткости далее сторона платы разработки называется «плата».

Шаг 1: определить тип ОС платы

В терминале компьютера выполните следующую команду:

adb shell getprop ro.build.version.release

Если результат — число (версия Android), плата работает под Android.

12

В противном случае плата работает под Linux.

/bin/sh: getprop: not_found

Шаг 2: определить архитектуру платы

Для платы под Android запросите архитектуру следующей командой на компьютере:

adb shell getprop ro.product.cpu.abi

Пример вывода команды: arm64-v8a означает 64-битную архитектуру ARM, ABI версии 8.

arm64-v8a

Для платы под Linux запросите архитектуру следующей командой на компьютере:

adb shell uname -a

Пример вывода команды: aarch64 означает 64-битную архитектуру ARM.

Linux Rockchip 5.10.160 #183 SMP Tue Oct 24 18:52:11 CST 2023 aarch64 GNU/Linux
3.4.2.2 Установка NDK для платы с Android

Применимость: платы с Android. Если плата работает под Linux, пропустите этот раздел.

Адрес загрузки NDK (рекомендуется r19c): https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip

Распаковка программного пакета

Рекомендуется распаковать пакет NDK в Projects. Расположение:

Projects
├── rknn-toolkit2
├── rknn_model_zoo
└── android-ndk-r19c # This path will be used when compiling the RKNN C Demo

Таким образом, путь к компилятору NDK — Projects/android-ndk-r19c.

3.4.2.3 Установка кросс-компилятора GCC для платы с Linux

Применимость: платы с Linux. Если плата работает под Android, пропустите этот раздел.

Адрес загрузки GCC

64-битная система платы: https://developer.arm.com/-/cdn-downloads/permalink/legacy-linaro-gnu-toolchains/6.3-2017.05/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz

32-битная система платы: https://developer.arm.com/-/cdn-downloads/permalink/legacy-linaro-gnu-toolchains/6.3-2017.05/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz

Распаковка программного пакета

Рекомендуется распаковать пакет GCC в Projects. Например, для 64-битной системы расположение следующее:

Projects
├── rknn-toolkit2
├── rknn_model_zoo
└── gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu # This path will be used when compiling the RKNN C Demo

Таким образом, путь к компилятору GCC — Projects/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu.

3.5 Предварительная проверка среды

Перед преобразованием модели рекомендуется выполнить все следующие проверки:

# Toolkit
conda activate toolkit2
python -c "from rknn.api import RKNN; print('Toolkit OK')"

# Compilation tools
cmake --version

# Devices
adb devices

Для RKNN C Demo также проверьте путь компилятора в зависимости от ОС платы:

Плата с Android: путь NDK, например Projects/android-ndk-r19c;

Плата с Linux: путь GCC, например Projects/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu.

Другие статьи по теме → · Учебные маршруты →