Ein 10-Dollar-Chip lässt ein KI-Modell mit 45 Millionen Parametern laufen (Needle 2)

BBetter Stack
컴퓨터/소프트웨어가전제품/카메라

스크립트

00:00:00Das ist Needle 2. Ein 14 Megabyte großes Argentic LLM-Modell. Ich wiederhole das kurz, falls du es verpasst hast.
00:00:07Es ist 14 Megabyte groß und hat 45 Millionen Parameter. Im Grunde ist dieses LLM so winzig, dass es tatsächlich laufen kann.
00:00:14auf jedem Edge-Gerät bis hin zu einem einfachen ESP32 S3. Es wurde von Cactus Compute entwickelt, die das Modell
00:00:21mittlerweile unter der Apache 2.0-Lizenz als Open Source veröffentlicht haben, und ich habe es selbst getestet, und es
00:00:28funktioniert tatsächlich. In diesem Video schauen wir uns Needle 2 also genauer an, sehen uns an, wie es funktioniert, und
00:00:34führen dann ein paar spaßige Inferenz-Tests auf einem echten Mikrocontroller durch, um zu sehen, wie es sich schlägt. Es wird
00:00:40eine Menge Spaß machen, also stürzen wir uns direkt rein. Vor ein paar Wochen habe ich ein anderes Video gemacht, in dem
00:00:49ich ein Modell mit 29 Millionen Parametern auf einem ESP32 S3 bereitgestellt habe, aber das war eher eine Spielerei und kein
00:00:56echtes LLM, weil es so extrem abgespeckt war und mit Kindergeschichten trainiert wurde – das war also alles, was es
00:01:03jemals ausgeben konnte. Dieses LLM ist jedoch ein echtes Modell, das deinen Kontext versteht. Aber bevor du
00:01:10zu begeistert wirst, gibt es einen Haken. Das wird kein gewöhnliches Chatbot-LLM sein. Stattdessen
00:01:16wurde dieses Modell speziell dafür entwickelt, als Tool-Call-Dispatcher zu arbeiten. Das Ganze funktioniert so, dass du
00:01:22eine Reihe von Tool-Aufrufen vordefinierst, und das kann alles sein, von der Drehung eines Servomotors bis hin zu jeder anderen mechanischen
00:01:29oder ausführbaren Operation, die du dir vorstellen kannst. Anschließend kannst du das Modell in natürlicher Sprache prompten
00:01:35und es ist schlau genug, basierend auf deinem Befehl zu verstehen, welcher Tool-Aufruf ausgeführt werden muss. Und das ist
00:01:40im Grunde auch schon der Kern der Sache. Das ist wirklich cool, denn auf einem Board wie dem Raspberry Pi 5 kann es
00:01:47bis zu 500 Token pro Sekunde erreichen und somit ein sehr effizienter Treiber für beispielsweise Robotikprojekte sein. Aber kann Needle 2 auf größeren, leistungsstärkeren Geräten tatsächlich als Chatbot fungieren?
00:01:55Nun, die Antwort lautet nein, denn das ist eigentlich keine Geschwindigkeitsfrage, da Needle überhaupt nicht auf Allgemeinwissen oder Konversation trainiert wurde. Seine gesamten Trainingsdaten bestehen aus
00:02:04Geräteaktionen wie Smart-Home-Befehlen, mobilen Aktionen, Wearable-Aktionen und dergleichen. Wenn du es also
00:02:10selbst auf einem starken Gerät fragst, was die Hauptstadt von Frankreich ist, wird es nicht antworten können. Es ist
00:02:17wirklich gut darin, die richtige Funktion auszuwählen und die passenden Argumente einzutragen, aber das war es auch schon. Und das ist der
00:02:23Kompromiss, den sie eingehen mussten, um es so klein zu machen. Aber sprechen wir doch mal darüber, wie sie es geschafft haben
00:02:2845 Millionen Parameter zu nutzen, die tatsächlich mit fünf- bis siebenmal größeren Modellen konkurrieren können.
00:02:33Denn normalerweise wird ein Modell einfach dumm, wenn man es so stark verkleinert. Aber Cactus wollte das nicht, also haben sie einige Teile der Architektur von Grund auf neu aufgebaut.
00:02:40Die große Änderung ist etwas, das sie als Engramm bezeichnen.
00:02:47Normalerweise liegt das gesamte Wissen eines Modells in seinen Gewichten, und jedes einzelne dieser Gewichte muss für jeden Token
00:02:53durch eine Matrixmultiplikation gejagt werden, was rechenintensiv ist. Cactus hat jedoch einen Teil dieses Wissens
00:02:59stattdessen in Hash-Nachschlagetabellen verlagert. So kann das Modell einfach eine Speicherzeile abrufen, anstatt
00:03:06dringend Berechnungen dafür durchzuführen. Außerdem haben sie die normalen MLP-Schichten durch etwas ersetzt, das auf einer Hadamard-Transformation basiert,
00:03:12einer festen mathematischen Operation ohne nennenswerte lernbare Parameter. Normalerweise wird dieser
00:03:19Mischungsschritt von riesigen Matrizen durchgeführt, die das Modell von Grund auf lernen muss. Das verbraucht den Großteil
00:03:25des begrenzten Parameterbudgets des kleinen Modells. Eine Hadamard-Transformation überspringt diesen ganzen Lernprozess jedoch, da es sich um eine
00:03:32feste Formel handelt, die das gesamte Mischen kostenlos übernimmt. Cactus profitiert also davon, ohne einen einzigen
00:03:38ihrer 45 Millionen Parameter dafür opfern zu müssen. Hinzu kommt die Quantisierung, die ehrlicherweise der Teil ist, der
00:03:44das Ganze überhaupt erst einsetzbar macht. Needle 2 läuft mit zwei Bits pro Gewicht und wurde tatsächlich auch mit zwei
00:03:50Bits trainiert – und wurde nicht erst nachträglich herunterquantiert. Das Problem ist nämlich, dass viele kleine Modelle auseinanderfallen, wenn man
00:03:57sie nachträglich komprimiert, weil sie nie dafür gebaut wurden, eine solche Komprimierung zu überstehen. Aber Needle wurde
00:04:03von Anfang an gegen die eigene Komprimierung trainiert, weshalb ihre Standardversion bereits optimiert ist. Hält das Ganze also überhaupt stand?
00:04:09Nun, in den eigenen Benchmarks von Cactus nimmt es Needle 2 durchaus mit einem Modell auf, das
00:04:16fünfmal so groß ist. Und bei einigen der schwierigeren Tool-Calling-Tests schlägt es diese sogar direkt,
00:04:23obwohl es mit einer 2-Bit-Präzision im Vergleich zu den vollen 16-Bit von LFM 2.5 läuft. Beim Benchmark für mobile Aktionen
00:04:30wählt Needle in 98,3 % der Fälle den korrekten Funktionsnamen aus, und das ist höher als bei jedem einzelnen
00:04:38Modell, mit dem es verglichen wird. Es ist also nicht in allen Bereichen perfekt, aber in dem Job, für den es entwickelt wurde,
00:04:45ist es wirklich verdammt gut. Testen wir es also einfach mal, um zu sehen, wie es sich in der Praxis schlägt. Dafür habe ich
00:04:51meine eigene benutzerdefinierte Inferenz-Engine gebaut, die tatsächlich auf genau diesem Board läuft, einem ESP32-S3. Ich verlinke das
00:04:57GitHub-Repository unten in der Videobeschreibung, falls du es selbst ausprobieren möchtest. Hier im Terminal
00:05:05sehen wir eine kleine TUI-Anwendung. Jetzt kann ich ihr einfach eine Anfrage in natürlicher Sprache geben
00:05:10und sehen, wie es funktioniert. Fangen wir erst einmal mit etwas Einfachem an. Sagen wir, es soll drei Sekunden lang ein rotes Licht blinken lassen.
00:05:17Und sobald ich das starte, siehst du, wie das Modell direkt vom Flash-Chip geladen wird
00:05:25und der Arbeitsspeicher eingerichtet wird. Sobald das erledigt ist, durchläuft es die Reasoning-Phase.
00:05:32Wir können erkennen, dass es festgestellt hat, dass die Farbe Rot und der Modus Blinken ist, und es hat außerdem verstanden
00:05:39dass wir das für drei Sekunden tun müssen. Sobald die Denkleistung abgeschlossen ist,
00:05:48geht es dazu über, den eigentlichen Tool-Aufruf zu schreiben.
00:05:53Das dauert einen kleinen Moment, da es auf einem ESP32 natürlich etwas langsamer läuft. Aber nichtsdestotrotz ist das ziemlich cool.
00:06:00Und schau dir das an: Wir erhalten jetzt ein drei Sekunden lang blinkendes rotes Licht.
00:06:08Wir sehen außerdem, dass es einen Konfidenzwert ausgibt, der uns verrät, wie sicher sich das Modell bezüglich dieses spezifischen Tool-Aufrufs war.
00:06:15Das ist direkt in Needle 2 integriert. Das ist ziemlich genial, denn basierend auf diesem Konfidenzwert
00:06:21können wir den Chip für verschiedene Szenarien programmieren. Wie du gesehen hast, hat das etwa 39 Sekunden gedauert,
00:06:27was sich vielleicht langsam anhört. Denk aber daran, dass dies ein Modell mit 45 Millionen Parametern ist,
00:06:35das auf einem 8-Megabyte-Mikrocontroller ohne GPU läuft. Sehen wir uns nun an, was passiert, wenn ich etwas frage,
00:06:41das völlig aus dem Kontext gerissen ist. Ich frage es einfach: Was ist die Hauptstadt von Frankreich?
00:06:48Wie du hier siehst, liest es unsere Anfrage erneut ein. Und in der Reasoning-Phase heißt es jetzt,
00:06:54dass kein Tool für Ländersachverhalte verfügbar ist. Der Tool-Aufruf bleibt also leer.
00:07:00Und sieh dir das an: Es war sich sehr sicher, dass es keine Tools gibt, die basierend auf diesem Prompt sinnvoll ausgeführt werden können.
00:07:07Ich würde sagen, das ist nach wie vor eine sehr intelligente Reaktion. Bitten wir es dieses Mal,
00:07:14sieben Sekunden lang ein violettes Licht leuchten zu lassen. Mal sehen, ob es das versteht. Es erkennt, dass
00:07:21die Farbe tatsächlich Violett ist. Und es versteht, dass Leuchten bedeutet, dass der Modus konstant und nicht blinkend sein muss.
00:07:29Außerdem versteht es, dass es für sieben Sekunden sein soll. Daraufhin schreitet es zur Tat und schreibt den eigentlichen Tool-Aufruf.
00:07:36Und sobald das erledigt ist – schau dir das an. Es leuchtet nun ein violettes Licht. Sollten sieben Sekunden sein.
00:07:46Da hast du es. Wie cool ist das denn? Interessanterweise war es sich dieses Mal gar nicht so sicher.
00:07:52Der Konfidenzwert lag also bei 0,57, aber es hat die Aufgabe trotzdem entsprechend durchdacht und
00:08:00genau das ausgeführt, worum wir gebeten haben. Es gibt noch eine Sache, die ich dir zeigen möchte. Ich habe dieses Projekt
00:08:06speziell so aufgebaut, dass es wiederverwendbar ist. Du kannst die Befehle für das blinkende Licht also gegen etwas anderes austauschen.
00:08:12Wenn du beispielsweise ein Robotikprojekt hast, das Servos nutzt, kannst du diese Befehle im Grunde
00:08:17durch deine eigenen ersetzen. Ich habe einen dreistufigen Prozess dokumentiert, wie das geht, in der Readme-Datei des Projekts.
00:08:24Wenn du es also für deine eigenen Projekte wiederverwenden möchtest, befolge einfach diese drei Schritte und du bist
00:08:29bereit. Probieren wir eine andere Variation aus: Zeige fünf Sekunden lang ein gelbes Licht. Und bitte sehr.
00:08:36Es lässt ein gelbes Licht blinken – für fünf Sekunden. Und das hatte den niedrigsten Konfidenzwert von allen,
00:08:42nämlich 0,46. Interessant fand ich, dass es dachte, „zeigen“ bedeute, ein Licht blinken zu lassen und es nicht über einen längeren Zeitraum
00:08:50anzuzeigen. Aber sieh mal einer an: Das zeigt, dass das Modell nicht perfekt ist. Es missversteht deine Absichten
00:08:56möglicherweise immer noch, aber nichtsdestotrotz bekamen wir ein gelbes Licht und das für fünf Sekunden. Und
00:09:03die meisten dieser Tool-Aufrufe benötigen etwa 40 Sekunden zur Verarbeitung bei durchschnittlich 1,86 Token pro Sekunde.
00:09:10Das ist meiner Meinung nach ein ziemlich cooles Ergebnis. Da habt ihr es also, Leute: Das ist Needle 2 in a Nutshell,
00:09:16ein Modell mit 45 Millionen Parametern und 14 Megabyte, das komplett offline auf einem Chip läuft, der etwa 10 Dollar kostet.
00:09:24Und Leute, wenn euch diese Art von technischen Analysen gefällt, lasst es mich wissen, indem ihr diesen
00:09:28Daumen-nach-oben-Button unter dem Video zertrümmert. Vergesst auch nicht, unseren Kanal zu abonnieren.
00:09:33Das war Andrus von BetterStack, und wir sehen uns in den nächsten Videos.

핵심 요약

Mit Needle 2 existiert ein 14 Megabyte großes LLM mit 45 Millionen Parametern, das speziell als Tool-Call-Dispatcher dient und vollständig offline auf einem 10-Dollar-Mikrocontroller wie dem ESP32-S3 läuft.

하이라이트

  • Das KI-Modell Needle 2 besitzt 45 Millionen Parameter und eine Dateigröße von 14 Megabyte.

  • Auf einem Raspberry Pi 5 erreicht Needle 2 eine Verarbeitungsgeschwindigkeit von bis zu 500 Token pro Sekunde.

  • Das Modell arbeitet mit einer 2-Bit-Quantisierung, die bereits während des Trainings angewendet wurde.

  • In Benchmarks für mobile Aktionen wählt Needle 2 in 98,3 Prozent der Fälle den korrekten Funktionsnamen aus.

  • Auf einem ESP32-S3 Mikrocontroller benötigt eine Inferenz etwa 40 Sekunden bei einer Geschwindigkeit von 1,86 Token pro Sekunde.

타임라인

Vorstellung und technische Eckdaten von Needle 2

  • Needle 2 ist ein Argentic LLM mit einer Größe von 14 Megabyte und 45 Millionen Parametern.
  • Das von Cactus Compute entwickelte Modell läuft auf Edge-Geräten bis hin zu einfachen ESP32-S3 Mikrocontrollern.
  • Im Gegensatz zu reinem Trainingsmaterial für Kindergeschichten versteht dieses Modell echte Kontexte.

Das Modell wurde von Cactus Compute unter der Apache 2.0-Lizenz als Open Source veröffentlicht. Es stellt im Vergleich zu früheren abgespeckten Mikrocontroller-Modellen ein echtes Modell dar, das auf extrem kleinen Geräten lauffähig ist.

Funktionsweise als Tool-Call-Dispatcher

  • Needle 2 fungiert als Tool-Call-Dispatcher anstelle eines klassischen Chatbot-LLMs.
  • Das Modell übersetzt natürlichsprachliche Befehle in vordefinierte Tool-Aufrufe wie Servomotor-Bewegungen.
  • Es besitzt kein Allgemeinwissen und kann keine allgemeinen Fragen wie die Hauptstadt von Frankreich beantworten.

Das Modell wurde gezielt für Geräteaktionen wie Smart-Home-Befehle oder Wearable-Aktionen trainiert. Auf leistungsstärkeren Geräten wie dem Raspberry Pi 5 erzielt es Geschwindigkeiten von bis zu 500 Token pro Sekunde.

Architektur und Optimierung durch Engramme und Hadamard-Transformation

  • Cactus hat Teile der Architektur durch Engramme und Hash-Nachschlagetabellen ersetzt, um Rechenaufwand zu sparen.
  • Eine Hadamard-Transformation übernimmt das Mischen ohne lernbare Parameter, wodurch das Parameterbudget geschont wird.
  • Das Modell läuft mit einer von Anfang an trainierten 2-Bit-Präzision, die Leistungseinbußen durch nachträgliche Komprimierung verhindert.

Um die Leistung trotz der geringen Größe von 45 Millionen Parametern zu erhalten, wurden herkömmliche MLP-Schichten und Matrixmultiplikationen durch mathematisch feste Operationen und Hash-Tabellen ersetzt. In Benchmarks konkurriert es erfolgreich mit fünfmal größeren Modellen.

Praxistests auf dem ESP32-S3 Mikrocontroller

  • Eine benutzerdefinierte Inferenz-Engine führt Needle 2 auf einem ESP32-S3 Board ohne GPU aus.
  • Die Verarbeitungszeit für Tool-Aufrufe liegt bei etwa 40 Sekunden mit einer Durchschnittsgeschwindigkeit von 1,86 Token pro Sekunde.
  • Das System gibt neben dem Tool-Aufruf auch einen Konfidenzwert aus, der die Modellunsicherheit quantifiziert.

Anhand verschiedener Licht- und Farb-Befehle zeigt sich, dass das Modell Anfragen verarbeitet, entsprechende Aktionen ansteuert und bei kontextfremden Fragen den Tool-Aufruf leer lässt. Das Projekt ist modular aufgebaut, sodass Befehle für Robotik-Anwendungen angepasst werden können.

커뮤니티 글

아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!

이 영상에 대해 글쓰기