Für meinen Frigate Docker Container wollte ich die AI-Objekterkennung mit Hardwarebeschleunigung betreiben. Deshalb habe ich mir einen M.2 Accelerator Coral Edge TPU Chip mit A+E Key gekauft und in meinen Homeserver eingebaut.
Mein erstes Setup: Lenovo ThinkCentre
Der Coral Edge TPU wurde in meinem Lenovo ThinkCentre sumpfgeist.lan
im freien Mini PCIe Steckplatz, der normalerweise für ein WLAN-Modul genutzt wird, problemlos erkannt und funktioniert einwandfrei. Das war ein wichtiger Erfolg, denn beim Beelink EQ14 funktioniert das gleiche Modul im WLAN-Steckplatz nicht, da dort nur ein CNVi-Interface für WLAN unterstützt wird.
Test mit M.2 Accelerator B+M Key für den EQ14
Um den EQ14 ebenfalls mit Hardwarebeschleunigung auszustatten, habe ich mir ein M.2 Accelerator Coral Edge TPU Modul mit B+M Key bestellt.
Auf dem EQ14 läuft Alpine Linux, für das es keine offiziellen Treiber gibt. Die Treiber musste ich selbst kompilieren – was ich bereits erfolgreich getan habe.
Die Installation und der Test des M.2 Accelerator B+M Key auf dem EQ14 verliefen erfolgreich. Die Treiber wurden unter Alpine Linux 3.22 mit dem aktuellen Kernel kompiliert und funktionieren einwandfrei. Während des Kompilierprozesses traten einige Fehler auf, die ich beheben konnte.
Um meine Anpassungen und Lösungswege zu dokumentieren, habe ich bereits einen Fork des Treiber-Repositories erstellt, auf den ich im letzten Abschnitt dieses Artikels genauer eingehe.
Einbau des Coral Edge TPU
Der Einbau des Coral Edge TPU war unkompliziert. Im Lenovo ThinkCentre war der PCIe-Steckplatz frei, sodass ich das Modul einfach einstecken und den Server neu starten konnte. Auch im EQ14 war der entsprechende M.2-Steckplatz frei, die Karte konnte problemlos eingelegt und sicher befestigt werden.
Treiberinstallation unter Ubuntu
Die Installation der Treiber für den Coral Edge TPU gestaltete sich etwas aufwendiger, da es beim Bau des Kernelmoduls zu Fehlern kam. Ich orientierte mich an der offiziellen Anleitung von Coral für Ubuntu, stieß dabei jedoch auf Kompatibilitätsprobleme, die ich im Folgenden beschreibe.
Vorbereitung: Prüfung vorinstallierter Treiber
Zuerst prüfte ich, ob bereits vorgefertigte Apex-Treiber vorhanden sind:
uname -r # Zeigt die Kernel-Version, z.B. 6.8.0-60-generic
lsmod | grep apex # Prüft, ob Apex-Treiber geladen sind
Bei mir waren keine Treiber vorinstalliert.
Standardinstallation schlägt fehl
Anschließend fügte ich das Coral-Paket-Repository hinzu und versuchte, die benötigten Pakete zu installieren:
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 gasket-dkms libedgetpu1-std
Dabei kam es zu einem Fehler beim Bau des gasket-dkms
-Moduls für meinen Kernel (6.8.0-60-generic), da der Quellcode des Treibers mit meinem Kernel nicht kompatibel war.
Fehleranalyse und Lösung
Das Build-Log zeigte unter anderem diese Fehlermeldung:
error: passing argument 1 of ‘class_create’ from incompatible pointer type
error: too many arguments to function ‘class_create’
Dies ist ein bekanntes Problem mit dem originalen gasket-dkms
-Treiber, da dieser für ältere Kernel geschrieben wurde.
Lösung: Einen Fork nutzen und Treiber selbst bauen
Um das Problem zu beheben, entfernte ich zunächst das inkompatible Paket:
sudo apt purge gasket-dkms
Danach klonte ich einen gepatchten Fork, der das Problem behebt:
cd ~/downloads
git clone https://github.com/KyleGospo/gasket-dkms
Die Build-Abhängigkeiten müssen ebenfalls installiert sein:
sudo apt install dkms libfuse2 dh-dkms devscripts debhelper
Dann baute ich das Paket mit debuild
:
cd gasket-dkms
debuild -us -uc -tc -b
Da bei mir debhelper
nicht installiert war, trat ein Fehler auf, den ich durch Installation von debhelper
behoben habe.
Nach erfolgreichem Build wurde das .deb
-Paket installiert:
cd ..
sudo dpkg -i gasket-dkms_*.deb
Ich musste bei mir sudo dpkg -i gasket-dkms_1.0-18_all.deb
eingeben.
Rechte und Neustart
Da ich die Hardware ausschließlich in Docker-Containern nutze und mein Benutzer in der Gruppe docker
ist, setzte ich passende Zugriffsrechte mit einer udev
-Regel:
sudo sh -c "echo 'SUBSYSTEM==\"apex\", MODE=\"0660\", GROUP=\"docker\"' > /etc/udev/rules.d/65-apex.rules"
Anschließend startete ich das System neu:
sudo reboot
Überprüfung
Nach dem Neustart prüfte ich, ob das Gerät erkannt wird:
ls -alh /dev/apex*
Ausgabe:
crw-rw---- 120,0 root docker 10 Jun 11:12 /dev/apex_0
Damit war die Treiberinstallation erfolgreich abgeschlossen und die Hardware bereit für den Einsatz in Docker-Containern wie Frigate.
Docker Compose: Coral Edge TPU im Frigate Container nutzen
Um die Coral Edge TPU im Frigate Docker Container zu verwenden, müssen wir die Hardware dem Container zugänglich machen und die Konfiguration anpassen. Hier geht es zu meinem Frigate Blogartikel.
Geräteweitergabe an den Container
In der docker-compose.yaml
Datei von Frigate (z. B. unter ~/docker-compose/frigate/
) fügen wir den folgenden Abschnitt unter services.frigate
hinzu:
devices:
- /dev/apex_0:/dev/apex_0
Damit wird das Gerät /dev/apex_0
vom Hostsystem an den Container durchgereicht.
Frigate Konfiguration anpassen
In der Frigate Konfigurationsdatei config.yml
(zum Beispiel unter ~/docker/frigate/
) muss die Detektor-Einstellung für die TPU hinzugefügt oder angepasst werden:
detectors:
coral1:
type: edgetpu
device: pci:0
Diese Einstellung teilt Frigate mit, dass der Edge TPU Detektor verwendet werden soll, der über das PCIe-Gerät pci:0
angesprochen wird.
Container neu starten
Nach diesen Änderungen kann der Frigate Container neu gestartet werden:
cd ~/docker-compose/frigate
docker compose down
docker compose up -d
Frigate nutzt nun die Hardwarebeschleunigung des Coral Edge TPU für die KI-Objekterkennung. Weitere Details zur Konfiguration von Frigate findest du hier.
Treiber unter Alpine Linux
Für Alpine Linux gibt es ein spezielles Repository mit einem Bugfix, der es ermöglicht, die Coral Edge TPU Treiber für meine verwendete Alpine Version und den aktuellen Kernel zu kompilieren.
Ich habe das Repository hier geclont und für meine Kernel-Version angepasst. Die genaue Anleitung zur Installation findest du ebenfalls dort.
Um den Coral Chip im EQ14 nutzen zu können, habe ich zudem ein anderes Modell der TPU auf einer SOM-Platine (System-On-Module) gekauft, das für den M.2-2280-B-M-S3 (B/M Key) Slot geeignet ist. Mit den selbst kompilierten Treibern wurde das Gerät anschließend vom System erkannt.
Überprüfung der Hardware
Du kannst prüfen, ob die Edge TPU erkannt wurde, indem du folgenden Befehl ausführst:
ls -alh /dev/apex*
Das Ergebnis sieht bei mir so aus:
crw-rw---- 120,0 root 28 Jun 20:46 /dev/apex_0
Umzug auf den EQ14 und Leistung
Ich habe die Frigate Installation vom ThinkCentre (sumpfgeist.lan
) auf den EQ14 (eq14.lan
) umgezogen. Dort wird der Coral Chip erkannt und die KI-Objekterkennung läuft mit einer Latenz von durchschnittlich ca. 8 ms pro Frame. Die Temperatur des Chips liegt bei etwa 45°C und ist somit im sicheren Bereich.
Kernel-Update und erneutes Kompilieren
Zwischenzeitlich habe ich Alpine Linux auf dem EQ14 mit einem neuen Kernel aktualisiert. Vor dem Neustart habe ich die Treiber neu kompiliert, um die Kompatibilität sicherzustellen.
Nach dem Systemstart wurden die aktuellen Treiberdateien kopiert und aktiviert, sodass der Coral Chip weiterhin korrekt erkannt wird und Frigate problemlos läuft.
Mein Repository wurde mittlerweile aktualisiert und berücksichtigt nun auch den neuesten Kernel von Alpine Linux 3.22. Du kannst jederzeit meiner Schritt-für-Schritt-Anleitung auf GitHub folgen, um die Treiber erfolgreich zu installieren und zu kompilieren.
Fazit
Die Kombination aus Frigate, Coral Edge TPU und EQ14 bildet mittlerweile das Herzstück meiner Videoüberwachung. Dank der hohen Erkennungsgenauigkeit und der stabilen Performance habe ich jetzt eine Lösung, die zuverlässig und zukunftssicher ist.
Als Nächstes möchte ich die Erkennung noch feiner abstimmen, weitere Automatisierungen über Home Assistant integrieren und so mein System Schritt für Schritt noch smarter machen.
Hardware-Empfehlungen
- EQ14 Mini-PC auf Amazon - kompakter und stromsparender Rechner für Frigate
- Coral Edge TPU auf Amazon US - KI-Beschleuniger für schnelle und präzise Objekterkennung
- Coral Dual Edge TPU auf Amazon - leistungsstarker KI-Beschleuniger (passt nicht in EQ14)
Da es sich teilweise um Affiliate-Links handelt, hier der Hinweis: Als Amazon-Partner verdiene ich an qualifizierten Verkäufen.
Verwendete Tools: