1 Punkte von GN⁺ 2024-12-25 | Noch keine Kommentare. | Auf WhatsApp teilen
  • 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
  • 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.ChatModule das Modell Llama-2-7b-chat-hf-q4f16_1 und misst die Leistung mit benchmark_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.

Noch keine Kommentare.