Effiziente Bereitstellung von Low-Bit-Großsprachmodellen auf CPUs
Die Schlüsselinnovation von T-MAC liegt in der Verwendung eines tabellenbasierten (LUT) Berechnungsparadigmas anstelle des traditionellen Multiply-Accumulate (MAC) Berechnungsparadigmas. T-MAC nutzt Lookup-Tabellen, um Low-Bit-Berechnungen direkt zu unterstützen, wodurch die in anderen Systemen erforderlichen Dequantisierungsoperationen eliminiert und die Anzahl der Multiplikations- und Additionsoperationen erheblich reduziert werden.
Experimente haben gezeigt, dass T-MAC eine hervorragende Leistung bietet: Auf einem Surface AI PC mit dem neuesten Qualcomm Snapdragon X E lite Chipsatz erreicht das 3B BitNet-b1.58 Modell eine Generierungsrate von 48 Token pro Sekunde, das 2-Bit 7B llama Modell 30 Token pro Sekunde und das 4-Bit 7B llama Modell 20 Token pro Sekunde.
Dies übertrifft sogar die Leistung von NPUs!
Bei der Bereitstellung des llama-2-7b-4bit Modells kann die NPU 10,4 Token pro Sekunde generieren, während die CPU mit Unterstützung von T-MAC mit nur zwei Kernen 12,6 Token pro Sekunde erreicht und sogar bis zu 22 Token pro Sekunde steigern kann.
All dies übertrifft bei weitem die durchschnittliche menschliche Lesegeschwindigkeit und stellt eine 4- bis 5-fache Verbesserung gegenüber dem ursprünglichen llama.cpp-Framework dar.
Selbst auf weniger leistungsfähigen Geräten wie dem Raspberry Pi 5 erreicht T-MAC für das 3B BitNet-b1.58 eine Generierungsrate von 11 Token pro Sekunde. T-MAC bietet auch signifikante Vorteile beim Stromverbrauch: Um die gleiche Generierungsrate zu erreichen, benötigt T-MAC nur 1/4 bis 1/6 der Kerne des ursprünglichen llama.cpp, was den Energieverbrauch senkt und gleichzeitig Rechenressourcen für andere Anwendungen freisetzt.
Bemerkenswert ist, dass die Rechenleistung von T-MAC mit abnehmender Bitanzahl linear zunimmt, ein Phänomen, das bei GPU- und NPU-Implementierungen, die auf Dequantisierung basieren, schwer zu beobachten ist. T-MAC kann jedoch bei 2 Bit 10 Token pro Sekunde auf einem Kern und 28 Token pro Sekunde auf vier Kernen erreichen, was die Leistung von NPUs bei weitem übertrifft.
Matrixmultiplikation ohne Multiplikation, nur mit Tabellennachschlagen (LUT)
Für Low-Bit-Parameter (Gewichte) gruppiert T-MAC jedes Bit separat (z.B. eine Gruppe von 4 Bits), multipliziert diese Bits mit dem Aktivierungsvektor, berechnet alle möglichen Teilsummen vor und speichert sie dann in einer LUT.
Anschließend verwendet T-MAC Verschiebungs- und Akkumulationsoperationen, um skalierbare Bitbreiten von 1 bis 4 zu unterstützen. Durch diese Methode verzichtet T-MAC auf die auf CPUs ineffizienten FMA (Fused Multiply-Add) Anweisungen und verwendet stattdessen die energieeffizienteren und leistungsfähigeren TBL/PSHUF (Tabellennachschlag) Anweisungen.
Bit-zentrierte Berechnung ersetzt datentyp-zentrierte Berechnung
Traditionelle dequantisierungsbasierte Berechnungen sind tatsächlich datentyp-zentrierte Berechnungen, die für jeden unterschiedlichen Datentyp separat angepasst werden müssen.
Jede Kombination von Aktivierungs- und Gewichtsbitbreiten, wie W4A16 (Gewicht int4, Aktivierung float16) und W2A8, erfordert spezifische Gewichtslayouts und Berechnungskerne.
Zum Beispiel erfordert das W3-Layout, dass 2 Bits und 1 Bit separat verpackt und mit verschiedenen Verschachtelungs- oder Mischungsmethoden für Speicherausrichtung oder schnelle Dekodierung verwendet werden. Der entsprechende Berechnungskern muss dann dieses spezifische Layout in vom Hardware unterstützte Datentypen entpacken, um ausgeführt zu werden.
T-MAC hingegen betrachtet Low-Bit-Matrixmultiplikationen aus der Perspektive einzelner Bits, entwirft optimale Datenstrukturen für ein einzelnes Bit und erweitert diese dann durch Stapelung auf höhere 2/3/4 Bits.
Gleichzeitig muss für Aktivierungsvektoren unterschiedlicher Präzision (float16/float32/int8) nur der Prozess der Tabellenerstellung geändert werden, während beim Tabellennachschlagen keine unterschiedlichen Datenstrukturen mehr berücksichtigt werden müssen.
Darüber hinaus reduziert sich bei traditionellen dequantisierungsbasierten Methoden die Rechenleistung nicht, wenn von 4 Bit auf 3/2/1 Bit reduziert wird, obwohl der Speicherverbrauch geringer ist. Aufgrund des nicht abnehmenden Overheads der Dequantisierung kann die Leistung sogar schlechter werden.
Die Rechenleistung von T-MAC nimmt jedoch linear mit abnehmender Bitanzahl ab, was zu einer besseren Beschleunigung bei niedrigeren Bits führt und effiziente Bereitstellungslösungen für die neuesten 1-Bit/2-Bit-Modelle wie BitNet und EfficientQAT bietet.
Hochoptimierte Operatorimplementierung
Bit-zentrierte Berechnungen bieten viele Vorteile, aber ihre Implementierung auf CPUs stellt immer noch erhebliche Herausforderungen dar:
(1) Im Vergleich zum sequentiellen Zugriff auf Aktivierungen und Gewichte ist der Tabellenzugriff zufällig. Die Residenz der Tabellen im schnellen On-Chip-Speicher ist entscheidend für die endgültige Inferenzleistung.
(2) Der On-Chip-Speicher ist jedoch begrenzt, und die Lookup-Tabellen-Methode (LUT) erhöht die Nutzung des On-Chip-Speichers im Vergleich zum traditionellen mpGEMV. Dies liegt daran, dass die Lookup-Tabellen die Ergebnisse der Multiplikation des Aktivierungsvektors mit allen möglichen Bitmustern speichern müssen, was deutlich mehr ist als die Aktivierungen selbst.
Um diese Herausforderungen zu bewältigen, haben Forscher des Microsoft Research Asia Labs den tabellenbasierten Berechnungsdatenfluss eingehend untersucht und effiziente Datenstrukturen und Berechnungsabläufe für dieses Berechnungsparadigma entworfen, darunter:
-
Speicherung der LUT im On-Chip-Speicher, um die Leistung von Tabellennachschlag-Vektoranweisungen (TBL/PSHUF) auf CPUs für zufällige Speicherzugriffe zu nutzen.
-
Änderung der Berechnungsreihenfolge der Matrixachsen, um die Datenwiederverwendungsrate der begrenzten LUTs im On-Chip-Speicher zu maximieren.
-
Entwurf einer optimalen Matrixpartitionierung (Tiling) speziell für Tabellennachschläge, kombiniert mit autotvm-Suche nach optimalen Partitionierungsparametern.
-
Optimierung des Layouts der Gewichtsparameter
a) Neuanordnung der Gewichte zur Maximierung sequentieller Zugriffe und Verbesserung der Cache-Trefferquote
b) Verschachtelung der Gewichte zur Verbesserung der Dekodierungseffizienz
- Gezielte Optimierungen für Intel/ARM CPUs, einschließlich
a) Register-Neuanordnung für schnellen Aufbau von Lookup-Tabellen
b) Schnelle 8-Bit-Akkumulation durch Durchschnittsbildung
Die Forscher haben schrittweise verschiedene Optimierungen auf einer Basisimplementierung angewendet und schließlich eine signifikante Beschleunigung gegenüber SOTA Low-Bit-Operatoren erreicht: