Rockchip · AI & Linux Hub

KI-Inferenz

RKNN-Fehlerbehebung: Verbindung, Speicher und Berechtigungen

RKNN-Fehlerbehebung: Verbindung, Speicher und Berechtigungen

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

Plattformreferenz zur Evaluierung auf ArmSoM CM7S/Sige7S (RK3588S), Sige7/AIM7/LM7/W3 (RK3588), Sige5/CM5/AIM5 (RK3576) und entsprechenden RK3568-Plattformen. Board-Betriebssystem, NPU-Treiber, SDK, Runtime und Toolkit2 müssen zusammenpassen. Eine konkrete BSP-/Kernel-Kombination und ArmSoM-Hardware wurden hier nicht getestet. Prüfaussagen der Quelle gelten nur für deren ursprüngliche Umgebung.

Quelle ist die lokale chinesische Datei rknn_server_proxy.md; kein englisches Original und keine Abbildungen vorhanden. Englisch, Russisch und Deutsch sind vollständige Übersetzungen. Abschnitt 1 widerspricht Abschnitt 4 bei der Zuordnung von librknnrt.so. FAQ 4 verwendet /usr/bin, Abschnitt 4.3 dagegen /oem/usr/bin; tatsächlichen Installationspfad prüfen. Überschriftenebene 4.4 und fehlerhafte Codeblock-Markierung beim Dump-Reset wurden korrigiert, Befehle blieben unverändert. Runtime/adbd-Austausch, Dienststopps, Neustart und deaktivierte SELinux-Durchsetzung sind in einer isolierten Entwicklungsumgebung zu prüfen, nicht als Produktionskonfiguration zu übernehmen.

ArmSoM Docs · Rockchip source

Serie zum Board-Debugging · 3/3

RKNN-Board-Proxy: Einrichtung, Bereitstellung und mini-runtime

RKNN-Debugging: Protokolle aktivieren, prüfen und zurücksetzen

RKNN-Fehlerbehebung: Verbindung, Speicher und Berechtigungen

6. FAQ

Problem 1

Unter Debian läuft rknn_server bereits im Hintergrund, aber die Board-Inferenz meldet weiterhin:

D NPUTransfer: ERROR: socket read fd = 4, n = -1: Connection reset by peer
D NPUTransfer: Transfer client closed, fd = 4
E RKNNAPI: rknn_init,  server connect fail!  ret = -9(ERROR_PIPE)!
E build_graph: The rknn_server on the concected device is abnormal, please start the rknn_server on the device according to:
               https://github.com/airockchip/rknn-toolkit2/blob/master/doc/rknn_server_proxy.md

Lösung laut Quelle: Meist lauscht adbd in der Debian-Firmware nicht auf Port 5037. Auf dem Board prüfen:

netstat -n -t -u -a

Fehlt Port 5037, adbd mit den folgenden Befehlen herunterladen und aktualisieren, danach das Board neu starten. Andernfalls diese Schritte überspringen.

wget -O adbd.zip https://ftzr.zbox.filez.com/v2/delivery/data/7f0ac30dfa474892841fcb2cd29ad924/adbd.zip
unzip adbd.zip
adb push adbd/linux-aarch64/adbd /usr/bin/adbd

Über die Geräte-Shell das Ausführungsrecht für adbd setzen:

adb shell "chmod +x /usr/bin/adbd"
adb reboot

Nach dem Neustart rknn_server gemäß Startanleitung starten und die Board-Inferenz erneut versuchen.

Problem 2

Auf RV1103/RV1106/RV1103B tritt E RKNN: failed to allocate fd, ret: -1, errno: 12 oder OOM auf. Lösung: RkLunch-stop.sh auf dem Gerät ausführen, andere speicherbelegende Anwendungen stoppen und rknn_server auf >=2.1.0 aktualisieren. Danach die Board-Inferenz erneut versuchen.

Problem 3

Die Python-Schnittstelle init_runtime liefert auf RV1103/RV1106/RV1103B keine Laufzeiten je Schicht. Grund: Diese Plattformen unterstützen perf_debug=True nicht.

Problem 4

Auf RV1103/RV1106/RV1103B scheitert accuracy_analysis, weil das Modell für den freien Board-Speicher zu groß ist. Lösung: Den Speicher auf dem Gerät mit df -h prüfen. Beispielausgabe:

Filesystem                Size      Used Available Use% Mounted on
ubi0:rootfs              17.0M     14.1M      2.9M  83% /
devtmpfs                 27.4M         0     27.4M   0% /dev
tmpfs                    27.5M         0     27.5M   0% /dev/shm
tmpfs                    27.5M      8.0K     27.5M   0% /tmp
tmpfs                    27.5M     84.0K     27.4M   0% /run
/dev/ubi5_0              20.6M     14.5M      6.1M  70% /oem
/dev/ubi6_0              52.8M     24.5M     28.2M  46% /userdata

Im Beispiel hat /userdata/ den meisten freien Platz. Dieses Verzeichnis für Zwischenergebnisse der Genauigkeitsanalyse verwenden und rknn_server neu starten. Auf dem PC ausführen:

adb shell "killall rknn_server"
adb shell "export RKNN_DUMP_DIR=/userdata/dumps && nohup /usr/bin/rknn_server >/dev/null"&

Auf RV1103/RV1106/RV1103B werden Zwischenergebnisse standardmäßig in /tmp/dumps gespeichert. Standardpfad wiederherstellen:

adb shell "killall rknn_server"
adb shell "unset RKNN_DUMP_DIR && nohup /usr/bin/rknn_server >/dev/null"&

Reicht der Gerätespeicher nicht aus und unterstützt die RV1103/RV1106/RV1103B-Firmware NFS, das Dump-Verzeichnis vor der Genauigkeitsanalyse über NFS einhängen. Für Server-IP 192.168.1.1 und Serververzeichnis /data0/nfs_shared auf dem Gerät unter /userdata/dumps einhängen:

# 以241为例
mkdir -p /userdata/dumps
mount -t nfs -o nolock 192.168.1.1:/data0/nfs_shared /userdata/dumps

Problem 5

Eine Aktualisierung der Runtime-Bibliothek über adb bleibt wirkungslos. Lösung: rknn_server nach dem Bibliotheksupdate neu starten; die nächste Board-Inferenz verwendet dann das Update. Auf RV1103/RV1106/RV1103B muss librknnmrt.so in /oem/usr/lib liegen. Existiert eine gleichnamige Bibliothek in /usr/lib/, schreibt die Quelle vor, /usr/lib/librknnmrt.so zu entfernen und rknn_server neu zu starten.

Problem 6

Beim Start des Proxy-Dienstes unter Android treten Berechtigungsprobleme auf. Lösung laut Quelle: adb shell setenforce 0 deaktiviert die Durchsetzung von SELinux.

Dieses Thema entdecken → · Lernpfade →