Die unmögliche Leistung: Ein 29M-LLM auf einem 8-Dollar-Chip
Der ukrainische Entwickler Slava S. hat eine außergewöhnliche Leistung vollbracht und erfolgreich ein Sprachmodell mit 28,9 Millionen Parametern auf einem 8-Dollar-ESP32-S3-Mikrocontroller zum Laufen gebracht. Dieses bahnbrechende System arbeitet komplett offline und generiert Text lokal, ganz ohne WLAN- oder Serververbindung. Dies zeigt einen bemerkenswerten Sprung bei eingebetteten KI-Fähigkeiten und macht leistungsstarke Sprachverarbeitung auf minimaler Hardware fernab von Cloud-Infrastrukturen zugänglich.
Diese Errungenschaft definiert das, was für Mikrocontroller möglich ist, drastisch neu. Zuvor lag die Obergrenze für erfolgreich auf solchen Chips eingesetzte Sprachmodelle bei etwa 260.000 Parametern. Die Innovation von Slava S. skaliert dies um eine erstaunliche 110-fache Steigerung, gestaltet die Landschaft für On-Device-KI grundlegend um und beweist, dass gravierende Größenbeschränkungen nicht immer unüberwindbar sind.
Die technischen Spezifikationen des ESP32-S3 machen diese Leistung noch bemerkenswerter. Der Chip bietet lediglich 512 Kilobyte SRAM – eine Speicherkapazität, die geringer ist als bei einem typischen Personal Computer aus den 1990er Jahren. Trotz dieser tiefgreifenden Einschränkung generiert das System Text mit respektablen neun Tokens pro Sekunde, was zeigt, wie sorgfältiges Engineering gravierende Hardwarebeschränkungen überwinden kann, um anspruchsvolle KI-Inferenz in Umgebungen mit extrem niedrigem Stromverbrauch und ohne Verbindung zu ermöglichen.
Der Speicher-Hack: Flash statt RAM
Der ukrainische Entwickler Slava S. nutzte einen cleveren Workaround, inspiriert von Googles Gemma-Modellen. Diese Technik, genannt Per-Layer-Embeddings, überdenkt die Funktionsweise von Parametern in großen Sprachmodellen. Die zentrale Erkenntnis ist, dass die meisten Parameter eines LLM in einer statischen Nachschlagetabelle liegen – einem riesigen Wörterbuch von Wortrepräsentationen –, anstatt aktiv an der Echtzeitberechnung teilzunehmen.
Diese grundlegende Unterscheidung ermöglicht eine radikale Speicherstrategie. Anstatt zu versuchen, das gesamte Modell in den winzigen 512 KB schnellen SRAM des ESP32-S3 zu quetschen, wird die massive Embedding-Tabelle mit 25 Millionen Zeilen, die etwa 15 MB wiegt, strategisch verlagert. Sie findet ihren Platz im deutlich größeren 16 MB großen, langsameren und günstigeren Flash-Speicher des Chips.
Während der Inferenz ruft das System dynamisch nur die Handvoll Embedding-Zeilen ab, die für das aktuelle Token absolut erforderlich sind. Zum Beispiel werden nur sechs Zeilen – insgesamt etwa 450 Bytes – aus dem Flash-Speicher in den SRAM geladen. Dieser geniale Ansatz lässt den begrenzten Hochgeschwindigkeits-SRAM weitgehend frei für die eigentliche Rechenarbeit des Modells: die Attention-Heads und Feed-Forward-Layer, die das nächste Token verarbeiten und generieren.
Der Realitätscheck: Das ist nicht ChatGPT
Die Leistung von Slava S. ist zwar bahnbrechend, liefert aber kein universell einsetzbares großes Sprachmodell. Dieses Modell mit 28,9 Millionen Parametern wurde ausschließlich mit dem TinyStories-Datensatz von Microsoft trainiert. Diese kuratierte Sammlung enthält einfache, kohärente Erzählungen, die speziell für kleine Modelle entwickelt wurden – selbst solche mit nur wenigen Millionen Parametern –, um kohärente Textgenerierung zu erlernen, ohne das typische Kauderwelsch zu produzieren, das man von einem Modell dieser Größe bei einem breiteren Datensatz erwarten würde.
Bei der Interaktion zeigen sich deutliche Einschränkungen. Das Modell kehrt unabhängig von der ursprünglichen Eingabe des Nutzers konsequent zu einer bestimmten Geschichte über ein kleines Mädchen zurück. Selbst Eingaben wie „eine Geschichte über einen Roboter“ oder eine thematische Eröffnungsphrase zu „Star Wars“ leiten nach wenigen Sätzen schnell zu dieser Standarderzählung über, was ein extrem begrenztes Verständnis und die Unfähigkeit zeigt, neuartige Gesprächsfäden aufrechtzuerhalten. Dieses Verhalten unterstreicht die eingeschränkten erlernten Muster des Modells.
Darüber hinaus ist keine dynamische Interaktion möglich. Eine Anpassung des Prompts erfordert ein vollständiges reflash des ESP32-S3 Mikrocontrollers, ein Vorgang, der den Speicher des Geräts überschreibt. Das System kann jeweils nur einen vordefinierten Prompt ausführen, was es zu einem faszinierenden, wenn auch begrenzten Proof of Concept macht und nicht zu einem vielseitigen, dynamischen Werkzeug für die beliebige Textgenerierung. Wer sich für den zugrunde liegenden Code und die Methodik interessiert, findet diese im GitHub-Repository des Projekts: Running a 28.9M parameter LLM on an $8 microcontroller - GitHub.
Gefällt Ihnen der Artikel? Erhalten Sie jeden Morgen einen wie diesen per E-Mail.
eine E-Mail pro Tag · Abmeldung mit zwei Klicks · kein Tracking durch Dritte
Der Karpathy-Bauplan: Wie man es baut
Dieses beeindruckende Projekt baut direkt auf Andrej Karpathys wegweisender Arbeit 'llama2.c' auf. Karpathy demonstrierte, dass eine effiziente Inferenz von Large Language Models in reinem, portablem C-Code möglich ist, ganz ohne Python oder komplexe Abhängigkeiten. Sein Bauplan bewies, dass LLMs auf minimalen Systemen laufen können – eine grundlegende Erkenntnis für diese ESP32-S3-Implementierung, die das gesamte Konzept erst ermöglichte.
Die Nachbildung dieses kostengünstigen LLM erfordert spezifische Hardware, eine nicht verhandelbare Komponente für den Erfolg. Eine ESP32-S3 N16R8-Variante ist zwingend erforderlich, da sie aufgrund ihrer großzügigen Speicherkonfiguration ausgewählt wurde. Dieses spezielle Modell verfügt über 16MB Flash und 8MB PSRAM. Die trainierte 15MB-Modelldatei benötigt zwingend diese größere Flash-Kapazität; Boards mit weniger als 16MB Flash, wie die gängigen 4MB- oder 8MB-Versionen, können das gesamte Modell schlichtweg nicht speichern.
Das ursprüngliche GitHub-Repository von Slava S. enthält den gesamten notwendigen Code für diejenigen, die die Implementierungsdetails und die zugrunde liegende Mechanik erforschen möchten. Für einen direkteren Weg zur Bereitstellung bietet der Videoersteller ein vereinfachtes one-shot script an, das die Einrichtung erheblich beschleunigt. Dieses umfassende Skript automatisiert den gesamten Build-Prozess, einschließlich der Installation der Toolchain, der Datenvorbereitung, des Modelltrainings auf dem TinyStories-Datensatz und schließlich des Flashens des ESP32-S3 mit dem kompilierten Modell.
Häufig gestellte Fragen
Wie passt ein LLM mit 28,9 Millionen Parametern auf einen Mikrocontroller mit nur 512KB SRAM?
Das Modell verwendet einen Speicher-Hack, bei dem der größte Teil – eine Embedding-Tabelle mit 25 Millionen Parametern – im größeren, langsameren 16MB-Flash-Speicher des Chips gespeichert wird. Nur der kleine Rechenanteil und die spezifischen Embedding-Zeilen, die für das aktuelle Token benötigt werden, werden in das schnelle 512KB SRAM geladen.
Welche spezifische Hardware wird benötigt, um dieses Projekt nachzubauen?
Sie benötigen eine ESP32-S3 Mikrocontroller-Variante mit mindestens 16 Megabyte Flash-Speicher und 8 Megabyte PSRAM. Dies ist allgemein als N16R8-Variante bekannt.
Was sind die Einschränkungen des LLM, das auf dem ESP32 läuft?
Es handelt sich um ein sehr einfaches Modell, das auf dem TinyStories-Datensatz trainiert wurde, daher kann es nur einfache Erzählungen generieren und keine komplexen Aufgaben ausführen. Es neigt zudem dazu, in eine Standardgeschichte zurückzufallen, und erfordert ein Reflashing des gesamten Chips, um den ursprünglichen Prompt zu ändern.
Welche Open-Source-Projekte haben dies ermöglicht?
Dieses Projekt, erstellt von dem Entwickler Slava S., baut auf dem llama2.c-Projekt von Andrej Karpathy auf, das zeigte, wie man LLM-Inferenz in einfachem C ausführt. Das Modell selbst wurde auf dem von Microsoft Research entwickelten TinyStories-Datensatz trainiert.

