14 Punkte von GN⁺ 2024-04-02 | 2 Kommentare | Auf WhatsApp teilen

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

 
savvykang 2024-04-02

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.

 
GN⁺ 2024-04-02
Hacker-News-Kommentare
  • Meinung zur Fortran-SGEMM-Implementierung:

    • Moderne Fortran-Compiler können AVX- und FMA-Optimierungen auch ohne zusätzliche Änderungen anwenden.
    • Loop-Unrolling-Optimierungen sind über Compiler-Flags (-funroll-all-loops) möglich.
    • Der Intel-Compiler führt Loop-Unrolling auch ohne ausdrückliche Anforderung des Nutzers durch.
    • Es kann schwierig sein, Fortran-77-Quellcode zu parallelisieren, aber man kann OpenMP-Syntax hinzufügen oder Parallelisierungsstrukturen aus modernem Fortran verwenden.
    • Unterschätzt Fortran-77-Funktionen nicht. Der Zweck von Fortran ist es, Entwickler von plattformspezifischen Details zu befreien und die Arbeit dem Compiler zu überlassen.
  • Meinung zum Ersatz von cuBLAS:

    • Es wirkt wie ein Versuch, cuBLAS innerhalb von CUDA neu zu schreiben.
    • Der nächste Schritt könnte sein, die CUDA-Abhängigkeit zu entfernen und direkt Vulkan- oder Metal-Compute-Shader zu verwenden.
  • Meinung zur Ausführung von LLMs (Local Language Models):

    • Jeder sollte in der Lage sein, mit minimalen Anforderungen ein LLM lokal herunterzuladen und auszuführen.
    • Das könnte als Backup für einen großen Teil des menschlichen Wissens dienen.
  • Meinung zur Leistungsmessung:

    • Bevorzugt wird, Subroutinen in C++ zu definieren. C++ ist mehr als drei Größenordnungen schneller als Python.
    • Die Idee, Leistungsunterschiede in "Jahren nach Moore's Law" zu messen, gefällt.
  • Verwandte Links:

  • Meinung zum Titel:

    • Der Titel ist verwirrend. Zunächst kann man ihn so missverstehen, als werde behauptet, das Modell sei auf der CPU schneller als auf der GPU.
    • Ein klarerer Titel wie „Leistungsverbesserung von LLaMA auf der CPU“ wäre besser.
  • Meinung zu Leistungsverbesserungen gegenüber MKL-DNN:

    • Es gab die Erfahrung, MKL-DNN bei begrenzten Matrixgrößen zu übertreffen, was jedoch scheiterte.
    • Eine solche Energieeffizienz ist auf der CPU physikalisch unmöglich.
  • Meinung zur Ausführung von LLMs:

    • Auch ohne großen Computer kann man große Sprachmodelle ausführen.
    • Das Ausführen eines Modells mit wenigen Parametern zählt technisch zwar als Ausführung eines Sprachmodells, erfüllt aber möglicherweise nicht den Maßstab, den die meisten Menschen als nützlich ansehen.
  • Meinung zum CPU-Einsatz bei Pixar:

    • Große Studios wie Pixar verwenden für Film-Rendering CPUs, weil sie bei Kosten/Leistung und beim Zugriff auf größeren RAM im Vorteil sind.
    • Relevanter News-Link.
  • Meinung zu AMD Zen4 und AVX512:

    • Die 7995WX-x86-ISA bietet im Vergleich zur M2-Ultra-ARM-ISA zum doppelten Preis die 7-fache rohe Rechenleistung, während die Token-Erzeugungsgeschwindigkeit fast identisch ist.
    • Das könnte an dem 384 MB großen L3-Cache liegen.
    • Es wurde daran gearbeitet, LLaMA auf Zen4 2,8-mal schneller als zuvor auszuführen.