🛠 Exploiter le NPU 6 TOPS avec le SDK RKNN
Objetivos
Desplegar un modelo de visión en la NPU de 6 TOPS (mixta INT4/INT8/INT16/FP16) del RK3588 con el SDK RKNN de Rockchip: convertir un modelo (ONNX/TF/PyTorch) a .rknn en un PC x86_64, y luego ejecutarlo en la placa con el runtime rknn-lite. Tenga en cuenta la bifurcación entre vendor y mainline: la NPU (al igual que MPP/RGA y el blob cerrado de Mali) funciona en las imágenes vendor BSP 5.10 (Debian 11 / Ubuntu 22.04 / Orange Pi OS); bajo Armbian mainline, la NPU no es utilizable — cambie a la imagen vendor para este tutorial.
Hardware
- Orange Pi 5 Plus con imagen vendor (el wiki documenta la instalación; la NPU está listada en la página del producto)
- PC x86_64 Linux para la conversión (rknn-toolkit2: github.com/airockchip/rknn-toolkit2)
- Fuente de alimentación de 5 V / 4 A; cámara MIPI CSI o imágenes de prueba
Código completo
# --- Sur le PC x86_64 : conversion du modèle (Python 3.8-3.10 requis) ---
# git clone https://github.com/airockchip/rknn-toolkit2
# pip install rknn-toolkit2/rknn-toolkit2/packages/rknn_toolkit2-*.whl # wheel selon version
python3 convert.py # exemple : ONNX -> RKNN, quantification INT8 sur jeu d'images
# --- Sur l'Orange Pi 5 Plus (image vendor ARM64) ---
sudo apt install -y python3-pip
pip3 install rknn_toolkit_lite2/rknn_toolkit_lite2/packages/rknn_toolkit_lite2-*.whl
scp model.rknn orangepi@<ip-de-la-carte>:~/
#!/usr/bin/env python3
"""Inférence NPU avec rknn-lite2 (API du SDK airockchip/rknn-toolkit2)."""
import numpy as np
from rknnlite.api import RKNNLite
rknn = RKNNLite
assert rknn.load_rknn("model.rknn") == 0
# Utiliser les 3 cœurs NPU ; CORE_0 seul pour laisser du marge
assert rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0_1_2) == 0
input_name = rknn.get_input_name(0)[0]
img = np.zeros((224, 224, 3), dtype=np.uint8) # remplacer par la vraie image
outputs = rknn.inference(inputs=[img])
print("Sortie :", np.asarray(outputs[0]).shape)
rknn.release
Verificación esperada
La conversión en el PC produce model.rknn sin errores; en la placa, init_runtime devuelve 0 (el runtime ha abierto /dev/rga y el dispositivo NPU) e inference imprime la forma del tensor de salida. Los ejemplos del repositorio rknn-toolkit2 (p. ej., mobilenet, yolov5) muestran clases y puntuaciones; la NPU aparece en ls /dev/ | grep rknpu en las imágenes vendor.
Errores frecuentes
- Intentar usarlo bajo Armbian mainline: no hay driver de NPU ni blob; vuelva a la imagen vendor BSP 5.10 para RKNN (panfrost/codecs stateless no cubren la NPU).
- Incompatibilidad de versiones: el wheel rknn-toolkit2 (conversión en PC) y rknn_toolkit_lite2 (placa) deben corresponder a la misma versión del SDK.
- Incompatibilidad de Python: los wheels apuntan a versiones específicas (3.8–3.10 según el SDK); verifique
python3 --versionantes de pip install. - > wiki §3.22) para cargar modelos en CPU con los 4 a 32 GB de RAM.
Otros tutoriales para esta placa
- Allumer une LED via le GPIO 40 broches (libgpiod)
- Lire un bouton poussoir et afficher dans la console
- Premier script Python : fiche signalétique de la carte et LED
- Variation d'intensité d'une LED avec PWM (sysfs pwm)
- Lire un capteur I2C (BMP280) depuis le bus du connecteur
- Exploiter le double Ethernet 2,5 GbE et sécuriser le SSH
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash