- Microsofts bitnet.cpp ist das offizielle Inferenz-Framework für 1-Bit-LLMs (Large Language Models) und unterstützt schnelle, verlustfreie Inferenz auf CPU und GPU
- Auf ARM-CPUs werden 1,37- bis 5,07-fache Geschwindigkeitssteigerungen und 55,4–70 % Energieeinsparung, auf x86-CPUs 2,37- bis 6,17-fache Geschwindigkeitssteigerungen und 71,9–82,2 % Energieeinsparung erreicht
- Durch zusätzliche parallele Kernel-Implementierung und Embedding-Quantisierung wird gegenüber bisher eine weitere Leistungssteigerung um das 1,15- bis 2,1-Fache erzielt
- Das Modell BitNet b1.58 kann auf einer einzelnen CPU mit 5–7 Token pro Sekunde ausgeführt werden, was die Nutzung extrem großer Modelle in lokalen Umgebungen realistischer macht
- Es wurde auf Basis von llama.cpp und T-MAC entwickelt und trägt zur Erweiterung des Open-Source-Ökosystems für effizientere Low-Bit-LLM-Inferenz bei
Überblick über bitnet.cpp
- bitnet.cpp ist das offizielle Inferenz-Framework für 1-Bit-LLMs (z. B. BitNet b1.58) und bietet optimierte Kernel für CPU und GPU
- NPU-Unterstützung soll später ergänzt werden
- Die erste Veröffentlichung unterstützt CPU-Inferenz und weist auf ARM- und x86-Architekturen Verbesserungen bei Geschwindigkeit und Energieeffizienz nach
- ARM-CPU: 1,37- bis 5,07-fache Beschleunigung, 55,4–70 % Energieeinsparung
- x86-CPU: 2,37- bis 6,17-fache Beschleunigung, 71,9–82,2 % Energieeinsparung
- Das 100B-Parameter-Modell BitNet b1.58 kann auf einer einzelnen CPU mit 5–7 Token pro Sekunde ausgeführt werden
Neueste Optimierungen
- Es wurden parallele Kernel-Implementierung sowie Funktionen für Tiling-Konfiguration und Embedding-Quantisierung ergänzt, wodurch gegenüber bisher eine zusätzliche Beschleunigung um das 1,15- bis 2,1-Fache erreicht wurde
- Leistungsverbesserungen wurden auf verschiedenen Hardware-Plattformen und bei unterschiedlichen Workloads bestätigt
- Detaillierte technische Inhalte sind im Dokument
optimization guide enthalten
Demo und offizielle Modelle
- Es gibt eine Demo, in der das BitNet b1.58 3B-Modell auf einem Apple M2 ausgeführt wird
- Als offizielles Modell ist BitNet-b1.58-2B-4T auf Hugging Face veröffentlicht und wird auf x86- und ARM-CPUs unterstützt
- Zu den unterstützten Modellen gehören bitnet_b1_58-large(0.7B), bitnet_b1_58-3B(3.3B), Llama3-8B-1.58, Falcon3 und die Falcon-E-Serie
Installation und Build
- Anforderungen: Python 3.9 oder höher, CMake 3.22 oder höher, Clang 18 oder höher
- Windows-Nutzer müssen Visual Studio 2022 installieren
- Für Debian/Ubuntu-Nutzer steht ein automatisches Installationsskript bereit
- Die Verwendung einer Conda-Umgebung wird empfohlen; mit
setup_env.py lässt sich die Modellumgebung einrichten
- Nach dem Herunterladen des Modells von Hugging Face kann es über einen lokalen Pfad ausgeführt werden
Nutzung und Benchmarks
- Mit
run_inference.py wird Inferenz mit quantisierten Modellen ausgeführt
- Wichtige Argumente: Modellpfad (-m), Prompt (-p), Anzahl der Threads (-t), Kontextgröße (-c), Temperatur (-temp)
- Mit dem Skript
e2e_benchmark.py kann die Leistung gemessen werden, indem Token-Anzahl, Prompt-Länge und Thread-Anzahl angegeben werden
- Falls kein öffentliches Modell verfügbar ist, kann mit
generate-dummy-bitnet-model.py ein Dummy-Modell erzeugt und anschließend ein Benchmark ausgeführt werden
Modellkonvertierung und FAQ
- Es wird ein Skript bereitgestellt, um
.safetensors-Checkpoints in das gguf-Format zu konvertieren
- Die FAQ erläutern Lösungen für llama.cpp-Build-Fehler (in Verbindung mit std::chrono) sowie die Einrichtung der clang-Umgebung unter Windows
- Die Umgebung muss in der Visual-Studio-Entwickler-Eingabeaufforderung oder in PowerShell initialisiert werden
1 Kommentare
Hacker-News-Kommentare
Microsoft verwendet in Wirklichkeit 2 Bit statt 1,58 Bit
In diesem Fall lassen sich vier Werte darstellen: -1, 0, 1, 2
Angesichts dessen, dass inhibitorische Synapsen 20–30 % ausmachen, scheint diese Struktur gut zur Struktur des biologischen Gehirns zu passen
Ich frage mich oft, wie ein „minimal funktionsfähiges LLM“ aussehen würde
Also ein Modell, das mit nur minimalen Informationen trotzdem hinreichend vernünftige Antworten geben kann, indem es den Rest googelt
Wenn jemand wie Encyclopedia Britannica Daten an LLMs verkaufen und einen Dienst zur Ergebnisvalidierung anbieten würde, könnte das einen großen Unterschied machen
Wikipedia ist auch gut, aber der hohe Anteil an menschlichen Fehlern und Bias ist bedauerlich
Kleine LLMs entwickeln sich bereits in diese Richtung: Allgemeinwissen fehlt oft noch, aber die Tool-Nutzung (z. B. Googeln) wird immer besser
Allerdings ist es nach wie vor schwierig, klar zwischen dem zu unterscheiden, was das Modell weiß und was es nicht weiß
Wie ein Ingenieur, der ein bestimmtes Gerät nicht kennt: problemlösungsfähig, aber ohne Detailwissen
Ob so ein Modell das allein durch Googeln oder Wiki-Suche lösen kann, ist fraglich, aber Edge-LLM-Architekturen scheinen künftig zum Standard zu werden
Je eher Informationen in den Trainingsdaten enthalten sind, desto leichter lassen sie sich abrufen und interpretieren
Daher könnte ein Training, das eher auf externem Speicher (Suche usw.) als auf internem Auswendiglernen basiert, praktischer sein
Ich denke eher das Gegenteil
Laut Originalpaper (pdf) braucht man gegenüber einem fp16-Modell etwa 4- bis 5-mal so viele Parameter
Man kann es zwar selbst bauen, aber weil man von Grund auf neu trainieren muss, sind die Optionen begrenzt
Trotzdem dürfte die Inferenzgeschwindigkeit höher sein als bei aktuellen quantisierten 4-Bit- und 8-Bit-Modellen
Der eigentliche Kernpunkt ist der Energieeinspareffekt
Bei CPU-Inferenz sollen 70–82 % Einsparung möglich sein
Wenn 1-Bit-Modelle gut genug werden, könnte man LLMs auf normaler Hardware auch ohne GPU betreiben, was die Zugänglichkeit grundlegend verändern würde
bitnet.cpp wird als offizielles Inferenz-Framework für 1-Bit-LLMs (BitNet b1.58 usw.) beschrieben,
aber es gibt Verwirrung darüber, ob es sich um „1 Bit oder 1 Trit“ handelt
Die beiden Konzepte durcheinander zu verwenden, ist verwirrend
Es freut mich, dass dieses Projekt weiterentwickelt wird
Letztes Jahr hatte ich nach diesem Beitrag Potenzial darin gesehen, war aber enttäuscht, dass keine neuen Modelle erschienen sind
Wirklich interessant ist die Richtung, binäre Modelle direkt ohne Gleitkommaoperationen zu trainieren
Dazu gibt es ein Paper auf der NeurIPS 2024
Dass man „100B BitNet ausführen kann“, bedeutet nicht, dass ein solches Modell existiert, sondern dass ein Inferenz-Framework dafür möglich ist
Auch wenn man nach „1-bit 100b model“ sucht, findet man kein herunterladbares Modell
Die Qualität der Modellausgaben ähnelt eher GPT-2-artigem Gemurmel und wiederholt ganze Absätze wortwörtlich
Sogar gefälschte Zitate wie
(Jenkins, 2010)werden ständig wiederverwendetDer Titel ist irreführend
Tatsächlich geht es nicht um ein trainiertes 100B-Modell, sondern um ein Inferenz-Framework, das so etwas verarbeiten kann
Ich betreibe auf einem M2 Max 96GB ein quantisiertes 70B-Modell mit llama.cpp + LiteLLM, und die Speicherbandbreite ist der Flaschenhals
Der 1,58-Bit-Ansatz hat auf der CPU ein grundlegend anderes Rechenmuster, bei dem Matrixmultiplikation in Additionen umgewandelt wird
Wenn man ein Modell der 100B-Klasse auf einem einzelnen CPU-Kern mit 5–7 Tokens pro Sekunde betreiben könnte, wäre das ein Wendepunkt für On-Device-Inferenz
Das Framework ist bereit, jetzt muss nur noch jemand das Modell tatsächlich trainieren
Für das Training wären zwar weiterhin GPUs nötig, aber Hardware nur für Inferenz könnte deutlich einfacher werden
Ich habe schon ein Modell mit 7 Tokens/Sekunde verwendet, und es fühlte sich an, als würde man hinter einer langsamen Person herlaufen
Lokal sollte man eher mindestens 10 Tokens pro Sekunde anpeilen
Moderne CPUs haben FMA-(Fused Multiply-Add)-Befehle, deren Durchsatz fast dem einfacher Additionen entspricht
Ich frage mich, wann PCs mit NPU wirklich nennenswerte Ergebnisse liefern werden
AMD erzielt mit hybriden NPU/iGPU-Inferenz-Kernels gute Resultate
Wenn solche großen Modelle auf NPUs laufen, dürfte die Energieeffizienz im Vergleich zur CPU deutlich besser sein
Seitdem bin ich Fan von NPUs. Natürlich ist das nicht auf dem Niveau einer RTX 5090, aber viel effizienter als eine CPU
Das Software-Ökosystem ist zwar instabil, aber es läuft mit nahezu 0 % CPU-/GPU-Auslastung
Ich hatte sie eher als auf niedrigen Stromverbrauch ausgelegte Designs verstanden