Flash Attention 2: Aktivieren (llama.cpp, Ollama, vLLM)
Flash Attention 2 (FA2) ist die Optimierung, die ein lokales LLM mit langem Kontext von unbrauchbar auf komfortabel verwandelt. Aktiviert über eine Umgebungsvariable in Ollama, über einen Flag in llama.cpp, standardmäßig in vLLM – vorausgesetzt, Ihre GPU unterstützt es wirklich. Dieser Guide zeigt, wie man es in den drei wichtigsten Runtimes aktiviert, den tatsächlichen Gewinn (KV-Cache-Speicher und Tokens/s) je nach Kontextgröße misst und die Fälle identifiziert, in denen es keinen Nutzen bringt.
#Warum Flash Attention 2
Die klassische Attention eines Transformers hat eine quadratische Speicherkomplexität in Abhängigkeit von der Kontextlänge. Eine Verdopplung der Kontextlänge vervierfacht den VRAM-Verbrauch der Attention. Bei 32.000 Tokens kann die Attention-Matrix allein bei einem 8B-Modell in FP16 mehr Speicher beanspruchen als die Modellgewichte.
Flash Attention, 2022 von Tri Dao eingeführt und 2023 zu FA2 weiterentwickelt, verändert das mathematische Ergebnis nicht: Es verändert die Art der Berechnung. Die Idee ist, die Attention direkt im SRAM der GPU blockweise (Tiling) zu berechnen, statt die vollständige Matrix im HBM abzulegen. Das Ergebnis ist bis auf Unterschiede durch die Rechengenauigkeit exakt identisch mit dem der naiven Attention-Berechnung.
Praktisch betrachtet bietet FA2 bei einem lokalen LLM im Inferenzmodus zwei Vorteile, die sich gegenseitig verstärken: Der für die Aufmerksamkeit reservierte Speicher wird von quadratisch auf fast linear in Bezug auf die Kontextgröße, was den KV-Cache erheblich reduziert, und der Durchsatz steigt bei langen Kontexten um 2 bis 4-fach, da kostspielige Speichereinheiten eliminiert werden.
#GPU- und Softwarevoraussetzungen
Ihr privates, kostenloses ChatGPT auf Ihrem Rechner in einer Stunde – mit LM Studio, Ollama, Open WebUI und Ihren Dokumenten, ganz ohne Cloud.
- Lebenslanger Online-Zugang
- PDF + Dateien
- Erstattung binnen 30 Tagen
Flash Attention 2 nutzt spezielle Matrixinstruktionen (Tensor Cores), die nur auf bestimmten GPU-Generationen vorhanden sind. Das ist das erste Kriterium, das Sie prüfen sollten, bevor Sie sich mit etwas anderem befassen.
- NVIDIA Ampere (RTX 3000, A100) und neuere Architekturen
- Vollständige und leistungsfähige FA2-Unterstützung. Das ist der optimale Bereich: Compute Capability 8.0+.
- NVIDIA Ada Lovelace (RTX 4000) und Blackwell (RTX 5000)
- Optimale native Unterstützung. Maximale Zugewinne auf RTX 4090 / 5090 dank Tensor-Cores der Hopper-Klasse.
- NVIDIA Turing (RTX 2000, T4)
- Teilweise Unterstützung und geringere Geschwindigkeit. FA2 funktioniert, profitiert aber nicht von den BF16-Instruktionen. Aktivieren Sie es und messen Sie: manchmal ohne Effekt, manchmal mit positivem Effekt.
- NVIDIA Pascal (GTX 1080 Ti, P40) und älter
- Nicht unterstützt. Es gibt keine Tensor Cores. Das Flag wird ohne Hinweis ignoriert oder verursacht bei der Ausführung einen Fehler.
- AMD RDNA 3/4 (RX 7000/9000)
- Unterstützung über ROCm mit der offiziellen Portierung von Flash Attention (composable_kernel). Auf der RX 7900 XTX und höher angesiedelten Karten liegt die Leistung nahe an der nativen Ausführung.
- Apple Silicon (M1 bis M4)
- Kein Flash Attention 2 im eigentlichen Sinne. Metal verfügt über eigene fusionierte Attention-Kernel. Die Laufzeitumgebungen (llama.cpp Metal, MLX) verwenden automatisch eine entsprechende Variante; Sie müssen nichts aktivieren.
#Flash Attention 2 in Ollama aktivieren
Seit Version 0.3 unterstützt Ollama Flash Attention über eine Umgebungsvariable. Historisch war die Funktion standardmäßig nicht aktiviert, da ältere Grafikkarten sie möglicherweise nicht unterstützen. Sie müssen sie selbst aktivieren.
Um es über systemd persistent zu machen (typischer Linux-Fall):
Unter Windows fügen Sie die Benutzerumgebungsvariable über Systemsteuerung > System > Umgebungsvariablen hinzu und starten anschließend Ollama neu. Unter macOS verwenden Sie launchctl setenv oder fügen die Variable in die rc-Datei Ihrer Shell ein.
Um zu überprüfen, ob FA2 aktiv ist, starten Sie ollama mit OLLAMA_DEBUG=1 und suchen Sie in den Logs beim Laden des Modells die Zeile flash_attention=true.
#Flash Attention 2 in llama.cpp aktivieren
llama.cpp bietet einen expliziten Schalter und ermöglicht damit mehr Kontrolle als Ollama: -fa (oder --flash-attn in der Langform). Er lässt sich sowohl mit llama-cli als auch mit llama-server verwenden.
Die Flags --cache-type-k und --cache-type-v quantisieren die Schlüssel bzw. die Werte des KV-Caches. q8_0 ist die verlässliche Wahl (nahezu kein Qualitätsverlust), q4_0 ist die aggressive Option. Beachten Sie, dass die Quantisierung des KV-Caches aktiviertes FA2 erfordert: Ohne -fa werden diese Flags abgelehnt.
#Flash Attention 2 in vLLM aktivieren
vLLM verwendet seit Version 0.2 standardmäßig Flash Attention 2 und wechselt auf Hopper (H100) und Blackwell zu FlashAttention-3, wenn dies möglich ist. In der Regel müssen Sie nichts aktivieren. Eingreifen müssen Sie nur, wenn Sie ein bestimmtes Backend erzwingen möchten, beispielsweise für einen Vergleich oder um einen Bug auf einer exotischen GPU zu umgehen.
Die verfügbaren Backends sind FLASH_ATTN (FA2), FLASHINFER (bei bestimmten Größen noch schneller, erfordert die Installation von flashinfer), XFORMERS (Fallback für Ampere und ältere Architekturen) und TORCH_SDPA (generischer Fallback). Auf neueren GPUs sind FLASH_ATTN oder FLASHINFER eine gute Wahl.
#Gemessener Gewinn nach Kontextgröße
Der Leistungsgewinn durch Flash Attention 2 hängt stark von der Kontextlänge ab. Bei kurzem Kontext ist er gering oder sogar negativ (Overhead durch Tiling). Bei langem Kontext entscheidet er darüber, ob das Modell überhaupt läuft. Hier sind repräsentative Größenordnungen für eine RTX 4090 mit 24 GB und Mistral Small 24B Q4_K_M.
- Kontext: 2k Tokens
- Ohne FA2: 40 Tok/s, 14,6 GB VRAM. Mit FA2: 41 Tok/s, 14,4 GB. Zugewinn: ~2 %. Bei dieser Größenordnung unnötig.
- Kontext mit 8k Tokens
- Ohne FA2: 36 Tokens/s, 16,2 GB. Mit FA2: 39 Tokens/s, 15,0 GB. Verbesserung: 8 % höhere Geschwindigkeit, 1,2 GB weniger Speicherbedarf.
- 16k-Token-Kontext
- Ohne FA2: 29 Tok/s, 18,8 GB. Mit FA2: 37 Tok/s, 16,0 GB. Verbesserung: +28 % Geschwindigkeit, –2,8 GB.
- 32k-Token-Kontext
- Ohne FA2: OOM (>24 GB). Mit FA2: 32 Tok/s, 18,6 GB. FA2 macht einen Kontext von 32k überhaupt erst nutzbar.
- Kontext von 64k Tokens (FA2 + KV q8_0)
- 30 tok/s, 21,5 GB. Ohne FA2 und ohne KV-Quantisierung: mit 24 GB unmöglich.
Bei Qwen 3.5 9B (einem kleineren Modell mit einer anderen Dimension der Attention-Köpfe) ist der Gewinn bei 32k bescheidener (+15 % Geschwindigkeit), weil die Attention einen geringeren Anteil am gesamten Rechenaufwand hat. Bei Qwen 3.8 27B, einem schwergewichtigeren Reasoning-Modell, ist der Gewinn bei 16k enorm (+45 %), da das Verhältnis von Attention zu Feedforward zugunsten von FA2 ausfällt.
#Fälle, in denen es nicht hilft (oder schadet)
- GPU Pascal / Maxwell
- GTX 1080 Ti, P40, Tesla M40, Titan X Maxwell. Keine kompatiblen Tensor-Cores. Das Flag wird in Ollama ignoriert und in neueren Versionen von llama.cpp abgelehnt. Kein Leistungsgewinn möglich — verwenden Sie xformers oder verzichten Sie auf eine solche Optimierung.
- Sehr kurze Inferenz (Chat 500 Tokens)
- Wenn Sie durchgehend kurze Antworten auf kurze Prompts generieren, verursacht FA2 einen Overhead von einigen Prozent, ohne einen Nutzen zu bringen. Das fällt vor allem bei kleinen Modellen mit 1B bis 3B auf.
- CPU allein
- FA2 ist eine GPU-Optimierung. Bei llama.cpp auf der CPU wird das Flag ignoriert. CPU-Optimierungen erfolgen über andere Wege (ARM SVE, AVX-512 usw.).
- Modelle mit nicht standardkonformer Sliding-Window-Attention
- Gemma 4 (globale/lokale Aufmerksamkeitsalternierung) und die Varianten Mistral mit rutschender Fenster: Je nach Runtime-Version kann FA2 auf einen Fallback zurückfallen. Prüfen Sie die Protokolle, manchmal unterstützt der Backend dies noch nicht.
- Apple Silicon
- Auf M1–M4 wird das Flag -fa von llama.cpp akzeptiert, die Implementierung läuft jedoch über Metal, das bereits eigene Optimierungen vornimmt. Der gemessene Leistungsgewinn ist marginal, da die Attention-Berechnung in Metal bereits nativ fusioniert ist.
#FA2 vs xformers vs PyTorch SDPA
Beim Lesen der Dokumentation der Runtimes werden Ihnen diese drei Namen begegnen. Sie erfüllen nicht genau dieselbe Funktion und sind unterschiedlich alt.
- xformers (Meta, 2021)
- Bibliothek effizienter Kernel einschließlich memory_efficient_attention. Vorläufer von Flash Attention. Wird weiterhin beim Fine-Tuning (Unsloth, Axolotl) verwendet, weil sie mehr Attention-Varianten unterstützt. Bei der Inferenz auf Ampere+ langsamer als FA2.
- Flash Attention 2 (Tri Dao, 2023)
- Der Nachfolger von Flash Attention 1. Speziell für Inferenz und Training entwickelt, mit handgeschriebenen CUDA-Kernels; am schnellsten auf Ampere und Hopper. 2026 ein De-facto-Standard.
- PyTorch SDPA
- torch.nn.functional.scaled_dot_product_attention. Seit PyTorch 2.0 wird automatisch auf Flash Attention 2 umgeleitet, wenn möglich, sonst auf xformers, sonst auf die naive Implementierung. Dies ist das, was vLLM und viele Runtime-Systeme intern verwenden.
- FlashAttention-3 (Tri Dao + NVIDIA, 2024)
- Speziell für Hopper-GPUs (H100) und Blackwell. Nutzt FP8 und Warp-spezialisierte Asymmetrie. Wenn Sie eine H100 verwenden, übertrifft FA3 FA2. Auf RTX-Karten für Endverbraucher bleibt FA2 die Zielversion.
#Fehlerbehebung
- Das Flag scheint ignoriert zu werden (kein Leistungsgewinn)
- Prüfen Sie die Version der Laufzeitumgebung (Ollama ≥ 0.3, aktueller Commit von llama.cpp). Aktivieren Sie die ausführliche Protokollierung: OLLAMA_DEBUG=1 oder llama-cli --verbose. Suchen Sie nach flash_attention=true oder flash_attn=enabled.
- Fehler „unsupported head dimension“
- Einige Head-Dimensionen (96, 192) werden nicht von allen FA2-Versionen unterstützt. Aktualisieren Sie die Laufzeitumgebung oder wechseln Sie zurück zum Standard-Backend. Das betrifft vor allem exotische Modelle.
- Sichtbarer Qualitätsverlust
- Sehr selten mit FA2 allein (mathematisch äquivalentes Ergebnis). Wenn Sie eine Qualitätsverschlechterung bemerken, liegt das wahrscheinlich an der Quantisierung des KV-Caches, nicht an FA2. Deaktivieren Sie --cache-type-k/v und prüfen Sie, ob das Problem weiterhin besteht.
- OOM trotz aktiviertem FA2
- FA2 reduziert den Speicherbedarf der Attention, nicht den der Modellgewichte. Wenn Ihr 30B-Modell in Q5 nicht in 16 GB VRAM passt, hilft FA2 nicht weiter. Gehen Sie bei der Quantisierung eine Stufe herunter (Q4_K_M) oder verwenden Sie ein kleineres Modell.
- vLLM greift auf xformers statt auf FA2 zurück
- Prüfen Sie die Installation: pip install flash-attn --no-build-isolation. Auf Turing bevorzugt vLLM xformers, weil FA2 dort weniger gut optimiert ist. Das ist das erwartete Verhalten.
#Weiterführende Informationen
Flash Attention 2 ist die erste Maßnahme, um den nutzbaren Kontext bei einer gegebenen VRAM-Kapazität zu erweitern. Wenn Sie bei der Optimierung weitergehen möchten, bieten diese verwandten Leitfäden eine gute Ergänzung:
- GGUF-Quantisierung 2026: Q4_K_M vs Q5_K_M vs Q6_K
- Die naheliegende Ergänzung: die Modellgröße reduzieren, um VRAM freizugeben, und dies mit FA2 kombinieren, um längere Kontexte zu ermöglichen.
- llama.cpp mit CUDA kompilieren
- Unverzichtbar, wenn Sie die neueste Version von FA2 in llama.cpp nutzen und saubere Benchmarks durchführen möchten.
- vLLM in der Produktion einsetzen
- FA2 entfaltet sein volles Potenzial auf einem Server, der mehrere Anfragen gebündelt verarbeitet: Dort steigt der Gewinn enorm.
Wie aktiviert man Flash Attention in llama.cpp und LM Studio im Jahr 2026?+
Macht Flash Attention 3 einen Unterschied für ein lokales LLM?+
Warum ist Flash Attention auf meiner AMD-GPU langsamer?+
Kann ich Flash Attention mit einem quantisierten KV-Cache kombinieren?+
Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.