Ollama auf AMD GPU mit ROCm & Vulkan optimieren — Der komplette Guide


Warum das überhaupt ein Problem ist

Du hast eine AMD Radeon RX 7900 XT oder W7800 im Rechner — 24 GB VRAM für das Preis-Leistungs-Verhältnis, das NVIDIA nicht bieten kann. Und Ollama? Läuft auf der CPU mit 10 tokens/s. Die GPU ist komplett untätig.

Das war ich letztes Jahr auch. Jetzt läuft Qwen3.6:35B mit 71 tok/s — ein Faktor von 7x, und das mit Hardware, die günstiger war als eine vergleichbare NVIDIA-Karte.

In diesem Guide zeige ich den kompletten Weg: vom leeren Rechner bis zu GPU-beschleunigtem Ollama auf AMD/ROCm/Linux. Kein theoretisches Gerede — alles aus der Praxis, mit konkreten Befehlen und Konfigurationsdateien.

Habe lange getestet und verschiedene Setups getestet. Da die aktuelle Ollama Version mit Rocm nicht zurecht kommt (hoffe der Bug wird bald geschlossen) habe ich alles auf Vulkan umgestellt. Entscheidend waren das System update (im Artikel weiter unten ausgeführt). Das hat den echten Kick gebracht und die Geschwindigkeit um über 30% gesteigert. Die Modell Parameter sind auch sehr wichtig für qwen Modelle. Ich bin mir sicher, das da noch einiges geht.

Der GPU-Beschleunigungsweg in Ollama

Ollama basiert auf llama.cpp, das drei GPU-Pfade für AMD bietet:

PfadTechnologieBeste für
ROCm/HIPAMDs native Compute-Plattform (wie CUDA)Offiziell unterstützte RDNA3/4 GPUs unter Linux
VulkanCross-Vendor Graphics APIBreite Hardware-Kompatibilität, auch Windows/APUs
CPUFallbackWenn beides nicht funktioniert 😴

Der entscheidende Unterschied: ROCm liefert die theoretisch beste Performance auf offiziell unterstützten GPUs. Vulkan bietet die breiteste Kompatibilität — und manchmal sogar 5-10% bessere Performance als ROCm, wenn der GPU-Architektur nicht offiziell unterstützt wird.

Schritt-für-Schritt: AMD GPU für Ollama einrichten

1. Treiber und Kernel vorbereiten

Der erste Schritt ist die Hardware-Bereitstellung auf System-Ebene:

sudo apt update && sudo apt upgrade -y
sudo apt install curl wget git build-essential tuned -y
sudo usermod -aG render,video $USER

Wichtig: Der render-Group-Eintrag ist entscheidend. Ohne ihn kann Ollama (oder genauer: llama.cpp) keine GPU-Geräte öffnen — auch wenn der Treiber installiert ist. Nach usermod musst du dich ab- und anmelden oder den Rechner neustarten.

2. Kernel boot parameters setzen

Hier wird es interessant. Der Linux-Kernel steuert, wie viel VRAM dem AMD-Treiber zur Verfügung steht:

sudo nano /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT hinzufügen:
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=off amdgpu.gttsize=262144 ttm.pages_limit=62914560"
  • amd_iommu=off — Deaktiviert IOMMU für AMD-Chipsätze. Achtung: Das ist ein Kompromiss: besser GPU-Zugriff, aber kein DMA-Schutz mehr. Auf einem Heim-PC OK, auf einem Server mit multi-user-Umgebung überlegen.
  • amdgpu.gttsize=262144 — Setzt die GPU-GTT (Graphics Translation Table) auf 256 GB. Das gibt dem Treiber genug Adressraum für große Modelle.
  • ttm.pages_limit=62914560 — Begrenzt die TTM (Translation Table Maps) Page-Zuteilung für konsistente Performance.
sudo update-grub && sudo reboot

3. ROCm installieren

cd /tmp
wget https://repo.radeon.com/amdgpu-install/latest/ubuntu/$(lsb_release -rs)/amdgpu-install_*.deb
sudo apt install ./amdgpu-install_*.deb
sudo amdgpu-install --usecase=rocm,hiplibsdk,graphics -y --no-dkms

Der --no-dkms-Flag ist wichtig — er verhindert Konflikte mit automatisch kompilierten Kernelmodulen. Nach der Installation:

sudo tuned-adm profile accelerator-performance
sudo swapoff -a  # Für Unified Memory Performance

4. Ollama konfigurieren

Jetzt kommt die eigentliche Magie: Die Ollama-Service-Konfiguration. Erstelle oder editiere /etc/systemd/system/ollama.service.d/override.conf:

[Service]
# ===== NETZWERK =====
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_KEEP_ALIVE=-1"

# ===== GPU / VULKAN (DER WICHTIGSTE TEIL) =====
Environment="OLLAMA_IGPU_ENABLE=1"
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_LLM_LIBRARY=vulkan"
Environment="OLLAMA_VULKAN=1"

# ===== SYSTEM =====
Environment="OLLAMA_MAX_LOADED_MODELS=2"
Environment="OLLAMA_NUM_THREADS=16"

Was passiert hier? OLLAMA_LLM_LIBRARY=vulkan weist Ollama an, den Vulkan Compute Shader Backend zu verwenden. OLLAMA_VULKAN=1 aktiviert das Feature explizit — ohne diese Variable erkennt Ollama die GPU nicht, egal was du konfigurierst. Das ist der häufigste Fehler: Die Variable fehlt.

5. Verifizieren und benchmarken

sudo systemctl daemon-reload
sudo systemctl restart ollama
ollama run qwen3.6:35b --verbose

Im --verbose-Output solltest du sehen:

inference compute library=Vulkan name="AMD Radeon RX 7900 XT" type=dGPU total="20 GiB" available="18.5 GiB"

Und nach einem Prompt:

eval rate: 71.10 tokens/s    ← Das ist der wichtige Wert!

Zum Vergleich: Ohne GPU-Konfiguration liegt dieser Wert bei ~10 tok/s — also 7x langsamer.

Modell-Parameter für AMD GPUs optimiert

Die Hardware ist bereit, jetzt die Modell-Parameter. Hier eine bewährte Konfiguration für Qwen3.6:35B auf AMD Vulkan:

{
  "id": "qwen3.6:35b",
  "name": "Qwen 3.6 35B - AMD Optimized",
  "contextWindow": 262144,
  "maxTokens": 81920,
  "reasoning": true,
  "params": {
    "num_ctx": 262144,
    "temperature": 0.68,
    "top_p": 0.9,
    "presence_penalty": 0.5,
    "repeat_penalty": 1.15,
    "min_p": 0.08,
    "thinking": true,
    "top_k": 20
  }
}

Die Parameter sind bewusst konservativ gesetzt: temperature 0.68 für gute Balance zwischen Kreativität und Präzision, repeat_penalty 1.15 verhindert auf AMD-Hardware besonders gut das typische „Auspicken“ von Skills nach längeren Generierungen — ein bekanntes Problem mit quantisierten Modellen auf Vulkan.

ROCm vs. Vulkan: Was ist besser?

Die große Frage: Sollst du jetzt ROCm oder Vulkan verwenden? Hier die ehrliche Antwort aus der Praxis und Community-Daten:

Vulkan wählen, wenn:

  • Deine GPU nicht offiziell in der ROCm-Supported-Liste steht (z.B. RX 6000 series)
  • Du auch unter Windows arbeiten willst
  • HSA_OVERRIDE_GFX_VERSION bei dir nicht stabil funktioniert
  • Du maximale Kompatibilität statt maximaler Performance willst

ROCm wählen, wenn:

  • Du eine offiziell unterstützte RDNA3/4 GPU hast (RX 7900 XT/XTH, W7800, W7900)
  • Unter Linux arbeitest und ROCm korrekt installiert ist
  • Die theoretisch beste Performance brauchst

Laut llama.cpp Benchmark-Daten gilt: Auf offiziell unterstützter AMD-Hardware ist ROCm oft 5-15% schneller bei prompt processing (pp512). Bei text generation (tg128) — der für interaktive Nutzung relevantere Metrik — ist der Unterschied marginal (<3%).

Häufige Fehler und wie man sie behebt

„Ollama läuft trotzdem auf CPU“

  • → Prüfe OLLAMA_VULKAN=1 in den Environment-Variablen. Ohne diese spezifische Variable erkennt Ollama Vulkan nicht, selbst wenn alle anderen Parameter stimmen.

„ROCm sagt ‚GPU not supported’“

  • → Du brauchst wahrscheinlich HSA_OVERRIDE_GFX_VERSION. Für RDNA2 (RX 6000): 10.3.0, für RX 7900 XT: 11.0.0. Aber: Overrides sind Hacks, kein Support — sie können zu Instabilität führen.

„Modell ‚pickst‘ nach längeren Generierungen aus“

  • → Das ist ein bekanntes Vulkan-Problem mit quantisierten Modellen. Erhöhe repeat_penalty auf 1.15+, setze min_p auf 0.08, und reduziere die Context-Window-Größe etwas (131072 statt 262144).

„IOMMU blockiert GPU-Zugriff“

  • → amd_iommu=off im Kernel boot parameter hilft. Aber: IOMMU schützt vor DMA-Angriffen — auf einem Heim-PC OK, nicht in multi-user-Umgebungen.

Fazit

AMD-GPUs sind für lokale LLMs ein absolutes Schnäppchen. Eine RX 7900 XT mit 20 GB VRAM kostet weniger als die Hälfte einer vergleichbaren NVIDIA-Karte und bietet oft mehr VRAM. Der Haken: Die Software-Unterstützung war lange eine Katastrophe.

Mit Vulkan als Standard-Pfad in Ollama hat sich das geändert. Der Weg von CPU-beschleunigtem Ollama (~10 tok/s) zu GPU-beschleunigter Inferenz (70+ tok/s) ist jetzt machbar — nicht einfach, aber mit dem richtigen Setup definitiv erreichbar.

Der Schlüssel: OLLAMA_VULKAN=1 + OLLAMA_LLM_LIBRARY=vulkan + korrekte Kernel-Bootparams. Alles andere ist Feinschliff.

Referenzen


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert