Der Entwickler Wjatscheslaw Serbow, der unter dem Pseudonym slvDev auftritt, demonstrierte eine vollstÀndig lokale Texterzeugung auf dem Mikrocontroller ESP32-S3. Das von ihm entwickelte Sprachmodell enthÀlt 28,9 Millionen Parameter und gibt etwa 9,9 Tokens pro Sekunde aus, ohne auf einen Server oder andere externe Rechenressourcen zuzugreifen. Die generierten Kurzgeschichten werden auf einem angeschlossenen OLED-Display ausgegeben.
Â
Projekt esp32-ai wurde auf dem Modul ESP32-S3 N16R8 mit 512 KB integrierter SRAM, 8 MB PSRAM und 16 MB Flash-Speicher getestet. Das auf vier Bits quantisierte Modell benötigt 14,9 MB. Im Repository wurden der Quellcode der Laufzeitumgebung in C, die Trainings- und Quantisierungswerkzeuge fĂŒr das Modell, die Firmware, Tests und Szenarien fĂŒr das Laden auf die Platine veröffentlicht.
Â
Die angegebenen 28,9 Millionen Parameter sollten nicht direkt mit der Anzahl der Parameter herkömmlicher Desktop-LLMs verglichen werden. Laut dem detaillierten Bericht des Entwicklers, besteht das Modell aus einem dichten Rechenkern mit etwa 559.000 Parametern, einer Ausgabeschicht mit 3,1 Millionen Parametern und einer Tabelle mit schichtbezogenen VektorreprĂ€sentationen von etwa 25 Millionen Parametern. Letztere stellt den GroĂteil der formalen GröĂe des Modells dar, wird jedoch nicht vollstĂ€ndig bei der Erzeugung jedes Tokens verarbeitet.
Â
FĂŒr die Unterbringung des Modells werden drei Speicherebenen genutzt. Die am hĂ€ufigsten verwendeten Daten befinden sich in der internen SRAM, die Ausgabeschicht, der KV-Cache und temporĂ€re Pufferspeicher in der 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 nur etwa sechs Zeilen mit einem Gesamtvolumen von ungefĂ€hr 450 Byte gelesen.
Â
Eine solche Vorrichtung basiert auf der Technologie der Per-Layer Embeddings, die von Google in Gemma 3n angewendet wurde. Laut der Google-Dokumentation, können PLE-Parameter auĂerhalb des Arbeitsspeichers des Modells gespeichert und wĂ€hrend des Ausgabeverfahrens hinzugefĂŒgt werden, wĂ€hrend einzelne Schichten verarbeitet werden. In esp32-ai wurde dieser Ansatz in die Speicherhierarchie des Mikrocontrollers ĂŒbertragen, wo die schnelle SRAM besonders begrenzt ist.
Â
Die erste korrekte Version der unter C geschriebenen Laufzeitumgebung gab nur 0,57 Token pro Sekunde aus. Nach der Platzierung der Ausgabeschicht im 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 reduziert. Die endgĂŒltig gemessene Geschwindigkeit erreichte 9,88 Token pro Sekunde unter BerĂŒcksichtigung des gesamten Generierungsprozesses. Das Hauptlimit ist jetzt die Bandbreite des PSRAM beim Lesen der Ausgabeschicht.
Â
Das Modell wurde auf einem synthetischen Datensatz trainiert TinyStories, der aus einfachen englischsprachigen Geschichten mit begrenztem Wortschatz besteht. Deshalb ist es in der Lage, SĂ€tze fortzusetzen und kleine zusammenhĂ€ngende Geschichten zu erfinden, ist jedoch nicht fĂŒr die Beantwortung von Fragen, die AusfĂŒhrung von Anweisungen, Programmierung oder das Wiedergeben von tatsĂ€chlichem Wissen gedacht. Der Entwickler betrachtet die Arbeit in erster Linie als Demonstration der effektiven Unterbringung des Modells im Speicher eines Mikrocontrollers und nicht als fertigen autonomen Chatbot.
Â
In der aktuellen Dokumentation hebt der Autor hervor, dass esp32-ai eine eigenstĂ€ndige Entwicklung ist. Projekte llama2.c von Andrei Karpathy und der frĂŒhere Start eines 260.000-Modelle auf dem ESP32-S3 werden nur als Orientierung und Beispiele fĂŒr frĂŒhere Arbeiten angefĂŒhrt: Der Code, die Kontrollpunkte und die Methodik stammen nicht direkt von ihnen. Der Quellcode von esp32-ai wird unter der MIT-Lizenz verbreitet.
Â
Quelle: linux.org.ru
