Geschwindigkeitssteigerung von LLaMA auf der CPU
- Im
llamafile-Projekt von Mozilla wurden 84 neue Matrixmultiplikations-Kernel geschrieben
- Bei Verwendung von F16- und Q8_0-Gewichten auf der CPU ist die Prompt-Auswertungszeit im Vergleich zu
llama.cpp um 30 % bis 500 % schneller
- Die deutlichsten Verbesserungen wurden auf ARMv8.2+- (z. B. RPI 5), Intel- (z. B. Alderlake) und AVX512-Computern (z. B. Zen 4) erzielt
- Für Matrizen, die in den L2-Cache passen, wird eine 2× höhere Geschwindigkeit als mit MKL erreicht
- Die Geschwindigkeitssteigerung wirkt am besten bei Prompts mit weniger als 1.000 Token
Hintergrund
llamafile ist ein lokales LLM-Projekt, das im November 2023 gemeinsam mit Mozilla gestartet wurde
- Mit Cosmopolitan Libc wird
llama.cpp als plattformübergreifende Einzeldatei-Binärdatei paketiert
- Es läuft auf 6 Betriebssystemen für AMD64 und ARM64, mit kleineren Anpassungen
- Es wird angenommen, dass durch die Verbesserung der Kerntechnologien die bestmögliche
llama.cpp-Erfahrung für Nutzer geboten und beiden Projekten geholfen werden kann, ein breiteres Publikum zu erreichen
- Mozilla hat dafür Ressourcen bereitgestellt
Leistungssteigerung auf Enterprise-Hardware
- Als das Interesse an LLMs begann, bestand die Arbeitsumgebung aus einem sparsamen Hewlett Packard mit rotierenden Festplatten, langsamem RAM, einem AVX2-Prozessor, ohne GPU und mit Alpine Linux
- Was an
llama.cpp gefiel, war, dass dort Menschen mit solchen Voraussetzungen zuerst berücksichtigt wurden
- Es wurde begonnen, in Vollzeit ehrenamtlich mitzuarbeiten, und gemeinsam mit Leuten wie Slaren wurde
mmap()-Unterstützung eingeführt, wodurch sich der RAM-Verbrauch halbierte und Gewichte sofort geladen werden konnten
- Das war damals ein großer Sprung für lokale LLMs, trug aber kaum zur Verbesserung der Auswertungsgeschwindigkeit bei
- Der Großteil des Inferenzcodes wurde von Georgi Gerganov selbst geschrieben und war so gut, dass es letztlich noch ein weiteres Jahr dauerte, bis Verbesserungen möglich waren
- Jetzt, da dies gelungen ist, lohnt sich ein Blick darauf, wie viel schneller es auf dem alten Hewlett Packard geworden ist
Leistungssteigerung auf Hobby-Hardware
- Große Sprachmodelle lassen sich auch ohne große Computer ausführen
- Einer der besten heute im Handel erhältlichen PCs ist der Raspberry Pi
- Er bietet gute Leistung zu einem günstigen Preis und verbraucht sehr wenig Strom
- Der Raspberry Pi der 5. Generation wurde vor wenigen Tagen veröffentlicht und ist im Vergleich zum Vorgänger deutlich schneller
- Außerdem wurde Unterstützung für die ARMv8.2-ISAs
dotprod und fp16 eingeführt, was für LLMs sehr nützlich ist
- Allein diese beiden Funktionen ermöglichten es
llama.cpp, im vergangenen Jahr bei F16-Gewichten eine 10× höhere Leistung zu erreichen
- In dieser Woche kam mithilfe von Kernen, die ursprünglich für AVX512 gedacht waren, noch einmal eine 2× höhere Leistung hinzu
- Dass für Rechenzentrumsgeräte entwickelte Kernel gut zu einem kleinen und leichten Raspberry Pi passen würden, war nicht zu erwarten, aber da beide CPUs 32 Vektorregister besitzen, passte es tatsächlich perfekt
Leistungssteigerung auf Gaming-Hardware
- Gamer haben unter preisbewussten Käufern die höchsten Qualitätsansprüche, daher ist Hardware für Gamer normalerweise ziemlich gut
- Die Machine-Learning-Branche floriert seit Jahren auch deshalb, weil sie Hardware für Gamer zweckentfremdet
- Ohne den wichtigen Beitrag der Gamer hätte der AI-Winter wohl noch 10 Jahre länger angedauert
- Vor einigen Monaten wurde ein Gamer gebeten, einen Computer zu bauen, der den alten Hewlett Packard ersetzen kann
- Alderlake gilt als hervorragende CPU, scheint aber weithin missverstanden zu werden, wenn sich die Float16-Leistung so leicht um das Fünffache steigern ließ
- Anders als bei ARMv8.2 verwenden die x86-Kernel intern Float32-Operationstypen, sodass das ohne Rundungsfehler möglich war
- Das bedeutet, dass sich ein intelligenterer Spamfilter bauen lässt
- Die Ausführung des Shell-Skripts
spam.sh dauert nur 420 Millisekunden, also 7× weniger als auf dem Raspberry Pi 5
- Bei kleinen Workloads kann dieser Chip fertig sein, bevor CUDA überhaupt gestartet ist
- Besitzer von Alderlake-Systemen können damit rechnen, dass
llamafile besonders darauf achtet, nicht auf den Effizienz-Kernen zu laufen
- Das ist einer der Gründe, warum
llamafile schneller läuft als llama.cpp
- Es bedeutet auch, dass selbst bei einem 24/7 laufenden LLM noch genügend Ressourcen für andere Programme auf dem Computer bleiben
llama.cpp dispatcht Threads im Lockstep, sodass, wenn ein Kern länger arbeitet als ein anderer, alle anderen n Kerne in einer Busy Loop warten müssen, bis alles abgeschlossen ist
- Das größte Merkmal dieses Mikroprozessors ist, wie schnell er die 2,6 Millionen Codezeilen des Cosmopolitan-Monorepos bauen kann
- Der Hewlett Packard brauchte dafür immer 64 Sekunden, dieser Gaming-PC nur 20 Sekunden
- Ursprünglich waren es 35 Sekunden, doch mit Flüssigmetall und AI-Overclocking wurde es noch schneller
- Ein weiterer Grund, warum Systemcode auf Alderlake so schnell ist, ist, dass es bei der Entwicklung dieser CPU offenbar einen heftigen Kampf zwischen Hackern und Wissenschaftlern gab – und die Hacker gewannen
- Es bleibt zu hoffen, dass es künftig bessere Kompromisse bei AVX512 geben wird, doch insgesamt besteht große Zufriedenheit mit diesem Chip, da er gegenüber dem Vorgänger erhebliche Fortschritte zeigt
Leistungssteigerung auf Apple-Hardware
- Wenn es um den hochwertigsten PC geht, dann wohl eindeutig um den Mac Studio
- Hier einen Leistungsvorsprung zu erzielen war schwieriger, weil dies die Hardware-Plattform ist, um die sich die
llama.cpp-Entwickler am meisten kümmern, und weil die Entscheidung für Stallmans Compiler bedeutet, mit einem Handicap statt mit Apples proprietären Werkzeugen zu arbeiten
- Dass der M2-Mikroprozessor
llamafile zu einer Feuerlöschleitung für synthetische Inhalte macht, dürfte nicht überraschen
- Der Trick, den Apple dafür nutzt, ist vertikale Integration
- Wer einen Mac Studio kauft und hineinschaut, wird feststellen, dass Apple den RAM-DIMM in die CPU gepackt hat
- Weil die CPU diese langen Wege nicht mehr zurücklegen muss, laufen latenzabhängige Aufgaben wie die Token-Generierung viel schneller
- Betrachtet man jedoch reine FLOPs (gemessen in Prompt
tok/sec), zeigt sich, dass die ARM-ISA des M2 Ultra nur 30 % mehr Rechenleistung freilegt als der deutlich günstigere Intel-Computer
- Auf mehr lässt sich nur über proprietäre Frameworks wie Metal oder Accelerate zugreifen
- Wenn
xcode installiert ist, kompiliert llamafile standardmäßig ein kleines Stub-Modul, das hilft, sich vor alle Closed-Source-Bibliotheken zwischen dem Nutzer und dem Silicon zu schalten
- Wer den Kauf eines Mac Studio erwägt, sollte wissen, dass XNU – ähnlich wie der Windows Executive – sehr gute Arbeit dabei leistet, den Desktop stabil zu halten, was bedeutet, dass das System vor seinem Nutzer geschützt wird
- Wegen all dieser Sicherheitsfunktionen dauert das Kompilieren des Cosmo-Monorepos auf dem Mac Studio 45 Sekunden, aber selbst eine Fork-Bombe würde vermutlich nicht dazu führen, dass Netflix auch nur ein einziges Frame auslässt
- Das Skript
spam.sh läuft ebenfalls in 430 ms und ist damit langsamer als auf Intel
- Das beunruhigt jedoch nicht, da Asahi Linux gezeigt hat, wie sich das volle Potenzial des M2 ausschöpfen lässt
Leistungssteigerung auf Profi-Hardware
llamafile legt großen Wert darauf, Menschen ohne GPU zu helfen, bietet aber auch dem oberen 1 % eine erstklassige Erfahrung
- Der AMD Ryzen Threadripper PRO 7995WX wurde vor einigen Monaten veröffentlicht und ist derzeit die teuerste CPU, die man kaufen kann
- Für 10.000 Dollar erhält man auf Basis der Zen4-Architektur 96 Kerne mit AVX512
- Trotz des doppelt so hohen Preises bietet die x86-ISA des 7995WX 7× mehr rohe Rechenleistung als die ARM-ISA des M2 Ultra, erreicht aber fast dieselbe Token-Generierungsgeschwindigkeit
- Das dürfte am 384 MB großen L3-Cache liegen
- Ein Vorteil von AVX512 ist, dass Googles Gemma-Modell auf AVX512 mathematische Rätsel lösen kann, auf AVX2 jedoch nicht, weil größere Vektoren Rundungsfehler im Allgemeinen leichter reduzieren
- Der Befehl
VDPBF16PS hilft beim updot von bf16, ähnlich wie VNNI und ARM dotprod
- Modelle wie Mistral und TinyLLaMA verteilen ihre Gewichte im offiziellen Format als
bfloat16, daher ist native Unterstützung für bf16 gut
- Wenn
bf16 in fp16 umgewandelt wird, lassen sich nur 13 % der möglichen Zahlen exakt darstellen
- In der Praxis spielt das kaum eine Rolle, weil 99,71 % der von Mistral 7b verwendeten Zahlen innerhalb dieser 13 % liegen
- Dennoch bemüht sich
llamafile, die angegebene Bitzahl so gut wie möglich zu liefern
2 Kommentare
Es gibt hier offenbar keine Daten zu Mittelklasse-Systemen wie dem Intel 14600 oder dem Ryzen 5600. Es wirkt zwar so, als sei beabsichtigt, zu zeigen, dass es sogar auf einem Raspberry Pi läuft, aber für die praktische Nutzung scheint das kaum realistisch zu sein. Trotzdem möchte ich mich damit trösten, dass die für den lokalen Betrieb von LLMs erforderlichen Hardware-Spezifikationen allmählich sinken.
Hacker-News-Kommentare
Meinung zur Fortran-
SGEMM-Implementierung:-funroll-all-loops) möglich.Meinung zum Ersatz von cuBLAS:
Meinung zur Ausführung von LLMs (Local Language Models):
Meinung zur Leistungsmessung:
Verwandte Links:
Meinung zum Titel:
Meinung zu Leistungsverbesserungen gegenüber MKL-DNN:
Meinung zur Ausführung von LLMs:
Meinung zum CPU-Einsatz bei Pixar:
Meinung zu AMD Zen4 und AVX512: