- MLC-LLM ermöglicht es, LLMs mit ROCm für AMD-GPUs zu kompilieren und bereitzustellen. Damit erreicht die Radeon RX 7900 XTX bei der Inferenz von Llama 2 7B/13B 80 % der Geschwindigkeit einer RTX 4090 und 94 % einer RTX 3090 Ti
- Alle drei verglichenen GPUs verfügen über 24 GB Speicher und eine ähnliche Bandbreite, sodass bei latenzsensibler LLM-Inferenz Speicherengpässe stärker ins Gewicht fallen als die FP16-Rechenleistung
- AMDs Rückstand lag weniger an der Hardware selbst als an mangelnder Software-Unterstützung und Optimierung; Investitionen in ROCm und Machine-Learning-Compilation wirken als Hebel, um die Kosten für die Unterstützung mehrerer Backends zu senken
- ROCm wird auf der Radeon 7900 XTX eingesetzt, Vulkan auf der SteamDeck-AMD-APU. Das zeigt, dass sich ein 4-bit-quantisiertes Llama-7B auch auf AMD-Geräten für Verbraucher ausführen lässt
- Die Ergebnisse basieren auf Single-Batch-Benchmarks. Da Attention-Optimierungen die Werte sowohl für AMD als auch für NVIDIA verändern können, sollten sie mit einer Fehlerspanne von 10 % interpretiert werden
AMD-GPU-LLM-Inferenz auf ROCm-Basis
- MLC-LLM ermöglicht es, LLMs mit ROCm auf AMD-GPUs zu kompilieren und bereitzustellen
- Die Leistung der Radeon RX 7900 XTX bei Llama 2 7B/13B liegt auf folgendem Niveau
- 80 % der Geschwindigkeit der NVIDIA GeForce RTX 4090
- 94 % der Geschwindigkeit der NVIDIA GeForce RTX 3090 Ti
- Neben ROCm wird auch Vulkan unterstützt, wodurch sich der Einsatzbereich für LLMs auf Geräte wie das SteamDeck mit AMD-APU erweitert
Hardwarevergleich und tatsächlicher Engpass
- Die AMD RX 7900 XTX liegt von den Spezifikationen her in einer mit der RTX 4090 und RTX 3090 Ti vergleichbaren Klasse
- Alle drei GPUs haben 24 GB Speicher, sodass Modelle gleicher Größe geladen werden können
- Auch die Speicherbandbreite ist ähnlich
- Die RTX 4090 hat eine 2-mal höhere FP16-Leistung als die RX 7900 XTX, die RTX 3090 Ti eine 1,3-mal höhere
- Latenzsensible LLM-Inferenz stößt meist auf einen Speicherengpass, daher ist der Unterschied bei der FP16-Leistung hier nicht der zentrale Flaschenhals
- Die RX 7900 XTX ist 40 % günstiger als die RTX 4090
- Die RTX 3090 Ti ist ein Produkt der vorherigen Generation, daher ist ein Preisvergleich schwieriger; sie dient als Referenzpunkt
Ursachen für AMDs Rückstand und MLCs Ansatz
- Der Grund, warum AMD zurücklag, war weniger die Hardware als vielmehr fehlende Software-Unterstützung und Optimierung für entsprechende Modelle
- Zwei Entwicklungen tragen dazu bei, die Lücke zu schließen
- AMD investiert in den ROCm-Stack und versucht aufzuholen
- Machine-Learning-Compilation senkt die Kosten für allgemeine Software-Unterstützung über mehrere Backends hinweg
- Machine-Learning-Compilation kompiliert ML-Workloads und automatisiert Optimierungen, statt für ROCm oder CUDA jeweils einzelne Kernel direkt zu schreiben
- MLC-LLM ist eine auf Machine-Learning-Compilation basierende Lösung zur Bereitstellung von LLMs, aufgebaut auf Apache TVM Unity
- Bietet einen Python-zentrierten Entwicklungsablauf
- Umfasst Transformationen des Rechengraphen, Layout- und Scheduling-Optimierungen für GPU-Kernel sowie native Deployment-APIs
- Unterstützt CUDA, Metal, ROCm, Vulkan und OpenCL
- Erweitert den Einsatzbereich von Server-GPUs bis hin zu mobilen Geräten wie iPhone und Android
Unterstützungswege für AMD-GPUs und APUs
- Für die Unterstützung von AMD-GPUs gibt es ROCm, OpenCL, Vulkan und WebGPU
- ROCm ist der Stack, den AMD zuletzt vorantreibt, und verfügt über Komponenten ähnlich wie CUDA
- Vulkan ist ein moderner Grafikstandard und wird auf GPU-Geräten breit unterstützt
- WebGPU ist ein moderner Webstandard, der Berechnungen im Webbrowser ermöglicht
- Es gibt nur wenige Machine-Learning-Softwarelösungen außerhalb von CUDA, und der Engineering-Aufwand, den Stack für jede neue Hardware oder jedes neue GPU-Programmiermodell zu replizieren, ist hoch
- MLC unterstützt mehrere Wege durch automatische Codegenerierung, ohne GPU-Kernel für jedes Backend neu zu schreiben
- Die tatsächliche Leistung hängt von der Qualität der Low-Level-GPU-Runtime und der Verfügbarkeit auf der jeweiligen Plattform ab
Implementierung der ROCm-Optimierung
- Für die Radeon 7900 XTX wurde ROCm gewählt, für die SteamDeck-APU Vulkan
- Der ROCm-Stack funktionierte direkt, und dank der Python-basierten Entwicklungspipeline von TVM Unity konnte innerhalb weniger Stunden eine optimierte Version hinzugefügt werden
- Für die ROCm-Unterstützung wurden bestehende Komponenten wiederverwendet
- Die gesamte MLC-Pipeline bestehender Targets wie CUDA und Metal
- Speicherplanung
- Operator-Fusion
- Der in TVM TensorIR geschriebene Optimierungsraum für allgemeine GPU-Kernel
- TVMs ROCm-Codegenerierungsfluss, der über LLVM Low-Level-ROCm-Kernel erzeugt
- Die gesamte MLC-Pipeline bestehender Targets wie CUDA und Metal
- Der erzeugte Code wird als Shared Library oder statische Bibliothek exportiert und kann über CLI, Python oder REST API aufgerufen werden
Bedingungen und Interpretation des Llama-2-Benchmarks
- Der Benchmark misst Llama 2 7B und 13B mit 4-bit-Quantisierung
- Die Decoding-Leistung wird gemessen, indem ein einzelnes Prompt-Token eingegeben und 512 Tokens generiert werden
- Alle Ergebnisse beziehen sich auf Single-Batch-Inferenz
- Mit dem Release ROCm 5.6 erreicht die Single-Batch-Inferenzleistung 80 % der Geschwindigkeit einer NVIDIA 4090
- Die CUDA-Baseline galt für diese Aufgabe damals als Stand der Technik
- Es gibt Spielraum für Verbesserungen wie bessere Attention-Optimierungen; wenn solche Optimierungen in MLC einfließen, können sich sowohl AMD- als auch NVIDIA-Werte verbessern
- Werden Optimierungen nur auf NVIDIA-Seite implementiert, kann sich der Abstand von 20 % auf 30 % vergrößern; daher wird empfohlen, die Zahlen mit einer Fehlerspanne von 10 % zu interpretieren
Bedingungen und Beispiele zum selbst Ausführen
- Für die Reproduktion der Benchmarks werden vorgefertigte Wheels und Ausführungsanleitungen bereitgestellt
- Voraussetzung ist eine AMD-GPU unter Linux, auf der ROCm 5.6 oder neuer läuft
- Für die Installation des vorgefertigten MLC-Pakets mit aktiviertem ROCm folgt man der MLC-LLM-Try-out-Dokumentation
- Das Python-Beispiel lädt mit
mlc_chat.ChatModuledas ModellLlama-2-7b-chat-hf-q4f16_1und misst die Leistung mitbenchmark_generate("Hi", generate_length=512) - MLC-LLM bietet auch eine interaktive CLI, unter ROCm muss die CLI jedoch aus dem Quellcode gebaut werden; dafür folgt man der CLI-Build-Dokumentation
Vulkan und Nutzung von Unified Memory auf dem SteamDeck
- Das SteamDeck dient als Beispiel für die breitere Klasse von AMD-Geräten mit AMD-APU
- Der unter ROCm nutzbare GPU-VRAM ist im BIOS auf 4 GB begrenzt
- Der Mesa-Vulkan-Treiber ermöglicht es Puffern über Unified Memory, diese Grenze zu überschreiten und bis zu 16 GB zu nutzen
- Diese Speicherkapazität reicht aus, um ein 4-bit-quantisiertes Llama-7B auszuführen
- Damit wird bestätigt, dass LLM-Unterstützung auch auf verschiedenen AMD-Verbrauchergeräten möglich ist
Künftige Arbeiten und Projektlinks
- Im Zeitalter generativer KI wird Hardwareverfügbarkeit zu einem wichtigen Thema
- Machine-Learning-Compilation kann dieses Problem entschärfen, indem sie leistungsfähiges, allgemeines Deployment über mehrere Hardware-Backends hinweg ermöglicht
- Die aktuelle Forschung konzentriert sich auf Consumer-GPUs
- Nach bisherigen Erfahrungen lassen sich MLC-Optimierungen für Consumer-GPUs oft auch auf Cloud-GPUs übertragen, etwa von der RTX 4090 auf A100 und A10g
- Künftige Arbeitsbereiche sind
- Batching und Multi-GPU-Unterstützung
- Integration in das PyTorch-Ökosystem
- Unterstützung für mehr Quantisierungsmethoden und Modellarchitekturen
- Ausweitung automatischer Optimierung auf weitere Hardware-Backends
- NVIDIA bleibt durch kontinuierliche Innovation weiterhin führend, und neue Hardware wie H100 sowie Softwareentwicklungen können das Umfeld verändern
- Informationen zu MLC-LLM gibt es auf der Projektseite, der Quellcode befindet sich im GitHub-Repository
Noch keine Kommentare.