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:
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:
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:
0000:01:00.0 Processing accelerators [1200]:
Rockchip Electronics Co., Ltd Device [1d87:182a] (rev 01)Het uitvoeren van de proxy gaf ook:
List of ntb devices attached
No pcie-rkep devices foundDit 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:
rknn3-rk182x-m2_1.1.0_arm64.debSelecteer 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:
sudo dpkg -i ~/Downloads/rknn3-rk182x-m2_1.1.0_arm64.debWanneer 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:
sudo dkms status
sudo modinfo pcie-rkep
lspci -nnk -s 0000:01:00.0
ls -l /dev/pcie-rkep-*Verwachte uitvoer:
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.0Het 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:
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:
| Bestand | Doel |
|---|---|
/usr/lib/librknn3_api.so | Ingangspunt van de Runtime-API |
/usr/lib/librknn3_api_rkcp.so | Backend voor coprocessormodus |
/usr/bin/rknn3_transfer_proxy | Communicatieproxy tussen de RK3588 en de accelerator |
/usr/lib/firmware/rknn3_rk1820.img | Acceleratorfirmware die door dit pakket wordt geïnstalleerd |
/usr/bin/rknn-smi | Hulpprogramma voor status- en versie-informatie |
rknn3.service | Firmware 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:
systemctl status rknn3.service --no-pager -l
sudo rknn3_transfer_proxy devices
sudo rknn-smi info
sudo rknn-smi -vVerwachte uitvoer:
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.0Apparaatindexen, 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:
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 174e44c77230735b1458946debb62b3982c1ee58De 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:
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:
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:
No broken requirements found.
RKNN3 Toolkit Lite import OKVraag vervolgens de accelerator op via de Python-API:
sudo "$HOME/venvs/rknn3-lite/bin/python" - <<'PY'
from rknn3lite.api import RKNN3Lite
rknn = RKNN3Lite()
print(rknn.get_devices_id())
rknn.release()
PYDe geverifieerde omgeving gaf als resultaat:
[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.
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 toolkit3Voer 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:
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:
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:
cd ~/RKNN3_Project/rknn3-model-zoo/examples/yolov6/model
bash download_model.sh
ls -lh yolov6n_rknn3.onnxHet 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:
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 i8Beschrijving van de parameters:
| Parameter | Beschrijving |
|---|---|
../model/yolov6n_rknn3.onnx | ONNX-invoermodel |
rk1820 | Conversiedoel van het officiële RK182X-voorbeeld; in deze handleiding geverifieerd met een RK1828 |
i8 | Schakelt 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:
I version: rknn3-toolkit 1.1.0(cdbad21c1@2026-08-22T07:33:23)
...
I rknn building ...
...
I rknn building done.
...
--> Export rknn model
doneControleer of beide modelbestanden zijn gegenereerd:
ls -lh ../model/yolov6n_rknn3.rknn ../model/yolov6n_rknn3.weightBij 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:
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 --versionCompilerversie die voor de verificatie is gebruikt:
aarch64-linux-gnu-gcc (Linaro GCC 6.3-2017.05) 6.3.1 20170404GCC_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:
cd ~/RKNN3_Project/rknn3-model-zoo
./build-linux.sh -t rk3588 -a aarch64 -b Release -d yolov6Fragment uit het geverifieerde buildlogboek:
[ 68%] Built target rknn_yolov6_demo
...
[100%] Built target cnpy
Install the project...
-- Install configuration: "Release"De implementatiemap is:
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.txtHet 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:
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:
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 \
1De 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:
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:
mkdir -p ~/RKNN3_Project/results
scp rk3588@ip:~/RKNN3_Project/rknn_yolov6_demo/out.png \
~/RKNN3_Project/results/yolov6-out.pngOpen 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:

#5. Problemen bij de eerste uitvoering oplossen
| Symptoom | Oplossing in deze handleiding |
|---|---|
rknn-smi: command not found | Installeer het M.2-DEB-pakket uit sectie 1; kopieer niet alleen de proxytoepassing |
PCIe toont 1d87:182a, maar er is geen stuurprogramma of apparaatknooppunt | Controleer of de headers overeenkomen met de actieve kernel en bekijk daarna het DKMS-buildresultaat |
dpkg wordt voltooid, maar DKMS meldt geen installed | Bekijk /var/lib/dkms/pcie-rkep/3.3.1/build/make.log; negeer geen stuurprogrammafouten |
No pcie-rkep devices found | Controleer eerst de stuurprogrammakoppeling en het apparaatknooppunt en daarna rknn3.service |
ensurepip is not available | Installeer python3.11-venv en maak de virtuele Toolkit Lite-omgeving opnieuw |
| Het wheel wordt niet ondersteund | Selecteer cp310/x86_64 op de pc en cp311/aarch64 op de RK3588-host in deze handleiding |
No module named py_utils | Stel PYTHONPATH in vanuit de hoofdmap van Model Zoo en ga daarna naar de voorbeeldmap |
| Het pad van de kalibratiegegevensset bestaat niet | Voer de conversie uit vanuit examples/yolov6/python en controleer de map datasets/COCO van de repository |
Python kan Toolkit Lite na sudo niet vinden | Gebruik het absolute pad naar het Python-programma van de virtuele omgeving |
| Het model of de gedeelde bibliotheek wordt niet gevonden | Kopieer 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:
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:
rknn3-toolkit 2136cc54fa79ad289c43e56ed9cf7e63ef56439b
rknn3-model-zoo 174e44c77230735b1458946debb62b3982c1ee58De handleiding gebruikt consequent ~/RKNN3_Project als werkmap.
- Officiële RKNN3-repository: relaties tussen softwarecomponenten en installatiepakketten.
- Toolkit Lite op de vastgezette versie: ARM64-wheel, vereisten en Python-voorbeelden.
- Runtime op de vastgezette versie: Runtime-bibliotheken en communicatiecomponenten.
- YOLOv6-voorbeeld op de vastgezette versie: download, conversie en C++-voorbeeldbroncode.
- Seeed Armbian-uitbreidingen en pakketrepository: pakketrepository van de fabrikant voor het board in dit voorbeeld; de kernelheaders moeten overeenkomen met de actieve systeemkernel.