Google Coral USB Accelerator mit dem reComputer RK3576 verwenden
Der Google Coral USB Accelerator fügt einem Host über USB einen Edge-TPU-Coprozessor hinzu. Dieses Tutorial zeigt einen getesteten Weg, ihn an einem reComputer RK3576 anzuschließen, den USB-Zustand zu prüfen, die Edge-TPU-Runtime zu installieren, ein für die Edge TPU kompiliertes TensorFlow-Lite-Modell auszuführen und einen Latenz-Benchmark zu reproduzieren.
Benchmark-Umfang: Das Ergebnis auf dieser Seite vergleicht die Coral Edge TPU mit einer Acht-Thread-CPU-TensorFlow-Lite-Baseline. Es testet nicht das integrierte NPU des RK3576. Ein Vergleich der beiden Beschleuniger erfordert dasselbe Modell und ein äquivalentes Preprocessing, das über beide Toolchains (Edge TPU und RKNN) deployed wird.
Testumgebung
| Punkt | Getestete Konfiguration |
|---|---|
| Host | reComputer RK3576 Dev Kit |
| Betriebssystem | Armbian-unofficial 26.05.0-trunk, Debian 12 (bookworm) |
| Kernel | 6.1.115-vendor-seeed-rk3576 |
| Host-Architektur | AArch64, 8 logische CPUs |
| Beschleuniger | Google Coral USB Accelerator |
| USB-Verbindung | USB 3 SuperSpeed, von lsusb -t als 5000M gemeldet |
| Edge-TPU-Runtime | Standard-Runtime (reduzierte Frequenz), libedgetpu.so.1.0 |
Dies ist die für die folgenden Messungen verwendete Konfiguration, keine Aussage über minimal unterstützte Versionen. Die Dokumentation des Coral USB Accelerator listet Debian-basiertes Armv8-Linux als unterstützt und empfiehlt USB 3 für beste Leistung.
Hardware-Anschluss
Verwenden Sie einen USB-3-Hostport und ein hochwertiges Kabel. Die folgenden Fotos zeigen den getesteten reComputer RK3576, den Coral USB Accelerator und das Kabel.

Schließen Sie den Coral an einen der USB-3-Ports des RK3576 an. Die Nahaufnahme unten zeigt die tatsächliche Testverbindung.

Coral finden und verifizieren
Führen Sie den folgenden Befehl aus, um nach einer der beiden vom Beschleuniger verwendeten USB-IDs zu suchen:
lsusb | grep -Ei '1a6e:089a|18d1:9302|Google|Global Unichip'Die IDs beschreiben zwei normale Gerätezustände:
| USB-ID | Typischer lsusb-Name | Bedeutung |
|---|---|---|
1a6e:089a | Global Unichip Corp. | Anfangszustand DFU/Bootloader |
18d1:9302 | Google Inc. | Edge-TPU-Runtime-Zustand nach dem Laden der Firmware |
Prüfen Sie die ausgehandelte USB-Geschwindigkeit:
lsusb -tBei einer USB-3-Verbindung sollte der Zweig des Beschleunigers 5000M melden. Ein Eintrag 480M deutet auf USB 2 hin.
Um aktuelle Enumerations- und Firmware-Ereignisse zu prüfen, führen Sie aus:
sudo dmesg | grep -E 'device firmware changed|New USB device found' | tail -n 10Der echte Screenshot unten zeigt den getesteten Beschleuniger im Runtime-Modus als 18d1:9302, verbunden mit 5000M, wobei die frühere DFU-Enumeration und die anschließenden Firmware-Wechsel-Meldungen in dmesg sichtbar sind.

1a6e:089a direkt nach dem Anschließen des Beschleunigers zu sehen ist normal. Das Laden des Edge-TPU-Delegates kann die Geräte-Firmware laden und bewirken, dass er sich als 18d1:9302 neu enumeriert.
Die Edge-TPU-Runtime installieren
Verwenden Sie das Linux-Repository von Coral und installieren Sie die Standard-Runtime:
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install libedgetpu1-stdWenn der Beschleuniger während der Installation bereits angeschlossen war, ziehen Sie ihn einmal ab und stecken ihn wieder ein, damit die neu installierte udev-Regel wirksam wird.
libedgetpu1-std verwendet die reduzierte Betriebsfrequenz. Coral bietet außerdem libedgetpu1-max als alternative Runtime mit maximaler Frequenz an, aber sie erhöht den Stromverbrauch und kann das Metallgehäuse sehr heiß machen. Die beiden Runtime-Pakete können nicht gleichzeitig installiert werden.
Die Python-Umgebung erstellen
Das getestete Board verwendete Python 3.11 und die TensorFlow-Lite-Python-API direkt statt PyCoral. Erstellen Sie eine isolierte Umgebung und installieren Sie die von den Beispielen verwendeten Pakete:
sudo apt-get install python3-venv
python3 -m venv /tmp/coral-venv
/tmp/coral-venv/bin/pip install --upgrade pip
/tmp/coral-venv/bin/pip install tflite-runtime opencv-python-headlessPrüfen Sie, ob Python das Edge-TPU-Delegate laden kann:
/tmp/coral-venv/bin/python -c "from tflite_runtime.interpreter import load_delegate; print(load_delegate('libedgetpu.so.1.0'))"Der Befehl sollte ein TensorFlow-Lite-Delegate-Objekt ausgeben. Beim ersten Zugriff kann er auch den Wechsel von 1a6e:089a zu 18d1:9302 auslösen.
Die Test-Assets herunterladen
Erstellen Sie ein Arbeitsverzeichnis und laden Sie Googles gepaarte Edge-TPU- und CPU-Modelle sowie das Beispielbild herunter:
mkdir -p /tmp/coral-test
cd /tmp/coral-test
curl -fL -o model.tflite \
https://raw.githubusercontent.com/google-coral/test_data/master/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite
curl -fL -o model_cpu.tflite \
https://raw.githubusercontent.com/google-coral/test_data/master/mobilenet_v2_1.0_224_inat_bird_quant.tflite
curl -fL -o labels.txt \
https://raw.githubusercontent.com/google-coral/test_data/master/inat_bird_labels.txt
curl -fL -o parrot.jpg \
https://raw.githubusercontent.com/google-coral/test_data/master/parrot.jpgparrot.jpg ist das Beispielbild aus Googles öffentlichem google-coral/test_data-Repository; es ist kein für dieses Tutorial aufgenommenes Foto. Das Edge-TPU-Modell wurde für den Beschleuniger kompiliert, während model_cpu.tflite das entsprechende TensorFlow-Lite-Gegenstück ohne Edge TPU ist.
Eine minimale Edge-TPU-Inferenz ausführen
Speichern Sie Folgendes als /tmp/coral-test/inference.py:
import cv2
from tflite_runtime.interpreter import Interpreter, load_delegate
delegate = load_delegate("libedgetpu.so.1.0")
interpreter = Interpreter(
model_path="model.tflite",
experimental_delegates=[delegate],
)
interpreter.allocate_tensors()
input_info = interpreter.get_input_details()[0]
image = cv2.cvtColor(cv2.imread("parrot.jpg"), cv2.COLOR_BGR2RGB)
height, width = input_info["shape"][1:3]
tensor = cv2.resize(image, (int(width), int(height))).astype(input_info["dtype"])
interpreter.set_tensor(input_info["index"], tensor[None, ...])
interpreter.invoke()
print("Edge TPU inference completed")Führen Sie es im Arbeitsverzeichnis aus:
cd /tmp/coral-test
/tmp/coral-venv/bin/python inference.pyOptionale Leistungsüberprüfung
Der Benchmark führt für jeden Pfad 10 Warm-up-Aufrufe gefolgt von 100 zeitgemessenen Aufrufen aus. Er misst nur Interpreter.invoke(), einschließlich der Delegate-Ausführung und der zugehörigen Host-Gerät-Kommunikation. Initialisierung von Modell/Delegate, Bildladen und Bildskalierung sind ausgeschlossen.
Der CPU-Pfad verwendet die Nicht-Edge-TPU-Version des Modells mit num_threads=8. Die Edge-TPU- und CPU-Modelle stammen aus demselben Google-Coral-MobileNet-V2-iNaturalist-Vogel-Testset und erhalten beide denselben vorverarbeiteten Eingabetensor.
Das vollständige optionale Testskript ist als benchmark.py verfügbar. Speichern oder laden Sie es nach dem Herunterladen der drei oben genannten Ressourcen unter /tmp/coral-test/benchmark.py herunter.
Führen Sie den Benchmark aus:
cd /tmp/coral-test
/tmp/coral-venv/bin/python benchmark.pyBeobachtetes Ergebnis
Ein Durchlauf auf dem getesteten RK3576 ergab:
| Pfad | Mittlere Latenz | Median-Latenz | P95-Latenz | Abgeleiteter Durchsatz |
|---|---|---|---|---|
| Coral Edge TPU | 6.202 ms | 6.193 ms | 6.344 ms | 161.23 FPS |
| CPU, 8 Threads | 20.700 ms | 20.610 ms | 21.196 ms | 48.31 FPS |
In diesem Durchlauf war die mittlere Latenz des Coral-Pfads 3.34x niedriger als die mittlere Latenz des Acht-Thread-CPU-Pfads. Die FPS-Werte sind 1000 / mittlere Latenz für wiederholte Einzelbild-Inferenz; sie sind keine Messungen einer vollständigen Kamera-, Dekodier-, Vorverarbeitungs- und Anzeige-Pipeline.

Diese Werte sind eine Messung von einem Gerät und einer Softwarekonfiguration, keine garantierte Produktspezifikation. Frequenzskalierung, thermischer Zustand, Hintergrundaktivität, Runtime-Wahl, Modellpartitionierung und USB-Topologie können das Ergebnis verändern.
Hinweis: Diese optionale Prüfung vergleicht nur den Coral Edge TPU mit dem TensorFlow-Lite-CPU-Pfad mit acht Threads. Sie vergleicht Coral nicht mit der RK3576-NPU, die in diesem Test nicht verwendet wird. Die Spitzenwerte von 4 TOPS für Coral und 6 TOPS für die RK3576-NPU beschreiben oder prognostizieren dieses Ergebnis daher nicht.
Fehlerbehebung
- Kein Coral-Eintrag in
lsusb: Gerät neu anschließen, ein nachweislich funktionierendes Kabel verwenden, einen anderen USB-Hostport probieren unddmesgprüfen. - Gerät bleibt bei
1a6e:089a: zuerst verifizieren, dasslibedgetpu.so.1.0erfolgreich lädt. Dann den Beschleuniger neu anschließen und die Firmware-Meldungen indmesgprüfen. 480Minlsusb -t: Die Verbindung hat auf USB-2-Geschwindigkeit verhandelt. Den Beschleuniger an einen USB-3-Port verschieben und das Kabel prüfen.Failed to load delegate: verifizieren, dass die Edge-TPU-Runtime installiert ist und der aktuelle Benutzer auf das USB-Gerät zugreifen kann.- Hohe Gehäusetemperatur: die Standard-Runtime
libedgetpu1-stdverwenden und für Luftzirkulation sorgen. Die Runtime mit maximaler Frequenz kann sehr heiß werden.