CNN- en Transformer-modellen met RKNN3 uitvoeren op RK182x

Converteer, cross-compileer, implementeer en voer RKNN3-modellen uit op een RK182x M.2-accelerator die met een RK3588-host is verbonden.


CNN- en Transformer-modellen uitvoeren op een RK182x-accelerator

Deze handleiding gebruikt een Ubuntu x86_64-pc voor modelconversie en het cross-compileren van toepassingen. Daarna wordt de toepassing via SSH/SCP geïmplementeerd op een RK3588-host met Debian, waar een via PCIe aangesloten RK182x M.2-accelerator de inferentie uitvoert. De componenten werken als volgt samen:

text
Ubuntu PC: ONNX → RKNN3-Toolkit → .rknn + .weight
                                      │ SCP
                                      ▼
RK3588: C++ Demo ────────────────→ RKNN3 Runtime
        Python / Toolkit Lite ──→ RKNN3 Runtime
                                      │ Communication service + PCIe driver
                                      ▼
                                RK182x M.2 accelerator

#1. Een ontbrekend RK182x-stuurprogramma oplossen

#1.1 De probleemlaag vaststellen

Uitvoeren op de RK3588-host:

bash
uname -r
lspci -nnk
ls -l /dev/pcie-rkep-*

Vóór de installatie van het stuurprogramma gaf de PCIe-enumeratie in dit voorbeeld al het volgende resultaat. Het apparaat had echter geen vermelding Kernel driver in use en /dev/pcie-rkep-* bestond niet:

text
0000:01:00.0 Processing accelerators [1200]:
Rockchip Electronics Co., Ltd Device [1d87:182a] (rev 01)

Het uitvoeren van de proxy gaf ook:

text
List of ntb devices attached
No pcie-rkep devices found

Dit betekent dat de host het PCIe-eindpunt heeft gevonden, maar dat het stuurprogramma pcie-rkep nog moet worden geïnstalleerd en geladen. rknn-smi: command not found betekent dat het beheerhulpprogramma niet is geïnstalleerd of niet in PATH staat.

Opmerking: Als het PCIe-eindpunt zelf ontbreekt, controleer dan eerst de voeding, de M.2-verbinding en de PCIe-configuratie van de host. De resterende installatiestappen gaan ervan uit dat het eindpunt al is gevonden.

#1.2 Het M.2-pakket downloaden en installeren

Download het volgende pakket uit het officiële vooraf gebouwde RK1820/RK1828-softwarepakket:

text
rknn3-rk182x-m2_1.1.0_arm64.deb

Selecteer m2 en arm64. Gebruik niet sodimm of sodimm-net als vervanging en flash de RK3588 EVB10-boardimage uit de pakketdocumentatie niet naar de reComputer.

Upload rknn3-rk182x-m2_1.1.0_arm64.deb naar de map Downloads van het apparaat.

Uitvoeren op de RK3588-host:

bash
sudo dpkg -i ~/Downloads/rknn3-rk182x-m2_1.1.0_arm64.deb

Wanneer het installatieprogramma DKMS detecteert, hoort het Engine: DKMS te tonen, het stuurprogramma voor de actieve kernel te bouwen en installeren en laden bij het opstarten te configureren.

Dit DEB-pakket bevat de PCIe-stuurprogrammabron en DKMS-configuratie, M.2-firmware, gedeelde Runtime-bibliotheken, rknn3_transfer_proxy, rknn-smi en de RKNN3-opstartservice. U hoeft de systeem-Runtime in de volgende sectie niet opnieuw te overschrijven.

#1.3 Het stuurprogramma controleren en opnieuw opstarten

Uitvoeren op de RK3588-host:

bash
sudo dkms status
sudo modinfo pcie-rkep
lspci -nnk -s 0000:01:00.0
ls -l /dev/pcie-rkep-*

Verwachte uitvoer:

text
pcie-rkep/3.3.1, 6.1.115-vendor-seeed-rk3588, aarch64: installed

filename: /lib/modules/6.1.115-vendor-seeed-rk3588/updates/dkms/pcie-rkep.ko
vermagic: 6.1.115-vendor-seeed-rk3588 SMP mod_unload modversions aarch64

0000:01:00.0 Processing accelerators [1200]: Rockchip Electronics Co., Ltd Device [1d87:182a] (rev 01)
        Kernel driver in use: pcie-rkep

/dev/pcie-rkep-0000:01:00.0

Het PATH van een normale gebruiker bevat mogelijk niet /usr/sbin. Daarom voert deze handleiding dkms en modinfo uit met sudo. Concludeer niet alleen op basis van “command not found” onder een normale gebruiker dat de software ontbreekt.

Start het apparaat opnieuw op nadat u hebt bevestigd dat het stuurprogramma is geïnstalleerd:

bash
sudo reboot

#2. Runtime en Toolkit Lite installeren en controleren

#2.1 Runtime: geïnstalleerd door het M.2-DEB-pakket

Het M.2-pakket uit sectie 1 levert al de Runtime die deze handleiding vereist. De belangrijkste bestanden zijn:

BestandDoel
/usr/lib/librknn3_api.soIngangspunt van de Runtime-API
/usr/lib/librknn3_api_rkcp.soBackend voor coprocessormodus
/usr/bin/rknn3_transfer_proxyCommunicatieproxy tussen de RK3588 en de accelerator
/usr/lib/firmware/rknn3_rk1820.imgAcceleratorfirmware die door dit pakket wordt geïnstalleerd
/usr/bin/rknn-smiHulpprogramma voor status- en versie-informatie
rknn3.serviceFirmware laden en Runtime-service tijdens het opstarten

Het onderdeel rk1820 in het firmwarepad is de werkelijke naamgeving van het pakket. Gebruik hetzelfde M.2-pakket wanneer de accelerator een RK1828 is.

Uitvoeren op de RK3588-host:

bash
systemctl status rknn3.service --no-pager -l
sudo rknn3_transfer_proxy devices
sudo rknn-smi info
sudo rknn-smi -v

Verwachte uitvoer:

text
Active: active (running)

List of ntb devices attached
0000:01:00.0        b98e6c51    PCIE

Device: 0     Status: Online     Health: OK
Chip: RK1828  Bus-Id: 0000:01:00.0
Memory-Usage(MB): 36 / 5120

rknn-smi version              : 1.3.0
PCIe driver version           : 3.3.1
RC chips connect version      : 3.3.2
EP chips connect version      : 0.0.2
PCIe Device 0 firmware version: 1.1.0
rknn3 API version             : 1.1.0

Apparaatindexen, temperaturen en geheugengebruik variëren met de bedrijfsstatus. Elke component heeft een onafhankelijke versie, dus de versienummers hoeven niet overeen te komen. De C/C++-Runtime is nu gereed.

#2.2 De installatiebestanden van Toolkit Lite voorbereiden

Kloon de officiële repository’s op de pc en zet vervolgens alleen de Toolkit Lite-installatiebestanden over naar de RK3588-host. Dezelfde repository’s worden in de volgende sectie gebruikt om de pc-Toolkit te installeren.

Uitvoeren op de pc:

bash
sudo apt update
sudo apt install git wget cmake make gcc g++ openssh-client
mkdir -p ~/RKNN3_Project
cd ~/RKNN3_Project

git clone https://github.com/airockchip/rknn3-toolkit.git
git -C rknn3-toolkit checkout 2136cc54fa79ad289c43e56ed9cf7e63ef56439b

git clone https://github.com/airockchip/rknn3-model-zoo.git
git -C rknn3-model-zoo checkout 174e44c77230735b1458946debb62b3982c1ee58

De repository’s zijn vastgezet op de commits die voor deze handleiding zijn geverifieerd, zodat latere wijzigingen in bestandsnamen of API’s op main de reproduceerbaarheid niet beïnvloeden. Kloon ze slechts eenmaal in een nieuwe omgeving; latere secties hergebruiken beide mappen.

Uitvoeren op de pc:

bash
ssh rk3588@ip 'mkdir -p ~/RKNN3_Project/lite-packages'
cd ~/RKNN3_Project/rknn3-toolkit/rknn3-toolkit-lite/packages

scp requirements.txt \
  rknn3_toolkit_lite-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl \
  rk3588@ip:~/RKNN3_Project/lite-packages/

De RK3588-host in deze handleiding gebruikt Debian 12 met Python 3.11. Selecteer daarom het pakket cp311 en aarch64.

#2.3 Toolkit Lite installeren

Uitvoeren op de RK3588-host:

bash
sudo apt update
sudo apt install python3.11-venv

python3 -m venv ~/venvs/rknn3-lite
source ~/venvs/rknn3-lite/bin/activate

cd ~/RKNN3_Project/lite-packages
python -m pip install -r requirements.txt
python -m pip install \
  ./rknn3_toolkit_lite-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

python -m pip check
python -c "from rknn3lite.api import RKNN3Lite; print('RKNN3 Toolkit Lite import OK')"

Uitvoer van de geverifieerde omgeving:

text
No broken requirements found.
RKNN3 Toolkit Lite import OK

Vraag vervolgens de accelerator op via de Python-API:

bash
sudo "$HOME/venvs/rknn3-lite/bin/python" - <<'PY'
from rknn3lite.api import RKNN3Lite
rknn = RKNN3Lite()
print(rknn.get_devices_id())
rknn.release()
PY

De geverifieerde omgeving gaf als resultaat:

text
[b'0000:01:00.0']

De opdracht gebruikt bewust het absolute pad naar het Python-programma van de virtuele omgeving. sudo python3 schakelt doorgaans over naar de systeem-Python, die het in de virtuele omgeving geïnstalleerde Toolkit Lite-pakket niet kan vinden. Sectie 4 voert een C++-toepassing uit en vereist niet dat de Toolkit Lite-omgeving actief blijft.

#3. Toolkit configureren en YOLOv6 converteren op een Ubuntu-pc

#3.1 Een Python 3.10-omgeving maken

Uitvoeren op de pc. Gebruik Miniforge om een nieuwe geïsoleerde omgeving te maken. Op de geverifieerde pc stond Conda al onder ~/miniconda3; de conversie werd uitgevoerd in de omgeving toolkit3.

bash
mkdir -p ~/Downloads
cd ~/Downloads
wget -c https://github.com/conda-forge/miniforge/releases/download/25.3.0-1/Miniforge3-25.3.0-1-Linux-x86_64.sh
bash Miniforge3-25.3.0-1-Linux-x86_64.sh -b -p "$HOME/miniforge3"
source ~/miniforge3/etc/profile.d/conda.sh
conda create -n toolkit3 python=3.10 -y
conda activate toolkit3

Voer na het openen van een nieuwe terminal eerst source ~/miniforge3/etc/profile.d/conda.sh en conda activate toolkit3 uit. Als Conda al beschikbaar is, gebruik dan het bestaande installatiepad in plaats van nog een installatie toe te voegen.

#3.2 RKNN3-Toolkit 1.1.0 installeren

Uitvoeren op de pc:

bash
cd ~/RKNN3_Project/rknn3-toolkit/rknn3-toolkit
python -m pip install -r packages/requirements_cp310-1.1.0.txt
python -m pip install \
  packages/rknn3_toolkit-1.1.0-cp310-cp310-manylinux2014_x86_64.whl

python --version
python -m pip show rknn3-toolkit
python -m pip check
python -c "from rknn.api import RKNN; print('RKNN3 Toolkit import OK')"

Versies en uitvoer van de afhankelijkheidscontrole in de geverifieerde omgeving:

text
Python 3.10.21
Name: rknn3-toolkit
Version: 1.1.0
Summary: Rockchip Neural Network Toolkit. (commit: cdbad21c1)
No broken requirements found.

In deze vastgezette commit staat het wheel direct onder packages/, niet onder packages/x86_64/ zoals in het PDF-voorbeeld. Installeer Toolkit2 niet in deze speciale omgeving. Deze SDK gebruikt nog steeds from rknn.api import RKNN als import-ingangspunt op de pc en kan daardoor gemakkelijk met de oudere toolkit worden verward.

#3.3 Het YOLOv6n ONNX-model downloaden

Uitvoeren op de pc:

bash
cd ~/RKNN3_Project/rknn3-model-zoo/examples/yolov6/model
bash download_model.sh
ls -lh yolov6n_rknn3.onnx

Het downloadscript haalt standaard yolov6n_rknn3.onnx op, dat voor RK182X is geoptimaliseerd. De geverifieerde download was 18,644,871 bytes groot.

Dit geoptimaliseerde model neemt YOLO-decodering, filtering en sortering van kandidaatvakken, NMS en andere verwerking op in de modelberekeningsgrafiek. Deze handleiding gebruikt uitsluitend dit model en combineert het niet met het standaardmodel zonder het achtervoegsel _rknn3.

#3.4 INT8-conversie uitvoeren

Uitvoeren op de pc:

bash
conda activate toolkit3
cd ~/RKNN3_Project/rknn3-model-zoo
export PYTHONPATH="$PWD${PYTHONPATH:+:$PYTHONPATH}"

# Quantization calibration list and image directory used by the official example
ls datasets/COCO/coco_subset_20.txt
ls datasets/COCO/subset

cd examples/yolov6/python
python convert.py ../model/yolov6n_rknn3.onnx rk1820 i8

Beschrijving van de parameters:

ParameterBeschrijving
../model/yolov6n_rknn3.onnxONNX-invoermodel
rk1820Conversiedoel van het officiële RK182X-voorbeeld; in deze handleiding geverifieerd met een RK1828
i8Schakelt kwantisatie in; het hoofdscript gebruikt w8a8 en configureert geselecteerde subgrafen als w16a16

Het script configureert invoernormalisatie, uint8/NHWC-invoereigenschappen en core_num=1. Behoud de standaardconfiguratie voor de eerste controle en wijzig de ONNX-invoerindeling niet vooraf.

Fragment uit het geverifieerde conversielogboek:

text
I version: rknn3-toolkit 1.1.0(cdbad21c1@2026-08-22T07:33:23)
...
I rknn building ...
...
I rknn building done.
...
--> Export rknn model
done

Controleer of beide modelbestanden zijn gegenereerd:

bash
ls -lh ../model/yolov6n_rknn3.rknn ../model/yolov6n_rknn3.weight

Bij de geverifieerde conversie was het .rknn-bestand ongeveer 249 KB en het .weight-bestand ongeveer 5,1 MB. Beide bestanden moeten samen worden geïmplementeerd.

#4. De toepassing bouwen, via SCP implementeren en uitvoeren

#4.1 Een ARM64-cross-compiler op de pc installeren

Uitvoeren op de pc:

bash
cd ~/RKNN3_Project
wget -c https://dn.odroid.com/compiler/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar
tar -xf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar

export GCC_COMPILER="$HOME/RKNN3_Project/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu"
"${GCC_COMPILER}-gcc" --version
cmake --version

Compilerversie die voor de verificatie is gebruikt:

text
aarch64-linux-gnu-gcc (Linaro GCC 6.3-2017.05) 6.3.1 20170404

GCC_COMPILER is het compilervoorvoegsel en bevat niet de afsluitende -gcc; het buildscript voegt dit toe. De CMake-versie van Ubuntu 20.04 voldoet aan de minimumeis CMake 3.15 van dit voorbeeld.

#4.2 De YOLOv6 C++-demo bouwen

Uitvoeren op de pc:

bash
cd ~/RKNN3_Project/rknn3-model-zoo
./build-linux.sh -t rk3588 -a aarch64 -b Release -d yolov6

Fragment uit het geverifieerde buildlogboek:

text
[ 68%] Built target rknn_yolov6_demo
...
[100%] Built target cnpy
Install the project...
-- Install configuration: "Release"

De implementatiemap is:

text
install/rk3588_linux_aarch64/rknn_yolov6_demo/
├── rknn_yolov6_demo
├── dataset_eval
├── lib/
│   ├── librknn3_api.so
│   ├── librknn3_api_rkcp.so
│   ├── librga.so
│   └── libpostprocess_yolov6_rk182x.so
└── model/
    ├── yolov6n_rknn3.rknn
    ├── yolov6n_rknn3.weight
    ├── bus.jpg
    └── coco_80_labels_list.txt

Het buildscript kopieert het geconverteerde model naar de implementatiemap. De vereiste volgorde is daarom: eerst converteren, daarna bouwen en verpakken.

#4.3 De volledige implementatiemap met SCP kopiëren

Uitvoeren op de pc:

bash
ssh rk3588@ip 'mkdir -p ~/RKNN3_Project'

cd ~/RKNN3_Project/rknn3-model-zoo
scp -r install/rk3588_linux_aarch64/rknn_yolov6_demo \
  rk3588@ip:~/RKNN3_Project/

Kopieer de hele map, niet alleen het uitvoerbare bestand of het .rknn-bestand. Deze handleiding gebruikt een nieuwe implementatiemap om bestanden van andere projecten niet te overschrijven.

#4.4 Uitvoeren op de RK3588-host

Uitvoeren op de RK3588-host:

bash
cd ~/RKNN3_Project/rknn_yolov6_demo

sudo env LD_LIBRARY_PATH="$PWD/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" \
  ./rknn_yolov6_demo \
  ./model/yolov6n_rknn3.rknn \
  ./model/yolov6n_rknn3.weight \
  ./model/bus.jpg \
  1

De laatste 1 is core_mask=0x01 en komt overeen met core_num=1 van dit model. sudo env ... geeft toegang tot het apparaatknooppunt en geeft tegelijk expliciet het bibliotheekpad van de demo door. Als u vóór sudo alleen export LD_LIBRARY_PATH in de gebruikersshell uitvoert, kan de variabele worden verwijderd.

Deze opdracht gebruikt de gedeelde Runtime-bibliotheken in de implementatiemap van Model Zoo. De hostfirmware en communicatieservice worden nog steeds geleverd door het M.2-pakket uit sectie 1. Deze exacte versiecombinatie is samen geverifieerd.

Fragment uit een daadwerkelijke inferentie-uitvoering:

text
model input num: 1, output num: 1
model is NHWC input fmt
model input height=640, width=640, channel=3
...
Pre-process time: 4.08 ms
Inference time: 18.10 ms
Post-process time: 0.06 ms
Total time: 22.23 ms
--> inference model done
bus @ (97 138 553 438) 0.947
person @ (109 237 223 535) 0.936
person @ (211 240 285 511) 0.928
person @ (478 232 560 522) 0.920
person @ (79 326 118 514) 0.450
write_image path: out.png width=640 height=640 channel=3 ...

Deze waarden zijn metingen van één uitvoering en geen aanhoudende FPS-waarde of prestatiebenchmark. De uitvoering is geslaagd wanneer de toepassing normaal wordt afgesloten, aannemelijke detecties meldt en out.png maakt.

#4.5 De resultaatbeelding ophalen

Uitvoeren op de pc:

bash
mkdir -p ~/RKNN3_Project/results
scp rk3588@ip:~/RKNN3_Project/rknn_yolov6_demo/out.png \
  ~/RKNN3_Project/results/yolov6-out.png

Open het resultaat rechtstreeks op het Ubuntu-bureaublad. Als op de RK3588-host een scherm is aangesloten, kunt u de afbeelding daar bekijken zonder deze terug te kopiëren.

De volgende afbeelding werd tijdens de verificatie gegenereerd:

YOLOv6-detectieresultaat op RK3588 met RK1828

#5. Problemen bij de eerste uitvoering oplossen

SymptoomOplossing in deze handleiding
rknn-smi: command not foundInstalleer het M.2-DEB-pakket uit sectie 1; kopieer niet alleen de proxytoepassing
PCIe toont 1d87:182a, maar er is geen stuurprogramma of apparaatknooppuntControleer of de headers overeenkomen met de actieve kernel en bekijk daarna het DKMS-buildresultaat
dpkg wordt voltooid, maar DKMS meldt geen installedBekijk /var/lib/dkms/pcie-rkep/3.3.1/build/make.log; negeer geen stuurprogrammafouten
No pcie-rkep devices foundControleer eerst de stuurprogrammakoppeling en het apparaatknooppunt en daarna rknn3.service
ensurepip is not availableInstalleer python3.11-venv en maak de virtuele Toolkit Lite-omgeving opnieuw
Het wheel wordt niet ondersteundSelecteer cp310/x86_64 op de pc en cp311/aarch64 op de RK3588-host in deze handleiding
No module named py_utilsStel PYTHONPATH in vanuit de hoofdmap van Model Zoo en ga daarna naar de voorbeeldmap
Het pad van de kalibratiegegevensset bestaat nietVoer de conversie uit vanuit examples/yolov6/python en controleer de map datasets/COCO van de repository
Python kan Toolkit Lite na sudo niet vindenGebruik het absolute pad naar het Python-programma van de virtuele omgeving
Het model of de gedeelde bibliotheek wordt niet gevondenKopieer de volledige implementatiemap, voer de demo vanuit die map uit en stel het bibliotheekpad in met sudo env

Verzamel diagnostische informatie op de RK3588-host:

bash
sudo dkms status
sudo modinfo pcie-rkep
lspci -nnk -s 0000:01:00.0
ls -l /dev/pcie-rkep-*
systemctl status rknn3.service --no-pager -l
sudo journalctl -u rknn3.service -b --no-pager -n 100
sudo dmesg | grep -Ei 'pcie|rkep|rknn|firmware' | tail -n 100

#6. Versies en referenties

Voor deze geverifieerde configuratie zijn de repository’s vastgezet op de volgende commits:

text
rknn3-toolkit   2136cc54fa79ad289c43e56ed9cf7e63ef56439b
rknn3-model-zoo 174e44c77230735b1458946debb62b3982c1ee58

De handleiding gebruikt consequent ~/RKNN3_Project als werkmap.