Strix Halo AI Benchmarks
gfx1151Dense 27Bgemessen 16.08.2026

Qwen3.8-27B auf Strix Halo

Von 7,7 zu 30,9 tok/s — Faktor 4,0. Zwei unabhängige Hebel, keine Qualitätseinbußen. Der vollständige Optimierungsleitfaden für Dense-27B-Modelle auf AMD Strix Halo.

30,9
tok/s Code
mit MTP · IQ4_XS · ROCm
25,0
tok/s Prosa
mit MTP · IQ4_XS · ROCm
13,3
tok/s Basis
IQ4_XS · ohne MTP
4,0×
Faktor
gegen Q8_0-Ausgangslage

Ryzen AI MAX+ PRO 395 · Radeon 8060S (40 CUs) · LPDDR5X-8533 (128 GB) · ROCm gfx1151 · llama.cpp ≥ b10419

1

Die Reise: von 7,7 zu 30,9 tok/s

Zwei völlig unabhängige Optimierungen, die sich multiplizieren. Kein Hexenwerk, keine Treiber-Magie — nur Physik und kluge Algorithmen.
  1. 1

    Ausgangslage: Q8_0

    Vorher 7,7 tok/sNachher 7,7 tok/s+0 %

    Qwen3.8-27B als Q8_0-Quant — 28 GB Gewichte, volle Bandbreiten-Auslastung. Keine Optimierung möglich, die Hardware ist am Limit.

  2. 2

    Hebel 1: IQ4_XS-Quantisierung

    Vorher 7,7 tok/sNachher 13,3 tok/s+73 %

    Das Modell schrumpft von 28 auf 15 GB. Dadurch halbiert sich die Speicherlast pro Token — die GPU muss nur noch 15 GB statt 28 GB durch ihren Bus bewegen. Ergebnis: 92 % der theoretischen Bandbreiten-Grenze.

  3. 3

    Hebel 2: MTP Speculative Decoding

    Vorher 13,3 tok/sNachher 30,9 tok/s+132 %

    Qwen3.8 hat eine eingebaute Multi-Token-Prediction-Schicht. Der Rater generiert 3–4 Tokens in einem Durchgang, das Hauptmodell verifiziert sie. Bei Code liegt die Trefferquote bei ~73 % — 3,2 Tokens pro Verification-Durchgang. Mathematisch identisch zur normalen Generierung, keine Qualitätseinbuße.

Empfohlene Konfiguration (bash)

$QUANT=IQ4_XS BACKEND=rocm ./run.sh start

2

Die Bandbreiten-Wand

Warum ist ein Dense-27B-Modell der ungünstigste Fall für Strix Halo? Und warum sind MoE-Modelle so viel schneller?
QuantGrößeTheoretischGemessenAusnutzung
IQ4_XS14,6 GiB~14,5 t/s13,3 t/s92 %
UD-Q4_K_XL17,1 GiB~12,5 t/s12,0 t/s96 %
Q8_028,0 GiB~7,7 t/s7,7 t/s100 %

Dense 27B = Worst Case

Jedes einzelne Token muss alle 27 Mrd. Parameter durch den Speicherbus bewegen. Die GPU kann nicht schneller rechnen, als das RAM liefert. Die 7,7 tok/s bei Q8_0 sind physikalisch das absolute Maximum — kein Backend, kein Treiber, keine Optimierung kann das ändern.

MoE ändert die Rechnung

Zum Vergleich: qwen3-coder:30b (MoE, A3B) liefert 69 tok/s. Nur 3 Mrd. aktive Parameter pro Token. Die Datei ist zwar 23 GB groß, aber die GPU muss nur einen Bruchteil laden. Dateigröße ≠ Geschwindigkeit bei MoE.
3

IQ4_XS gegen Q8_0 — der Quanten-Kompromiss

Beide liegen auf der Platte, umschaltbar per QUANT=. Die Entscheidung ist einfach.

IQ4_XS — Standard

  • 15 GB — halbiert die Speicherlast gegenüber Q8_0
  • 13,3 tok/s Basis — 30,9 mit MTP
  • 1–2 % Perplexity-Verlust (Literaturwert) — im Alltag nicht wahrnehmbar
  • Tool-Calling: 10/10 Punkte im Hart-Test

Q8_0 — nur für Präzision

  • 28 GB — doppelt so groß, kein Platz für Nebenmodelle
  • 7,7 tok/s — 35–43 % langsamer als IQ4_XS
  • Gegenüber BF16 praktisch verlustfrei
  • MTP wirkt relativ stärker (2,61× gegen 2,32×)

Leistung je Quant und Backend

QuantBackendpp512 (t/s)tg128 (t/s)
IQ4_XSrocm434,613,38
IQ4_XSvulkan-perf385,213,32
IQ4_XSvulkan378,413,29
UD-Q4_K_XLrocm403,011,70
UD-Q4_K_XLvulkan-perf388,111,98
UD-Q4_K_XLvulkan372,511,98
Q8_0rocm388,47,72
Q8_0vulkan-perf345,77,74
Q8_0vulkan325,07,76

Das Backend ist bei der Generierung irrelevant — 13,29 gegen 13,38 sind unter 1 %. Beim Prompt-Processing gewinnt ROCm +15 % (compute-bound). Bei ≥ 8 parallelen Requests dreht sich das Bild.

Konfigurationswechsel (bash)

$# IQ4_XS (Standard)

$QUANT=IQ4_XS BACKEND=rocm ./run.sh start

$# Q8_0 (höchste Präzision)

$QUANT=Q8_0 BACKEND=rocm ./run.sh start

4

MTP Speculative Decoding — der eigentliche Hebel

Qwen3.8 hat eine eingebaute Multi-Token-Prediction-Schicht (mtp_num_hidden_layers: 1). Kein separates Draft-Modell, kein Tokenizer-Mismatch. Einfach --spec-type draft-mtp.

Wie es funktioniert: Der Rater generiert 3–4 Tokens in einem Durchgang. Das Hauptmodell verifiziert sie alle parallel. Bei Code ~73 % Trefferquote — die getroffenen Tokens sind geschenkt, kein zusätzlicher Speicherdurchlauf nötig. Das Ergebnis ist mathematisch identisch mit normaler Generierung.

ModellPrompt-ArtOhneMit MTPFaktor
IQ4_XSCode13,2930,852,32×
IQ4_XSProsa13,2825,021,88×
Q8_0Code7,6920,032,61×
Q8_0Prosa7,6914,341,86×

Code profitiert mehr

Strukturierte Texte (Einrückung, Klammern, Boilerplate) sind leichter zu raten. Bei Code 2,32×, bei Prosa 1,88×. Die Trefferquote liegt bei Code bei ~73 %, bei Prosa etwas tiefer.

Q8_0 profitiert relativ mehr

Auf Q8_0 wirkt MTP mit 2,61× stärker, weil pro Durchgang mehr Speicher bewegt wird. Das Einsparen von Durchgängen bringt hier mehr. Absolut bleibt IQ4_XS mit 30,9 tok/s vorn.
MTP aktivieren (bash)

$# Standard-Start mit MTP

$./run.sh start

$# Oder manuell im Container:

$llama-server --model Qwen3.8-27B-IQ4_XS.gguf \

$ --spec-default --spec-type draft-mtp \

$ --fa 1 --no-mmap --split-mode layer

5

Tool-Calling: llama-server gegen Ollama

Der Hart-Test mit 10 Fällen — derselbe Test wie im großen Modellvergleich. Das überraschende Ergebnis: der Stack entscheidet, nicht das Modell.
ModellQuantStackPunkteØ Antwortzeit
Qwen3.8-27BIQ4_XSllama-server10/104,2 s
DeepSeek V4 FlashIQ2_Mllama-server10/108,4 s
glm-4.7-flash—Ollama10/104,1 s
DeepSeek V4 FlashIQ2_MOllama8/1014,6 s

Qualitativ gleichauf

Zur ursprünglichen Frage „ist DeepSeek qualitativ besser“: bei gleichem Stack sind beide fehlerfrei. Qwen3.8 ist doppelt so schnell und braucht ein Sechstel des Speichers.

Einschränkungen

Der Test misst Tool-Call-Präzision, nicht Wissen, Reasoning oder lange Ketten. 10 Fälle trennen zwei fehlerfreie Modelle nicht. Thinking war bei beiden aus — mit aktivem Thinking könnte das Bild anders aussehen.
6

Qwen3.8 gegen DeepSeek V4 Flash

V4 Flash hat einen eigenen DSpark-Drafter (11 GB Zusatzdatei), der block-parallel rät. Die Erwartung: Überholspur. Die Realität: Qwen3.8 mit MTP ist schneller — bei einem Sechstel des Speicherbedarfs.
ModellVerfahrenCode (t/s)Prosa (t/s)SpeicherFaktor
Qwen3.8-27B IQ4_XSMTP30,8525,0215 GB2,32×
DeepSeek V4 Flash IQ2_MDSpark21,9115,6595 GB1,43×

Qwen3.8 gewinnt praktisch

30,9 gegen 21,9 tok/s — bei einem Sechstel des Speichers. Für die allermeisten Aufgaben reicht die Qualität von Qwen3.8 völlig aus. Der Preis für DeepSeek sind 95 GB plus 11 GB Drafter.

Warum DSpark schwächer wirkt

Bei MoE aktiviert jeder geratene Token andere Experten — die Verifikation eines 5er-Blocks kostet viel mehr. Dazu drückt das grobe IQ2_M-Quant die Trefferquote des bf16-Drafters. Und das Modell ist ohnehin schnell: 15,3 t/s ohne Speculative Decoding bei 95 GB — das ist die MoE-Effizienz.
DeepSeek-Profil starten (bash)

$PROFILE=ds4 ./run.sh start

$./spec-test.py ds4

7

KV-Cache: klein, aber fein

Qwen3.8 hat eine besondere Architektur: Nur 16 der 64 Layer sind echte Attention-Layer. Der Rest ist Gated DeltaNet mit konstantem State. Der Cache ist dadurch erstaunlich klein.
Kontextf16q8_0
32k~2,0 GiB~1,1 GiB
262k~16 GiB~8,5 GiB
Selbst der volle 262k-Kontext passt neben dem Modell locker in die 128 GB. KV-Cache auf q8_0 halbiert den Speicherbedarf ohne Nachteil.
KV-Cache-Optimierung (bash)

$# Empfohlen: q8_0 KV-Cache

$--cache-type k:q8_0 --cache-type v:q8_0

$# Für maximale Kontextlänge (262k) bei minimalem Speicher

$--ctx-size 262144 --cache-type k:q8_0 --cache-type v:q8_0

8

Fallstricke — was schiefgehen kann

Aus eigener Erfahrung dokumentiert. Die meisten Probleme sind bekannt und vermeidbar. Alle Fallstricke der Seite, nach Symptom sortiert: /fallstricke.
blockierend

KV-Cache q4_0/q4_1

Bei dieser Architektur bricht der Prefill um Faktor 20 ein (llama.cpp #27109). q8_0 ist sicher.

blockierend

Split-Mode: layer, nicht tensor

Mit MTP führt --split-mode tensor zu Lockups (#27122). layer ist stabil.

blockierend

-fa 1 und --no-mmap sind Pflicht

Ohne FlashAttention Abstürze, ohne --no-mmap massive Einbrüche. Diese Flags sind auf Strix Halo nicht optional.

wissenswert

Vision ist defekt

Auf AMD AI Max als defekt gemeldet (#27124). Der Textpfad läuft, Multimodalität wurde hier nicht verifiziert. Die mmproj-Datei liegt bereit, aber ungetestet.

tückisch

Thinking-Mode ist Default

Per Default ist reasoning_effort: xhigh. Bei knappem max_tokens kommt leerer Content zurück. Abschalten: {"enable_thinking": false} oder reasoning_effort: "none".

wissenswert

llama.cpp ≥ b10419

Das System-llama.cpp ist zu alt. Alles läuft über die kyuz0-Container (aktuell b10450). Wer selbst baut, muss ≥ b10419 ziehen.

9

Werkzeuge: Kurzbefehl und Live-Dashboard

Zur Messreihe gehören zwei Werkzeuge, die Betrieb und Überwachung vereinfachen.

ki — der Kurzbefehl

Ein einziger Befehl, der alles fragt: Modell, Backend, Speculative Decoding, Kontext und Aktion. Zeigt den fertigen Befehl an und startet ihn. Läuft schon ein Server, bietet er direkt den Monitor an. Kein Hänger wie llama-cockpit.
ki

monitor.py — Live-Dashboard

Öffnet sich automatisch nach dem Start. Zeigt live: Zustand (BEREIT/PREFILL/DECODE), Decode in t/s mit Verlaufskurve, Prefill mit Fortschrittsbalken, Draft-Trefferquote, Kontext- und GPU-Auslastung. Beenden mit q.
Zustand: DECODE | 28,4 tok/s | Ø 26,1 | Max 32,7
DateiZweck
cockpit.pyAuswahlmenü: Modell, Backend, Spec, Kontext, Aktion
monitor.pyLive-Dashboard: Prefill/Decode, Draft-Trefferquote, GPU
run.shllama-server im Container: start|stop|status|logs|shell
bench.shMatrix Quant × Backend → ERGEBNISSE.md
spec-test.pySpeculative Decoding mit/ohne; Profil als Argument
autorun.shwartet auf Download, startet dann bench.sh
Schnellstart (bash)

$# Ein Befehl für alles

$ki

$# Oder direkt starten

$./run.sh start

Alle Messungen auf Fedora 44 · Kernel 7.1.6 · ROCm gfx1151 · llama.cpp b10450 · LPDDR5X-8533 · Ryzen AI MAX+ PRO 395 · Radeon 8060S (40 CUs)
Quelle: QWEN38-STRIX-HALO.md · gemessen 16. August 2026