Der Entwickler Wjatscheslaw Serbow, der unter dem Pseudonym slvDev auftritt, eine Demonstration gezeigt bietet eine vollständig lokale Textgenerierung auf dem Mikrocontroller ESP32-S3 an. Das von ihm geschaffene Sprachmodell enthält 28,9 Millionen Parameter und erzeugt etwa 9,9 Token pro Sekunde, ohne auf einen Server oder andere externe Rechenressourcen zuzugreifen. Die generierten kurzen Geschichten werden auf ein angeschlossenes OLED-Display ausgegeben.
Projekt esp32-ai wurde auf dem ESP32-S3 N16R8-Modul getestet, das über 512 KB integrierte SRAM, 8 MB PSRAM und 16 MB Flash-Speicher verfügt. Das auf vier Bits quantisierte Modell benötigt 14,9 MB. Im Repository sind der Quellcode der Laufzeitumgebung in C, Schulungs- und Quantisierungstools, die Firmware, Tests und Szenarien für das Hochladen auf das Board veröffentlicht.
Die angegebenen 28,9 Millionen Parameter sollten nicht direkt mit der Anzahl der Parameter gängiger Desktop-LLMs verglichen werden. Laut einem ausführlichen Bericht des Entwicklersbesteht das Modell aus einem dichten Rechenkern mit etwa 559.000 Parametern, einer Ausgabeschicht mit 3,1 Millionen Parametern und einer Tabelle mit schichtweisen Vektor-Representationen mit etwa 25 Millionen Parametern. Letztere macht den Großteil der formalen Größe des Modells aus, wird jedoch nicht vollständig bei der Generierung jedes Tokens verarbeitet.
Für die Unterbringung des Modells werden drei Speicherebenen verwendet. Die am häufigsten verwendeten Daten befinden sich im internen SRAM, die Ausgabeschicht, der KV-Cache und temporäre Puffer im PSRAM, während die 25-Millionen-Tabelle im Flash-Speicher bleibt und über eine Abbildung in den Adressraum zugänglich ist. Für jedes Token werden dabei nur etwa sechs Zeilen mit einem Gesamtvolumen von etwa 450 Byte gelesen.
Ein solches Gerät basiert auf der Per-Layer Embeddings-Technologie, die Google in Gemma 3n verwendet hat. Laut der Google-Dokumentationkönnen PLE-Parameter außerhalb des Arbeitsspeichers des Modells gespeichert und während des Ausgabeverfahrens beim Verarbeiten einzelner Schichten hinzugefügt werden. In esp32-ai wurde dieser Ansatz auf die Speicherhierarchie des Mikrocontrollers übertragen, wo die schnelle SRAM besonders begrenzt ist.
Die erste korrekte Version der in C geschriebenen Laufzeitumgebung gab nur 0,57 Token pro Sekunde aus. Nach der Anordnung der Ausgabeschicht in PSRAM, dem Wechsel zu achtbitigen Aktivierungen, der Verteilung der Berechnungen zwischen zwei Xtensa LX7-Kernen und weiteren Optimierungen wurde die Verzögerung auf 94,9 ms pro Modellschritt verringert. Die letztendlich gemessene Geschwindigkeit erreichte 9,88 Token pro Sekunde unter Berücksichtigung des gesamten Generierungsprozesses. Die Hauptbeschränkung ist jetzt die Bandbreite von PSRAM beim Lesen der Ausgabeschicht.
Das Modell wurde auf einem synthetischen Datensatz trainiert TinyStories, der aus einfachen englischsprachigen Geschichten mit einem begrenzten Wortschatz besteht. Daher ist es in der Lage, Sätze fortzusetzen und kleine zusammenhängende Geschichten zu erfinden, ist jedoch nicht für das Beantworten von Fragen, das Ausführen von Anweisungen, Programmieren oder das Wiedergeben von Faktenwissen gedacht. Der Entwickler betrachtet die Arbeit in erster Linie als Demonstration einer effizienten Platzierung des Modells im Speicher eines Mikrocontrollers und nicht als fertigen eigenständigen Chatbot.
In der aktuellen Dokumentation hebt der Autor besonders hervor, dass esp32-ai eine eigenständige Entwicklung ist. Die Projekte llama2.c von Andrei Karpathy und der frühere Einsatz eines 260.000-Parameter-Modells auf ESP32-S3 werden lediglich als Richtwerte und Beispiele früherer Arbeiten angeführt: Code, Checkpoints und Methodik wurden direkt aus diesen nicht entnommen. Der Quellcode von esp32-ai wird unter der MIT-Lizenz verbreitet.
Quelle: linux.org.ru
