Die explosive Leistungssteigerung von GPUs
(hazyresearch.stanford.edu)- Da die Kosten für AI-Berechnungen steigen, fasst Hazy Research zusammen, dass der Schlüssel zur Optimierung der GPU-Leistung darin liegt, die Tensor Cores der NVIDIA H100 ohne Unterbrechung auszulasten
- Die H100 erreicht bei Half-Precision-Matrixmultiplikation 989 TFLOPs, kommt bei allgemeinen Operationen jedoch nur auf etwa 60 TFLOPs; sobald die Tensor Cores stillstehen, fällt die Auslastung stark ab
- Um sich der Maximalleistung zu nähern, müssen WGMMA, Shared-Memory-Anordnung, Adressgenerierung und Occupancy gemeinsam behandelt werden; ohne
wgmma.mma_asyncbleibt man in Mikrobenchmarks bei rund 63 % des Peaks - Das veröffentlichte eingebettete CUDA-DSL ThunderKittens kapselt mit Tile- und Vektor-Abstraktionen Komplexität wie Swizzling und Register-Layout und vereinfacht so das Schreiben von FlashAttention-artigen Kerneln
- Der FlashAttention-2-Forward-Kernel für die H100 lässt sich in rund 100 Zeilen schreiben und ist etwa 30 % schneller als FlashAttention-2; der Based-Linear-Attention-Kernel läuft mit 215 TFLOPs
Bedingungen, die die H100-Leistung bestimmen
- AI nutzt viel Compute, und Hazy Research hat in den vergangenen Jahren daran gearbeitet, dass AI entweder mit weniger Compute auskommt oder auf gegebener Compute effizienter läuft
- Beispiele für Compute-Einsparungen sind Based, Monarch Mixer, H3, Hyena, S4
- Beispiele für effiziente Ausführung sind FlashAttention, FlashAttention-2, FlashFFTConv
- Das praktische Ziel ist, die Erkenntnisse aus der Beschleunigung von GPUs zusammenzufassen und das eingebettete CUDA-DSL ThunderKittens zu veröffentlichen, das beim Schreiben schneller Kernel helfen soll
- Allgemeiner geht es darum, wie das Verständnis von Hardware die Sicht auf AI-Compute verändert hat
Architektur und Engpässe der NVIDIA H100
- Diskutiert wird auf Basis einer H100-SXM-GPU mit folgender Konfiguration
- 80 GB HBM3, Bandbreite 3 TB/s
- 50 MB L2-Cache, Bandbreite 12 TB/s, aufgeteilt in zwei 25-MB-Sektionen über die GPU hinweg und per Crossbar verbunden
-
132 SMs
- Jeder SM besitzt einen 256-KB-L1-Cache inklusive bis zu 227 KB Shared Memory und erreicht zusammen etwa 33 TB/s Bandbreite
- Die neue Hopper-Hardware Tensor Memory Accelerator (TMA) übernimmt asynchrone Adressgenerierung und Memory-Fetches
- Jeder SM besteht aus 4 Quadranten, und jeder Quadrant enthält einen Warp-Scheduler, 512 Vektorregister, Tensor Cores für Matrixmultiplikation sowie parallele Spezialinstruktionen
- Sämtliche Compute-Arbeit findet im SM statt, der Großteil in den Registern
- Der Schlüssel zu hoher Leistung auf der H100 ist, die Tensor Cores kontinuierlich mit Daten zu versorgen
- Die H100 liefert 989 TFLOPs bei Half-Precision-Matrixmultiplikation und etwa 60 TFLOPs bei „allen anderen“ Operationen
- In Zyklen, in denen Tensor Cores genutzt werden, wird mindestens 94 % Hardware-Auslastung erreicht
- In Zyklen ohne Tensor-Core-Nutzung bleibt die Auslastung bei höchstens 6 %
WGMMA: notwendig, aber schwierig
- Die H100 besitzt die warp group matrix multiply accumulate-Instruktion
wgmma.mma_async- In PTX:
wgmma.mma_async - In SASS:
HGMMA/IGMMA/QGMMA/BGMMA
- In PTX:
- Auf früheren GPUs waren
wmma.mma.syncundmma.syncsynchron: Ein Warp aus 32 Threads fütterte die Tensor Cores mit Daten und wartete auf das Ergebnis wgmma.mma_asyncsynchronisiert stattdessen 128 zusammenhängende Threads, die über alle Quadranten eines SM kooperieren, und startet die Matrixmultiplikation asynchron direkt aus dem Shared Memory- Die Warps können während der laufenden Matrixmultiplikation andere Arbeiten in Registern ausführen
- Auf die Ergebnisse kann zum gewünschten Zeitpunkt gewartet werden
- In Mikrobenchmarks waren diese Instruktionen nötig, um die volle Compute-Leistung der H100 herauszuholen
- Ohne sie blieb die GPU bei etwa 63 % der Spitzen-Auslastung
- Ein möglicher Grund ist, dass Tensor Cores selbst bei lokalen Ressourcen tiefe Hardware-Pipelines benötigen
- Die größte Schwierigkeit ist die Komplexität des Memory-Layouts
- Ein unswizzeltes Shared-Memory-Layout hat sehr schlechte Coalescing-Eigenschaften und beansprucht viel L2-Bandbreite
- Das swizzelte Layout war schwer zu verstehen, auch weil die Dokumentation fehlerhaft war
- Das swizzelte Layout scheint nur für bestimmte Matrix-Shapes zu funktionieren und passt nicht gut zu anderen Funktionen von
wgmma.mma_async - Die Hardware kann auf dem Weg zum Tensor Core zwar eine Submatrix transponieren, aber nur wenn das Layout nicht swizzelt ist
- In Kerneln wie FlashAttention können TMA und L2-Cache dieses Problem teilweise kaschieren, weil sie schnell genug sind
- Um die Hardware vollständig auszunutzen, müssen Memory-Requests gut coalesced sein und Bank Conflicts vermieden werden; deshalb ist die Kontrolle über das Layout wichtig
Shared Memory und Bank Conflicts
- Die Single-Access-Latenz von Shared Memory liegt offenbar bei rund 30 Zyklen; in dieser Zeit könnten die Tensor Cores eines SM fast zwei 32x32-Matrixmultiplikationen ausführen
- Frühere Arbeiten wie FlashAttention konzentrierten sich vor allem auf den HBM-SRAM-Engpass, und historisch war dieser Engpass auch tatsächlich wichtig
- Da HBM schneller geworden ist und Tensor Cores stärker skaliert haben als andere Chipbereiche, müssen inzwischen selbst kleine Shared-Memory-Latenzen entfernt oder verborgen werden
- Shared Memory ist in 32 Banks aufgeteilt, sodass ohne Vorsicht Bank Conflicts entstehen
- Wenn mehrere unterschiedliche Speicherstücke gleichzeitig aus derselben Memory-Bank angefordert werden, werden die Requests serialisiert
- Erfahrungsgemäß kann ein Kernel dadurch unverhältnismäßig stark verlangsamt werden
- Die von WGMMA und MMA geforderten Register-Layouts können bei naiver Nutzung Bank Conflicts verursachen
- Die Lösung besteht darin, Shared Memory mit verschiedenen Swizzling-Mustern neu anzuordnen, um Konflikte zu vermeiden
- Wo möglich, sollte man Transfers zwischen Registern und Shared Memory vermeiden; wenn sie nötig sind, sind asynchrone Datenbewegungen über Spezialhardware wie WGMMA und TMA vorteilhaft
- Tatsächliche synchrone Transfers mit normalen Warps sind zwar am allgemeinsten, kommen aber dem schlechtesten Fallback nahe
Adressgenerierung und TMA
- Auf der H100 sind sowohl Tensor Cores als auch Memory so schnell, dass bereits die Erzeugung der zu ladenden Memory-Adressen einen erheblichen Teil der Chip-Ressourcen beansprucht
- Bei komplexen Interleaving- oder Swizzling-Mustern fällt das noch stärker ins Gewicht
- Der Tensor Memory Accelerator (TMA) von NVIDIA erlaubt es, multidimensionale Tensor-Layouts in Global und Shared Memory festzulegen, asynchron ein Subtile dieses Tensors zu laden und bei Abschluss eine Barrier auszulösen
- TMA senkt die Kosten der Adressgenerierung und vereinfacht außerdem den Aufbau von Pipelines
- TMA wird – ähnlich wie
wgmma.mma_async– als essenziell angesehen, um das Potenzial der H100 auszuschöpfen- Nach praktischer Erfahrung ist TMA möglicherweise sogar wichtiger als WGMMA
- Es spart Register-Ressourcen und Instruction-Dispatch
- Es kann auch asynchrone Reduction auf Global Memory ausführen, was in komplexen Backward-Kerneln nützlich ist
- Auch bei TMA war etwas Reverse Engineering nötig, um die Swizzling-Modi zu verstehen, aber es war weniger schmerzhaft als bei WGMMA
Occupancy verbirgt Kosten
- Occupancy bezeichnet in CUDA die Zahl der Threads, die gleichzeitig auf derselben Ausführungshardware eingeplant sind
- Der Warp-Scheduler eines SM-Quadranten versucht in jedem Zyklus, einer Warp eine Instruktion zuzuweisen, die dafür bereit ist
- Die H100 ist in mancher Hinsicht weniger von Occupancy abhängig als frühere Generationen
- Dank asynchroner Funktionen kann schon ein einzelner Instruction-Stream gleichzeitig Memory-Fetch, Matrixmultiplikation, Shared-Memory-Reduction und Register-Arithmetik auslasten
- Dennoch ist Occupancy sehr nützlich, um Fehler und Synchronisationskosten zu verbergen
- Eine perfekt entworfene Pipeline kann auch ohne zusätzliche Occupancy schnell sein
- In der Praxis wirkte es jedoch so, als seien NVIDIA-GPUs mit Blick auf Occupancy entworfen worden
- Da es viele Synchronisationspunkte und Fehlermöglichkeiten gibt, verbessert höhere Occupancy oft die tatsächlich erreichte Hardware-Auslastung
- Auf der H100 ist Occupancy hilfreich, auf der A100 und der RTX 4090 offenbar jeweils noch wichtiger
- Als möglicher Grund wird genannt, dass diese GPUs stärker auf synchronen Instruction-Dispatch angewiesen sind als die H100
ThunderKittens: ein kleines DSL in CUDA
- ThunderKittens ist ein eingebettetes CUDA-DSL, das entwickelt wurde, um auf der H100 schnellere Kernel einfacher schreiben zu können
- Ursprünglich entstand es für den internen Einsatz im Labor und wurde später veröffentlicht
- Der Name wurde gewählt, weil Kätzchen niedlich sind und weil es Spaß mache, im Code
kittens::zu tippen - ThunderKittens verfolgt das Ziel der Einfachheit und bietet vier templatisierte Typen
- Register-Tiles: 2D-Tensoren im Register-File
- Register-Vektoren: 1D-Tensoren im Register-File
- Shared-Tiles: 2D-Tensoren im Shared Memory
- Shared-Vektoren: 1D-Tensoren im Shared Memory
- Tiles werden über Höhe, Breite und Layout parametrisiert
- Register-Vektoren werden über Länge und Layout parametrisiert, Shared-Vektoren nur über die Länge
- Shared-Vektoren haben in der Regel keine Bank Conflicts
- Die bereitgestellten Operationen manipulieren Tiles und Vektoren auf Warp-Ebene oder auf Ebene kooperierender Warp-Gruppen
- Initializer: etwa das Nullsetzen eines Shared-Vektors
- Unary Ops: etwa
exp - Binary Ops: etwa
mul - Zeilen-/Spalten-Operationen: etwa
row_sum
- Da ThunderKittens direkt in CUDA eingebettet ist, scheitert die Abstraktion laut Beschreibung im Unterschied zu Bibliotheken wie Triton „gracefully“
- Wenn eine Funktion fehlt, lässt sie sich in der gewünschten Weise erweitern
FlashAttention-Beispiel und Leistung
- Als Beispiel für ThunderKittens wird ein einfacher Forward-FlashAttention-Kernel für die RTX 4090 gezeigt
- Er behandelt nur
headdim=64 nmuss ein Vielfaches von 256 sein- Er umfasst etwa 60 Zeilen CUDA-Code
- Die Hardware-Auslastung liegt bei 75 %
- Der Großteil der Komplexität steckt eher im Algorithmus als in Swizzling-Mustern oder Register-Layouts
- Er behandelt nur
- Auch der Forward-Pass von FlashAttention-2 für die H100 wurde mit ThunderKittens geschrieben
- ThunderKittens kapselt dabei die Komplexität von TMA, WGMMA, Swizzling-Modi und Deskriptoren
- Der Kernel ist etwa 100 Zeilen lang
- Auf der H100 ist er etwa 30 % schneller als FlashAttention-2
- ThunderKittens wird als eine Art „mini-pytorch“ für GPUs beschrieben, das Layouts und Instruktionen kapselt und Primitive bereitstellt
- Ebenfalls veröffentlicht werden ein Kernel für Based Linear Attention und weitere Kernel für andere Architekturen, die noch folgen sollen
- Der Based-Linear-Attention-Kernel läuft mit 215 TFLOPs
- Rechnet man den Recompute des Algorithmus ein, liegt er über 300 TFLOPs
- Linear Attention ist theoretisch effizienter, war auf realer Hardware historisch aber deutlich weniger effizient
- Dieses Ergebnis könnte den Einsatzbereich von Anwendungen mit hohem Durchsatz erweitern
Denken in Tiles
- Dass ThunderKittens gut funktioniert, liegt nach dieser Sichtweise gerade daran, dass es nicht versucht, alles abzudecken
- CUDA ist deutlich ausdrucksstärker als ThunderKittens
- ThunderKittens ist ein kleines, einfaches DSL
- Die zentrale Abstraktion ist das kleine Tile, was gut zur Richtung von AI und Hardware passt
- ThunderKittens unterstützt keine Dimensionen kleiner als 16
- Auch die Hardware scheint kein besonderes Interesse an so kleinen Dimensionen zu haben
- Sinngemäß wird gefragt: Wenn eine Matrixmultiplikation kleiner als 16x16 ist, kann man dann noch sicher sein, dass es überhaupt AI ist?
- Die aus der CPU-Welt stammende Sicht auf ein 32-Bit-Wort als Register passt nach dieser Auffassung nicht zu AI-Hardware
- Das 1024-Bit-Vektorregister von CUDA wird als Schritt in die richtige Richtung gesehen
- Ein Register enthält hier die Daten eines 16x16-Tiles
- Da AI weiterhin stark von Matrixmultiplikation, Reduction und Reshape geprägt ist, passt die Tile-Abstraktion sowohl zur AI als auch zur Hardware
- Künftig sollten AI-Ideen so neu geordnet werden, dass sie sich gut auf Hardware abbilden lassen
- Der recurrent state sollte groß genug sein, um in einen SM zu passen
- Die Compute-Dichte darf nicht unter dem von der Hardware geforderten Niveau liegen
- Die auf Hardware gewonnenen Erkenntnisse an AI-Design zurückzukoppeln, wird als wichtiger künftiger Weg gesehen
AMD-Unterstützung geplant
- Unterstützung für AMD-Hardware in ThunderKittens soll bald erscheinen
1 Kommentare
Hacker-News-Kommentare
Die Frage „Wenn die Matrixmultiplikation kleiner als 16x16 ist, bist du dann wirklich sicher, dass es AI ist?“ ist interessant.
Die Anforderungen an AI-Hardware werden immer klarer. GPUs wurden ursprünglich für einen völlig anderen Zweck entwickelt, wurden aber für AI genutzt, weil ihre Matrixmultiplikations-Hardware gut war, und eine „AI GPU“ könnte einige Funktionen weglassen, die in einer echten GPU vorhanden sind.
Auch bei der Zahlendarstellung gibt es einen Trend zu kürzeren Formaten wie 16-Bit-Gleitkommazahlen, 8 Bit, 2 Bit und 1 Bit, und irgendwann wird sich ein sinnvoller Punkt einpendeln. Dieser Beitrag zeigt, dass Hardware, die 16x16-Tiles bevorzugt, durchaus plausibel ist. Irgendjemand schreibt so etwas wahrscheinlich schon in VHDL oder wird es bald tun.
Am Ende scheint es wahrscheinlich, dass einfachere, weniger universelle und billigere Geräte erscheinen werden, die nur „AI“-Berechnungen möglichst ohne unnötigen Hardware-Ballast ausführen
Nvidia arbeitet vermutlich ebenfalls daran, aber geschäftlich könnte es die bessere Entscheidung sein, an einem Gerät festzuhalten, das Gaming/Entertainment/Krypto/AI bündelt, also an der Form einer Grafikkarte
[1] https://github.com/hollance/neural-engine/blob/master/docs/a...
Das erinnert an die Zeit, als Naveen Raos Nervana einen Nvidia-Maxwell-Treiber baute, der schneller war als Nvidias eigener Treiber. Nicht jeder Doku-Fehler bei einem schnell wachsenden Produkt ist eine Wettbewerbsmaßnahme, aber wenn man bedenkt, dass Forschende lange gebraucht haben, um wgmma per Reverse Engineering zu verstehen, und dazu noch die politische Lage zwischen den USA und China rund um den H100 kommt, wirkt es so, als würde Nvidia alte Methoden nutzen, um seinen Burggraben zu verteidigen.
Deshalb sollte man sich nicht zu sehr in die Besonderheiten des H100 verbeißen, sondern berücksichtigen, dass zur Frage „Welche Hardware will AI?“ auch die kommerzielle Lage gehört
https://www.amd.com/en/products/accelerators/alveo/v80.html
XDNA Architecture
https://www.amd.com/en/technologies/xdna.html
Die Passage „NVIDIAs Lügen. Eine extrem irreführende Darstellung des tatsächlichen 128b-swizzled-wgmma-Layouts. Wegen dieses Diagramms habe ich drei unwiederbringliche Wochen meines Lebens verloren, also stelle ich sie öffentlich bloß“ ist eindrucksvoll.
Ich frage mich, ob es Leute überrascht, dass ein gewaltiger Teil der Fortschritte bei AI in Ingenieursarbeit wie der Optimierung von Matrixmultiplikationen steckt und dass ein erheblicher Teil dieser Ingenieursarbeit im Reverse Engineering von NVIDIA-Chips besteht
Warp-Scheduler, vier Quadranten, Tensor Memory Accelerator, unswizzled wgmma layout…
Die Grenze zwischen GPU-Terminologie und Star-Trek-artigem Technobabble wird immer unschärfer
Beim Lesen anderer Beiträge hatte ich diesen Gedanken auch schon manchmal. Ich frage mich, wie das auf jemanden wirkt, der hier einen Link zu einem Artikel bekommt und ihn liest. Es fühlt sich wahrscheinlich an, als würde man auf eine Trek-Nerd-Veranstaltung geraten, auf der über Warp-Kerne diskutiert wird
Um den Stromverbrauch bei der AI-Inferenz zu senken und die Geschwindigkeit zu erhöhen, scheint ein Wechsel zu analogen Approximationsschaltungen am sinnvollsten zu sein.
Man braucht nicht unbedingt perfekte Gleitkomma-Multiplikation und -Addition, sondern lediglich eine Vorrichtung, die zwei Eingangsspannungen annimmt und eine Ausgangsspannung liefert, die dem Multiplikationsergebnis hinreichend nahekommt.
Ein großer Vorteil ist, dass man float16 statt über 16 Leitungen durch die Spannung auf nur einer Leitung darstellen würde. Theoretisch könnte sogar eine deutlich höhere Präzision als bei float32 möglich sein. Außerdem ließen sich Werte direkt verbinden, statt sie erst in die arithmetisch-logische Einheit zu laden, sodass Einsparungen bei Die-Fläche und Energie potenziell mehrere Größenordnungen erreichen könnten.
Zum Beispiel könnte man akzeptieren, dass sich eines von einer Million Ausgabebits umdreht, wenn sich dadurch das Verhältnis von Leistung zu Stromverbrauch verbessert. Bei float32 wäre das schwierig, weil schon ein einzelner Unendlichkeitswert alles ruinieren kann, aber bei int8 könnte man es vielleicht verkraften, wenn statt 0 gelegentlich 128 herauskommt.
[1] Ich weiß nicht genau, ob die Matrix-Gleitkommaeinheiten des H100 tatsächlich IEEE 754 einhalten.
Biologische neuronale Netze sind nicht annähernd so voll verbunden wie typische künstliche neuronale Netze; die Ein-/Ausgangs-Konnektivität von Neuronen liegt unter 10 und ist damit sehr lokal. In der Biologie gibt es, soweit wir wissen, auch kein Backpropagation, stattdessen aber Feedback und Rekurrenz.
Es könnte unterstützende Zellen oder Prozesse geben, die für die Funktion des zentralen Nervensystems essenziell sind und die wir noch nicht kennen. Selbst auf hoher Ebene könnte es eine erhebliche Menge „hartkodierter“ Konnektivität geben, und ein Teil davon ist bereits bekannt. Beispielsweise sind die auditiven Neuronen im Ohr verschaltet, und zur Bestimmung der Schallrichtung geschieht dort etwas, das einer Faltung ähnelt. Das ist kein emergentes Phänomen, sondern eine Funktion, die auch ohne Training möglich ist.
Das Leben hat das über Milliarden Jahre und eine ähnlich große Zahl von Generationen herausgefunden, daher ist es nicht überraschend. Theoretisch wäre das vielleicht auch in Software möglich, aber wenn man die über 1 Billion Neuronen eines Primaten-/Menschengehirns betrachtet, ist das selbst auf heutigen Maschinen mit Tausenden Kernen extrem schwierig. Auch die „Cloud“ würde die dafür nötige Konnektivität und Latenz nicht erfüllen.
Es wäre cool, wenn sich mit so einem Ansatz erfolgreich etwas auf dem Niveau von Würmern oder Insekten modellieren ließe.
Dieser Artikel hat die Freude wieder aufleben lassen, die ich im Kurs CS 149 Parallel Programming empfunden habe.
Der Schreibstil dieses Artikels ist wirklich beeindruckend, und ich freue mich darauf, das auf AMD MI300x zu sehen. Wenn jemand möchte, dass ich etwas Zeit auf meiner Hardware investiere, sagt Bescheid.
Mich interessiert, wie gut sie in der Praxis wirklich funktioniert, ob es besser wäre, noch etwas zu sparen und statt der 7900 XT die XTX zu kaufen, und wie stark sich weniger VRAM auf die Nutzbarkeit im Alltag auswirkt.
Leser sollten nicht extra auf knowyourmeme.com nachschauen müssen, um zu verstehen, was die Autoren sagen wollen. Ich weiß nicht einmal, was dieser Titel bedeuten soll, und finde, damit verfehlt er sein Ziel deutlich.
Ich frage mich, wo man anfangen sollte und welcher Roadmap man folgen müsste, um solche Artikel wirklich vollständig zu verstehen.
Danach sollte man selbst einmal einen CUDA-Kernel schreiben, der eine Vektor-Matrix-Multiplikation ausführt. Mit pycuda kann man sich auf den Kernel konzentrieren und den Rest in Python schreiben. Man kann ChatGPT sagen, dass man selbst eine Implementierung bauen möchte, die einen Vektor mit 4000 Elementen und eine 4000x12000-Matrix multipliziert, und sich den gesamten Prozess erklären lassen.
Zum Mieten von GPUs ist Runpod gut; dort gibt es inzwischen alles von günstigen GPUs bis zum H100. Für den Anfang reicht ein günstigeres Modell.
Ich habe zwei Monate damit verbracht, mit Spiral Matrixmultiplikations-Kernel zu implementieren und zu optimieren.
Das Diagramm im GitHub-README (https://github.com/HazyResearch/ThunderKittens/blob/main/att...) ist viel zu unruhig. Sind solche Wellen-Balkendiagramme überhaupt legal? :P
[1]: https://matplotlib.org/stable/gallery/showcase/xkcd.html#sph...
Der Name ThunderKittens ist großartig. Ich würde gern sehen, wie ThunderKittens sich an FlashAttention-Backpropagation wagt, die noch einmal eine Größenordnung schwieriger ist als der Forward-Pass.
causal: https://github.com/HazyResearch/ThunderKittens/blob/main/exa...
non-causal: https://github.com/HazyResearch/ThunderKittens/blob/main/exa...
Ist das nicht die Art von Forschung, die Teams, die heute NPUs bauen, bereits betreiben? Zum Beispiel kann der Groq-Chip seine aktuelle Leistung liefern, weil er eine KI-spezifische Architektur verwendet. Im Consumer-Bereich ist auch Apple Silicon ziemlich leistungsfähig.
Ich arbeite nicht in diesem Feld, aber es scheint mir Grenzen zu geben, wenn man sich nur auf General-Purpose-Prozessoren stützt, die über vergleichsweise langsame Pfade kommunizieren. Es wirkt sinnvoller, das Design auf Hardware-Ebene neu zu denken und letztlich die Preise im Consumer-Markt zu senken.
Wenn man für ein paar hundert Dollar eine Nvidia-GPU oder für 900 Dollar ein Gaming-Notebook mit einer 4050 und 6 GB VRAM kaufen kann, ist es schwer, CPU-basierte KI als leistungsfähig zu bezeichnen.
Ich habe es bei der Arbeit auch ohne GPU auf CPU-Basis versucht, aber abgesehen davon, kleine Modelle zu verwenden und zu warten, war es nicht wirklich praktikabel. Am Ende habe ich dann doch einen GPU-Rechner angefordert.
„Technisch möglich“ und „in der Praxis gut nutzbar“ sind nicht dasselbe. Nvidia ließ sich wirklich gut nutzen, während CPU schmerzhaft und frustrierend war.