Das relativ preisgünstige Raspberry Pi AI Kit zeichnet sich durch einen geringen Stromverbrauch aus und beschleunigt KI-Anwendungen auf dem RasPi 5.
Das AI-Kit für den Raspberry Pi besteht aus zwei Komponenten: Über die Aufsteckplatine M.2 HAT+ lassen sich beliebige M.2-Module, beispielsweise für NVMe-Storage, an den RasPi 5 und damit direkt an den PCI-Bus anschließen. Darauf steckt ein Hailo-8L Entry-Level AI Accelerator, der sich auch in einem anderen Computer mit M.2-Schnittstelle installieren ließe. Diese Einsteigervariante leistet mit 13 TOPS halb so viele Teraoperationen pro Sekunde wie das Standardmodell Hailo-8.
Bevor Sie mit dem Testen der Software beginnen können, müssen Sie das System zusammenbauen [1]. Im ersten Arbeitsschritt montieren Sie dazu vier Abstandhalter, einen GPIO-Verlängerungsstecker und ein PCIe-Verlängerungskabel auf dem RasPi. Danach stecken Sie den M.2 HAT+ auf die Abstandhalter und das Flachbandkabel in den Anschluss auf dem HAT. Abbildung 1 zeigt das zusammengebaute System im Betrieb.
Nach einem Neustart des Raspberry Pi erscheint das Hailo-Board in der Ausgabe von Lspci so, wie in Listing 1 gezeigt. Die zweite Zeile verrät, dass die Installation des AI Accelerators erfolgreich war.
Listing 1
Lspci-Ausgabe
0000:00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2712 PCIe Bridge (rev 21) 0000:01:00.0 Co-processor: Hailo Technologies Ltd. Hailo-8 AI Processor (rev 01) 0001:00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2712 PCIe Bridge (rev 21) 0001:01:00.0 Ethernet controller: Raspberry**Pi Ltd RP1 PCIe 2.0 South Bridge
Was das Board kann
Bei den AI-Accelerator-Modulen von Hailo handelt es sich nicht um generische Beschleuniger für neuronale Netze, mit denen man das Training verkürzen könnte. Sie erhöhen lediglich die Geschwindigkeit im Betrieb, also beim Schlussfolgern und der Inferenz. Zudem gestaltet sich die Ansprache des Beschleunigers nicht ganz einfach.
Viele Machine-Learning-Anwendungen verwenden PyTorch oder Tensorflow, meist sind auch vortrainierte Modelle auf eines der zwei Frameworks zugeschnitten. Will man eines der beiden mit einem Hardwarebeschleuniger verwenden, bieten sie dafür einfache Aufrufe, um das neuronale Netz in die Grafikkarte zu laden. Im Fall von Nvidia-Hardware geschieht dies über die CUDA-Schnittstelle. Danach werden die Eingangsdaten ebenfalls dorthin geschoben und die Antwort ausgelesen.
Wer nun ein Hailo-Board benutzen möchte, braucht das neuronale Netzwerk in einer speziell übersetzten und angepassten Version. Auf der Webseite von Hailo [2] finden sich unter dem Punkt Products | Software sowohl bereits übersetzte Netze (Model Zoo) als auch der Dataflow Compiler, der aus den gängigen Formaten in das nötige HEF-Format übersetzen kann.
Übersetzen bedeutet dabei aber kein einfaches Kompilieren; der Entwickler muss verstehen, wie er sein neuronales Netz in das gewünschte Format zu überführen hat. Die Hailo-Boards können beispielsweise nur mit ganzzahligen Werten umgehen, sodass man das Netz gegebenenfalls anpassen muss. Auf der Webseite von Hailo gibt es dafür ausführliche Anleitungen und Tutorials. Außerdem spielt das Ziel-Board bei der Übersetzung eine Rolle. Eine HEF-Datei für den Hailo-8 lässt sich nicht in den Hailo-8L laden und umgekehrt.
Die Hauptanwendung der AI-Beschleuniger von Hailo ist die Bilderkennung. Die Boards leisten dabei laut Hersteller-Webseite deutlich mehr Frames pro Sekunde in der Verarbeitung als ein Jetson Nano und verbrauchen dabei zudem deutlich weniger Strom. Für Anwendungen wie Sprachmodelle (LLMs) bringen die 8er-Boards jedoch nicht genügend Leistung mit. Allerdings hat Hailo bereits das Hailo-10H Generative AI Acceleration Modul angekündigt, das sich für LLMs eignen soll. Ein Raspberry Pi als Chatbot wäre eine interessante Alternative, vor allem wegen des vergleichsweise geringen Stromverbrauchs.
Installation der Software
Für die Installation der Software stehen Ihnen zwei Möglichkeiten offen. Die einfache Methode, bei Verwendung von Raspberry Pi OS, besteht in der Installation des Pakets hailo-all mittels Apt.
Das Meta-Paket aus dem Pi-OS-Standard-Repository installiert seinerseits die Pakete hailo-tappas-core-3.28.2, hailofw, hailort und rpicam-apps-hailo-postprocess. Dabei kommt (Stand August 2024) die Version 4.17 der Software zum Zug. Bei diesem Release fehlen allerdings die Python-Module zur direkten Nutzung des Hailo-Boards aus Python heraus. Die Codebeispiele des Herstellers verwenden stattdessen Gstreamer-Pipelines. Die notwendigen Plugins finden sich im Paket hailort.
Um nach dem Reboot zu überprüfen, ob alles funktioniert hat, setzen Sie das Kommando aus der ersten Zeile von Listing 2 ab. Sieht die Ausgabe so aus wie in den folgenden Zeilen, ist alles in Ordnung. Mithilfe des Befehls hailortcli lassen sich auch weitere Details über das Board herausfinden. Das Unterkommando monitor zeigt beispielsweise laufend in Top-Manier, was das Hailo-Board treibt, welche Netze darauf laufen und wie hoch der Datendurchsatz ist.
Listing 2
Funktionskontrolle
$ hailortcli fw-control identify
Executing on device: 0000:01:00.0
Identifying board
Control Protocol Version: 2
Firmware Version: 4.17.0 (release,app,extended context switch buffer)
Logger Version: 0
Board Name: Hailo-8
Device Architecture: HAILO8L
Serial Number: HLDDLBB241901708
Part Number: HM21LB1C2LAE
Product Name: HAILO-8L AI ACC M.2 B+M KEY MODULE EXT TMP
Die zweite Methode, die benötigte Software zu installieren, bedingt etwas mehr Aufwand. In der Developer Zone [3] von Hailo gibt es die Software in Form von Debian-Paketen sowie Python-Wheel-Paketen. Haben Sie zuvor bereits Version 4.17 aus den anderen Paketen installiert, müssen Sie sie jetzt erst vollständig entfernen, da sonst unterschiedliche Versionen des Kernel-Moduls und der Firmware installiert würden, die sich dann ins Gehege kämen. Dazu sei angemerkt, dass laut Erfahrungen des Autors und einiger Nutzer in der Hailo-Community der im nächsten Abschnitt beschriebene Beispielcode dann nicht mehr funktioniert.
Die Beispiele
Mittels git clone laden Sie das Repository mit dem Beispielcode [4] für die RasPi-Hailo-Kombination herunter. Das im Repository enthaltene Skript download_resources.sh zieht die benötigten Modelle im .hef-Format nach. Das Skript setup_env.sh baut eine Umgebung inklusive Python Virtual Environment auf, in die sich dann die notwendigen Python-Module installieren lassen.
Im Ordner basic_pipelines/ befinden sich drei Skripte, mit denen das Hailo-Board zeigen kann, wozu es imstande ist. Dabei dient detection.py zur klassischen Objekterkennung für einzelne Bilder oder Videos, instance_segmentation.py lässt sich zur Trennung mehrerer Objekte in einem Bild verwenden. Zu guter Letzt extrahiert pose_estimation.py aus einem Video-Stream ein “Strichmännchen” beziehungsweise die 3D-Koordinaten mehrerer Punkte einer Person wie Handgelenke, Knie, Füße, Augen und Nase. Als Eingabe kann dabei jeweils eine USB-Kamera, eine Pi-Cam oder eine Datei dienen.
Alle drei Skripte bauen eine Gstreamer-Pipeline auf. Sie wird von Python aus aufgerufen und steuert die Hailo-Hardware an. Dabei wird eine Python-Funktion im aufrufenden Skript als Callback angegeben. Ihr übergibt man die vom Netz ermittelten Daten (etwa den Objektnamen oder die 3D-Koordinaten), damit der Programmcode damit etwas anfangen kann.
Die Skripte setzen an das Ende der Pipeline jeweils eine grafische Ausgabe. Das setzt allerdings voraus, dass der Raspberry Pi mit grafischer Benutzeroberfläche läuft und entweder einen Monitor ansteuert oder per X-Forwarding die Ausgabe umleitet. Die Ausgabe markiert Objekte, die das Netz erkannt hat (Abbildung 2).
Der Autor änderte dazu den Code so, dass das Skript eine Videodatei erzeugt (Listing 3). Das geht sicherlich auch eleganter, genügte aber für die Tests im Rahmen dieses Artikels. Mit einem Modul, das Daten aufnimmt, ohne sie zu verarbeiten (Nullsink), wäre es auch möglich, nur den Callback arbeiten zu lassen, zum Beispiel um Code zu schreiben, der eine Aktion auslöst, sobald etwas Bestimmtes erkannt wird. Diese Art der Programmierung ist zwar etwas umständlich, führt aber zum Ziel.
Listing 3
Codeänderung
### Originalcode, auskommentiert
# pipeline_string += f"fpsdisplaysink video-sink={self.video_sink} \
# name=hailo_display sync={self.sync} text-overlay=\ {self.options_menu.show_fps} signal-fps-measurements=true "
### Ersatzcode für Video
pipeline_string += "matroskamux ! filesink name=hailo.display location=video.mkv"
Beispiele für die normale Art der Programmierung finden sich auf der Github-Seite von Hailo [5]. Dieser Code läuft mit Versionen ab 4.18. Allerdings laden die dort mitgelieferten Download-Skripte die notwendigen HEF-Dateien im Format für das Hailo-8 herunter, nicht für das Hailo-8L. Zudem fehlt hier eine Anleitung, welches Modell aus dem ebenfalls bei Github verfügbaren Model Zoo das richtige für das jeweilige Beispielskript ist.
Fazit
Das Raspberry Pi AI Kit ist relativ preisgünstig und zeichnet sich durch seinen im Verhältnis zu einer Grafikkarte sehr geringen Stromverbrauch aus. Die Boards sind nur zur Inferenz gedacht, helfen während der ML-Entwicklung also nicht beim Training der Netze. Das schränkt ihre Einsatzmöglichkeiten ein. Obendrein ist selbst ein fertig trainiertes neuronales Netz auf dem Board nicht gerade einfach zum Laufen zu bekommen.
Für den Anwendungsfall Bilderkennung eignet sich das Raspberry Pi AI Kit allerdings durch die Kombination aus Leistungsfähigkeit und geringem Stromverbrauch sehr gut und ergänzt den Raspberry Pi perfekt.
Eine interessante Ankündigung auf der Webseite von Hailo ist das Hailo-10H-Board, das sich laut Herstellerangabe für den Betrieb von Large Language Models im Stil von ChatGPT (freilich nur dessen kleinere Geschwister) eignet. Bewahrheitet sich das, könnte man auf einem Raspberry Pi ein LLM betreiben, was gerade aufgrund des minimalen Stromverbrauchs eine sehr interessante Variante wäre. (jcb/jlu)
Der Autor
Konstantin Agouros arbeitet als Head of Engineering & Security Solutions bei der matrix technology GmbH. Er berät dort mit seinem Team Kunden zu Themen rund um Open Source, Sicherheit und die Cloud. Sein Buch “Software Defined Networking: Praxis mit Controllern und OpenFlow” ist bei de Gruyter erschienen.
Infos
-
Dokumentation zum Raspberry Pi AI Kit: https://www.raspberrypi.com/documentation/accessories/ai-kit.html
-
Webseite von Hailo: https://hailo.ai
-
Direkte Software-Downloads von Hailo: https://hailo.ai/developer-zone/software-downloads
-
Repository für die RasPi-Beispiele von Hailo: https://github.com/hailo-ai/hailo-rpi5-examples
-
Allgemeine Beispiele für die Hailo-Boards: https://github.com/hailo-ai/Hailo-Application-Code-Examples







