Rockchip · AI & Linux Hub

KI-Inferenz

RKNN2 V2.5.0, Teil 3: Toolkit, Android/Linux-Runtime und Compiler

RKNN2 V2.5.0, Teil 3: Toolkit, Android/Linux-Runtime und Compiler · RKNN2 V2.5.0

· ArmSoM Editorial · Rockchip source documentation · 9 Min. Lesezeit

Geltungsbereich: RKNN2-V2.5.0-Plattformreferenz für RK3562, die Serien RK3566/3568/3576/3588 und RV1126B. Auch ein ArmSoM-Board mit demselben SoC benötigt passende BSP-, NPU-Treiber- und Runtime-Versionen. Versorgung, USB und Firmware des Rockchip-EVB nicht ungeprüft übernehmen. Host- und Treiberanforderungen stehen im Text. Keine ArmSoM-Hardwarevalidierung durchgeführt.

Nach den lokalen chinesischen und englischen V2.5.0-Quellen mit ursprünglicher Abschnittsnummerierung. Chinesisch verwendet chinesische Abbildungen, die übrigen Sprachen die der englischen Quelle. PDF-Umbrüche, fortgesetzte Tabellen und Codeeinrückungen wurden wiederhergestellt. Beispielausgaben sind keine ArmSoM-Tests.

Rockchip source

RKNN2 V2.5.0, Teil 1: Bereitstellung, Plattformen und SDK-Repositorys

RKNN2 V2.5.0, Teil 2: Hardwareanschluss und ADB-Prüfung

RKNN2 V2.5.0, Teil 3: Toolkit, Android/Linux-Runtime und Compiler

RKNN2 V2.5.0, Teil 4: MobileNet konvertieren und bereitstellen

RKNN2 V2.5.0, Teil 5: YOLOv5-Erkennung und Genauigkeitsbewertung

RKNN2 V2.5.0, Teil 6: Docker, Startprobleme und Referenzen

3. Host- und Board-Umgebung vorbereiten

3.1 RKNN-Toolkit2 installieren

Hier wird nur der empfohlene Installationsweg Conda + pip behandelt. Die Docker-Installation steht in Kapitel 5.

3.1.1 Python-Umgebung installieren

Wenn Python 3.8 (empfohlene Version) fehlt oder mehrere Python-Versionen installiert sind, mit Miniforge Conda eine neue Python-3.8-Umgebung erstellen.

Schritt 1: Miniforge Conda installieren

Mit folgendem Befehl im Computerterminal prüfen, ob Miniforge Conda installiert ist. Bei vorhandener Installation kann dieser Schritt entfallen.

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.

Falls Miniforge Conda fehlt, den Installer hier herunterladen: https://github.com/conda-forge/miniforge/releases/download/25.3.0-1/Miniforge3-25.3.0-1-Linux-x86_64.sh

Anschließend Miniforge Conda mit folgenden Befehlen installieren:

# 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

Schritt 2: Python-Umgebung erstellen

Nach der Installation im Computerterminal mit folgendem Befehl zur Conda-Basisumgebung wechseln:

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

Eine Python-3.8-Umgebung namens toolkit2 erstellen:

conda create -n toolkit2 python=3.8

toolkit2 aktivieren. RKNN-Toolkit2 wird in dieser Umgebung installiert:

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

Hinweis: Die folgenden Python-Befehle werden standardmäßig in der Umgebung toolkit2 ausgeführt.

3.1.2 RKNN-Toolkit2 installieren

Nach Aktivierung von toolkit2 RKNN-Toolkit2 über die pip-Paketquelle oder ein lokales Wheel-Paket installieren.

Methode 1: Installation über die pip-Paketquelle

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

Methode 2: Installation eines lokalen Wheel-Pakets

# 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-Installation prüfen

Bei weiterhin aktivierter toolkit2-Umgebung ausführen:

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

Wenn folgende Ausgabe erscheint:

RKNN-Toolkit2 import OK

ist die grundlegende Toolkit-Importprüfung bestanden.

Bei Installationsfehlern Abschnitt 5.4.2 „RKNN-Toolkit2 Installation Issue“ im RKNN2 SDK Development Guide lesen; dort stehen ausführliche Lösungen für Fehler bei der Umgebungseinrichtung.

3.3 RKNPU2-Umgebung auf dem Board installieren oder prüfen

Vor dem Demo-Lauf prüfen, ob NPU-Treiber, rknn_server-Dienst und Runtime-Bibliothek korrekt installiert sind.

3.3.1 NPU-Treiberversion feststellen

Die Version des RKNPU2-Treibers kann mit folgendem Befehl auf dem Board abgefragt werden:

dmesg | grep -i rknpu

Die folgende Abbildung zeigt das Quellbeispiel mit RKNPU2-Treiberversion 0.8.8.

Abbildung der englischen Quelle · PDF 16

Abbildung der englischen Quelle · PDF 16

Abbildung 3-1. RKNPU2-Treiberversion

Offizielle Rockchip-Board-Firmwares enthalten den RKNPU2-Treiber. Liefert der Befehl keine NPU-Treiberversion, wird möglicherweise eine Drittanbieter-Firmware ohne Treiber verwendet. Bei vorhandenem Firmware-Quellcode CONFIG_ROCKCHIP_RKNPU in der Kernel-Konfiguration auf ‘y’ setzen, anschließend den Kerneltreiber neu kompilieren und flashen. Empfohlen wird RKNPU2-Treiberversion >= 0.9.8.

3.3.2 rknn_server und Runtime-Bibliothek prüfen

Das Debugging mit angeschlossenem Board in RKNN-Toolkit2 benötigt eine installierte RKNPU2-Umgebung und einen laufenden rknn_server-Dienst. Fehlen rknn_server oder Runtime, oder passen ihre Versionen nicht zusammen, die RKNPU2-Umgebung neu installieren.

Meist ist auf dem Board bereits eine RKNPU2-Umgebung mit zusammenpassenden Versionen vorhanden. Mit den folgenden Befehlen prüfen. Fehlt sie oder unterscheiden sich die Versionen, gemäß Abschnitt 3.3.3 installieren/aktualisieren.

  1. Board mit Android-System

RKNPU2-Installation prüfen: Lässt sich der rknn_server-Dienst starten, ist die RKNPU2-Umgebung auf dem Board installiert.

# Switch to the board
adb shell

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

Die folgende Ausgabe zeigt den erfolgreichen Start von rknn_server und damit die installierte RKNPU2-Umgebung an.

start rknn server, version: x.x.x

Übereinstimmung der Versionen prüfen:

# 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"

In der folgenden Ausgabe ist die Version von rknn_server x.x.x und die von librknnrt.so ebenfalls x.x.x.

rknn_server version: x.x.x
librknnrt version: x.x.x
  1. Board mit Linux-System

RKNPU2-Installation prüfen: Lässt sich der rknn_server-Dienst starten, ist die RKNPU2-Umgebung auf dem Board installiert.

# Switch to the board
adb shell

# Start rknn_server
restart_rknn.sh

Die folgende Ausgabe zeigt den erfolgreichen Start von rknn_server und damit die installierte RKNPU2-Umgebung an.

start rknn server, version: x.x.x

Übereinstimmung der Versionen prüfen:

# 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"

In der folgenden Ausgabe ist die Version von rknn_server x.x.x und die von librknnrt.so ebenfalls x.x.x.

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

3.3.3 RKNPU2-Umgebung installieren/aktualisieren

Unterschiedliche Board-Systeme benötigen unterschiedliche RKNPU2-Umgebungen. Nachfolgend werden die Installationsmethoden je System erläutert.

Hinweis: Ist bereits eine RKNPU2-Umgebung mit abgestimmten Versionen installiert, kann dieser Abschnitt entfallen.

  1. Board mit Android-System

In das Verzeichnis rknpu2 wechseln, mit adb die passenden Dateien rknn_server und librknnrt.so auf das Board übertragen und anschließend rknn_server starten. Beispielbefehle:

# 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. Board mit Linux-System

In das Verzeichnis rknpu2 wechseln, mit adb die passenden Dateien rknn_server und librknnrt.so auf das Board übertragen und anschließend rknn_server starten. Beispielbefehle:

# 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 Build-Werkzeuge installieren

3.4.1 CMake installieren

Im Computerterminal folgenden Befehl ausführen:

# Update package list
sudo apt update

# Install cmake
sudo apt install cmake

3.4.2 Compiler installieren

3.4.2.1 Systemtyp und Architektur des Boards feststellen

Im Folgenden bezeichnet „Board“ der Einfachheit halber die Entwicklungsboard-Seite.

Schritt 1: Systemtyp des Boards feststellen

Im Computerterminal folgenden Befehl ausführen:

adb shell getprop ro.build.version.release

Ist die Ausgabe eine Zahl (Android-Systemversion), läuft auf dem Board Android.

12

Andernfalls läuft auf dem Board Linux.

/bin/sh: getprop: not_found

Schritt 2: Systemarchitektur des Boards feststellen

Für ein Board mit Android die Systemarchitektur mit folgendem Befehl am Computer abfragen:

adb shell getprop ro.product.cpu.abi

Beispielausgabe des Befehls: arm64-v8a bezeichnet die ARM-64-Bit-Architektur mit ABI-Version 8.

arm64-v8a

Für ein Board mit Linux die Systemarchitektur mit folgendem Befehl am Computer abfragen:

adb shell uname -a

Beispielausgabe des Befehls: aarch64 bezeichnet die ARM-64-Bit-Architektur.

Linux Rockchip 5.10.160 #183 SMP Tue Oct 24 18:52:11 CST 2023 aarch64 GNU/Linux
3.4.2.2 NDK für das Android-Board installieren

Geltungsbereich: Boards mit Android. Bei einem Linux-Board diesen Abschnitt überspringen.

NDK-Download (r19c wird empfohlen): https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip

Softwarepaket entpacken

Das NDK-Paket vorzugsweise nach Projects entpacken. Speicherort:

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

Damit lautet der Pfad zum NDK-Compiler Projects/android-ndk-r19c.

3.4.2.3 GCC-Cross-Compiler für das Linux-Board installieren

Geltungsbereich: Boards mit Linux. Bei einem Android-Board diesen Abschnitt überspringen.

GCC-Downloadadresse

64-Bit-Board-System: 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-Bit-Board-System: 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

Softwarepaket entpacken

Das GCC-Paket vorzugsweise nach Projects entpacken. Beispiel für das Paket eines 64-Bit-Systems:

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

Damit lautet der Pfad zum GCC-Compiler Projects/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu.

3.5 Umgebung vorab prüfen

Vor der Modellkonvertierung möglichst alle folgenden Prüfungen durchführen:

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

# Compilation tools
cmake --version

# Devices
adb devices

Für die RKNN C Demo zusätzlich den Compilerpfad passend zum Board-System prüfen:

Android-Board: NDK-Pfad prüfen, etwa Projects/android-ndk-r19c;

Linux-Board: GCC-Compilerpfad prüfen, etwa Projects/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu.

Dieses Thema entdecken → · Lernpfade →