Rockchip · AI & Linux Hub

KI-Inferenz

RKNN-Toolkit2 Python API V2.5.0 — Genauigkeit, Leistung, Speicher und Geräteabfragen

RKNN-Toolkit2 Python API V2.5.0 — Genauigkeit, Leistung, Speicher und Geräteabfragen | Vollständige Parameter, Beispiele und Plattformgrenzen

· ArmSoM · 7 Min. Lesezeit

Plattform und Quelle

Dieser Artikel basiert auf dem RKNN-V2.5.0-PDF des Herstellers und gilt nur für die dort genannten Chips und Schnittstellen. Bei ArmSoM-Boards zuerst SoC, NPU-Treiber, Toolkit/Runtime, SDK/BSP und Kernelversion prüfen. Eine ArmSoM-Hardwareprüfung wurde nicht durchgeführt; Beispiele und Messwerte stammen aus der Quelle, nicht aus ArmSoM-Tests.

Seriennavigation

8 Genauigkeit, Leistung und Speicher bewerten APIs

8.1 Quantisierungsgenauigkeit analysieren

Diese Schnittstelle führt die Inferenz mit dem quantisierten Modell aus und erzeugt die Ausgaben jeder Schicht zur Analyse der Quantisierungsgenauigkeit.

API accuracy_analysis
Beschreibung Mit dem quantisierten Modell eine Inferenz durchführen und einen Snapshot erzeugen, also die Tensordaten jedes Layers ausgeben. Zur Berechnung des Quantisierungsfehlers werden Snapshots beider Datentypen fp32 und quant ausgegeben.
Hinweise:
1. Die Schnittstelle darf erst nach build oder hybrid_quantization_step2 aufgerufen werden.
2. Ist target None und das ursprüngliche Modell bereits quantisiert (QAT-Modell), schlägt der Aufruf fehl.
3. Das Quantisierungsverfahren entspricht der Einstellung in config.
Parameter inputs: Liste der Bildpfade (jpg/png/bmp/npy).
Parameter output_dir: Ausgabeverzeichnis für sämtliche Snapshot-Daten. Standardwert: ‘./snapshot’.
Ohne target werden in output_dir folgende Inhalte erzeugt:
- Verzeichnis simulator: Ergebnisse jedes Layers im Simulator bei vollständiger Ausführung des quantisierten Modells (die Ausgabe wurde in float32 konvertiert).
- Verzeichnis golden: Ergebnisse jedes Layers im Simulator bei vollständiger Ausführung des Gleitkommamodells.
- error_analysis.txt: Kosinusabstand (entire_error und single_error) zwischen den Layer-Ergebnissen des quantisierten Modells im Simulator und dem Gleitkommamodell im Simulator während der vollständigen Berechnung des quantisierten Modells. entire_error/single_error unterscheiden sich darin, ob die Eingabe des jeweiligen Layers aus dem quantisierten Modell oder dem Gleitkommamodell stammt. Weitere Details stehen in error_analysis.txt.
Mit target werden zusätzliche Inhalte in output_dir erzeugt:
- Verzeichnis runtime: Ergebnisse jedes Layers bei vollständiger Ausführung des quantisierten Modells auf der NPU (die Ausgabe wurde in float32 konvertiert).
- error_analysis.txt: zusätzlich der Kosinusabstand (entire_error) zwischen den Layer-Ergebnissen im Simulator und auf der NPU während der vollständigen Berechnung des quantisierten Modells. Weitere Details stehen in error_analysis.txt.
Parameter target: Ziel-Hardwareplattform. Unterstützt werden ‘rv1103’, ‘rv1103b’, ‘rv1106’, ‘rv1106b’, ‘rv1126b’, ‘rk3562’, ‘rk3566’, ‘rk3568’, ‘rk3576’ und ‘rk3588’. Standardwert: “None”.
Bei gesetztem target werden die Ausgaben jedes NPU-Layers ermittelt und auf Genauigkeit analysiert.
Parameter device_id: Gerätekennung. Bei mehreren am PC angeschlossenen Geräten muss sie angegeben werden; der Wert wird über list_devices ermittelt. Standardwert: “None “.
Rückgabewert 0: Erfolgreich.
Rückgabewert -1: Fehlgeschlagen.

Beispielcode:

# Accuracy analysis
ret = rknn.accuracy_analysis(inputs=['./dog_224x224.jpg'])

8.2 Modellleistung bewerten

API eval_perf
Beschreibung Modellleistung bewerten.
Das Modell muss auf einem mit dem PC verbundenen RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588 laufen. Ist perf_debug bei init_runtime False, enthalten die von der Hardware ermittelten Leistungsdaten nur die Gesamtlaufzeit. Bei perf_debug = True werden zusätzlich die Laufzeiten der einzelnen Layer detailliert erfasst.
Parameter is_print: Gibt an, ob Leistungsdaten ausgegeben werden. Standardwert: True.
Parameter fix_freq: Gibt an, ob die Hardwarefrequenz festgehalten wird. Standardwert: True.
Rückgabewert perf_result: Leistungsinformationen (Zeichenfolgen).

Beispielcode:

# Evaluate model performance
perf_detail = rknn.eval_perf()

8.3 Speicherbedarf bewerten

API eval_memory
Beschreibung Speicherverbrauch bei der Modellausführung auf der Hardwareplattform ermitteln.
Das Modell muss auf einem mit dem PC verbundenen RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588 laufen.
Parameter is_print: Gibt an, ob die Speicherbewertung im Standardformat ausgegeben wird. Standardwert: True.
Rückgabewert memory_detail: Detaillierte Speicherverbrauchsdaten als Dictionary.
Beispiel:
{
‘weight_memory’: 3698688,
‘internal_memory’: 1756160,
‘other_memory’: 484352,
‘total_memory’: 5939200,
}
- ‘weight_memory’ bezeichnet den Speicherbedarf der Modellgewichte.
- ‘internal_memory’ bezeichnet den Speicherverbrauch der internen Tensoren.
- ‘other_memory’ bezeichnet den Speicherverbrauch anderer Tensoren.
- ‘total_memory’ bezeichnet den gesamten Modellspeicherbedarf, also die Summe aus Gewichten, internen Tensoren und sonstigem Speicher.

Beispielcode:

# eval memory usage
memory_detail = rknn.eval_memory()

Für das Beispiel examples/caffe/mobilenet_v2 zeigt die Quelle folgende Speicherbelegung auf RK3588. Dies sind Originalwerte, keine ArmSoM-Messungen.

======================================================
           Memory Profile Info Dump
======================================================
NPU model memory detail(bytes):
    Weight Memory: 3.53 MiB
    Internal Tensor Memory: 1.67 MiB
    Other Memory: 473.00 KiB
    Total Memory: 5.66 MiB

INFO: When evaluating memory usage, we need consider
the size of model, current model size is: 4.09 MiB
======================================================

8.4 Geräte auflisten

API list_devices
Beschreibung Angeschlossene RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588 auflisten.
Hinweis: Es gibt zwei Geräteverbindungsmodi, ADB und NTB. Bei mehreren Geräten müssen die Modi übereinstimmen.
Parameter None.
Rückgabewert Gibt die Listen adb_devices und ntb_devices zurück. Wenn keine Geräte am PC angeschlossen sind, werden zwei leere Listen zurückgegeben.

Beispielcode:

rknn.list_devices()

Beispielgeräteliste:

*************************
all device(s) with adb mode:
VD46C3KM6N
*************************

9 API zur SDK-Versionsabfrage

API get_sdk_version
Beschreibung API- und Treiberversion des verwendeten SDK abrufen.
Hinweis: Vorher müssen das Modell geladen und die Laufzeitumgebung initialisiert werden. Die API ist nur auf RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588 nutzbar.
Parameter None.
Rückgabewert sdk_version: API- und Treiberversion. Datentyp: Zeichenfolge.

Beispielcode:

# Get SDK version
sdk_version = rknn.get_sdk_version()
print(sdk_version)

Beispielausgabe der SDK-Version:

==============================================
RKNN VERSION:
    API: 1.5.2 (8babfea build@2023-08-25T02:31:12)
    DRV: rknn_server: 1.5.2 (8babfea build@2023-08-25T10:30:12)
    DRV: rknnrt: 1.5.3b13 (42cbca6f5@2023-10-27T10:13:21)
==============================================

Quelle und redaktionelle Hinweise

Technische Kapitel sind nach Anwendung aufgeteilt. Code, Bezeichner und Parameter bleiben erhalten. Chinesisch folgt der chinesischen Quelle, Englisch, Russisch und Deutsch der englischen. Für Kapitel ohne Abbildungen wurden keine erfundenen Bilder hinzugefügt.

Redaktionelle Hinweise: Protokolle mit SDK 1.5.2 bleiben historische Beispiele, keine V2.5.0-Messungen. Die Python-Zelle für Ubuntu20.04 unterscheidet sich: chinesisch 3.8/3.9, englisch 3.8/3.8; ebenso für Debian11; im ARM64-Abschnitt ist Debian weiterhin als x64 bezeichnet. Quellwerte bleiben erhalten; tatsächliches Installationspaket prüfen. V2.5.0 ergänzt C++ codegen und präzisiert Quantisierung und Speicherstrategien; alte Parameter ersetzen nicht die neue Quelle.

RKNN-Toolkit2 · ArmSoM documentation

Dieses Thema entdecken → · Lernpfade →