AI Atlas
İleri · ~2 dk okuma #flash-attention #kv-cache #inference

Flash Attention

Belleği verimli kullanan attention ve -fa / OLLAMA_FLASH_ATTENTION

Attention'ı, N×N skor matrisini GPU belleğine hiç yazmadan, küçük bloklar hâlinde hesaplayan algoritma. Sonuç aynı, bellek trafiği çok daha az. Local inference'ta KV cache quantization'ın ön koşulu.

AYNI SONUÇ, ÇOK DAHA AZ BELLEK TRAFİĞİSTANDART ATTENTIONHBMN×N skor matrisitamamı belleğeyazılıp okunurbellek ∝ N²FLASH ATTENTIONblok · SRAMmatris hiçoluşturulmazkesin sonuçKV CACHE TİPİ (FA AÇIKKEN)f16defaultq8_0~1/2q4_0~1/4oranlar: Ollama FAQ
Tanım

Standart attention, her token çifti için bir skor hesaplar ve bu N×N matrisi GPU'nun ana belleğine (HBM) yazıp geri okur. Bağlam uzadıkça hem bellek hem süre karesel büyür.

FlashAttention (Dao ve ark., 2022, arXiv 2205.14135) aynı sonucu yaklaşıklık olmadan üretir, ama hesabı çip üstündeki küçük ve hızlı belleğe (SRAM) sığan bloklara böler (tiling). Tam matris hiç oluşturulmaz; HBM'e yapılan okuma/yazma sayısı düşer. Devamı: FlashAttention-2 (2023, daha iyi iş bölümü, ~2× hız) ve FlashAttention-3 (2024, Hopper GPU'lar ve FP8).

Local motorlarda (Ekim 2026 itibarıyla):

MotorAyarDefault
llama.cpp-fa / --flash-attn (on, off, auto)auto
OllamaOLLAMA_FLASH_ATTENTION=1 / =0Backend ve cihaz destekliyorsa otomatik
llama.cpp KV cache-ctk / -ctv (--cache-type-k/-v)f16
Ollama KV cacheOLLAMA_KV_CACHE_TYPEf16

llama.cpp burada Dao'nun kütüphanesini değil, ggml içindeki kendi FLASH_ATTN_EXT kernel'ini kullanır.

KV cache bağımlılığı: llama.cpp'de quantize edilmiş V cache Flash Attention olmadan çalışmaz. -fa auto iken llama.cpp FA'yı kendisi açar; -fa off iken "quantized V cache requires flash_attn" hatasıyla model yüklenmez. Ollama dokümanı da KV cache quantization'ını "Flash Attention açıkken" çalışan bir özellik olarak tanımlar.

Benzetme

Büyük bir tabloyu toplamak için iki yol. Birincisi: tüm ara sonuçları depodaki (HBM) dev bir kâğıda yaz, sonra geri gidip oku. İkincisi: masandaki (SRAM) küçük bir not defterinde parça parça topla, depoya sadece sonucu götür. Sonuç aynı; ikincisinde depoya çok daha az gidip gelirsin.

Gerçek dünyadan örnek

16 GB VRAM'li bir GPU'da 8B Q4 model, 32K bağlamla çalışacak. f16 KV cache tek başına ~4 GB tutuyor (bkz. num_ctx).

Ollama dokümanındaki oranlarla KV cache tipleri:

OLLAMA_KV_CACHE_TYPEBellek (f16'ya göre)Kalite
f16 (default)1×Tam hassasiyet
q8_0~1/2Çok küçük kayıp, çoğu zaman fark edilmez
q4_0~1/4Küçük-orta kayıp, uzun bağlamda belirginleşebilir

q8_0 ile cache ~2 GB'a iner; aynı VRAM'e iki kat bağlam sığar.

`` OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0 ollama serve ``

Kod örnekleri
llama.cpp · Flash Attention + q8_0 KV cache bash
# Yeni kurulum (llama.app): llama serve
# Eski binary adıyla: llama-server
llama serve -hf ggml-org/Qwen3.5-0.8B-GGUF \
  -c 32768 \
  -fa on \
  -ctk q8_0 \
  -ctv q8_0
# -fa off + quantize V cache = model yüklenmez
Ollama · sunucu genelinde FA ve KV cache tipi bash
# macOS uygulaması
launchctl setenv OLLAMA_FLASH_ATTENTION "1"
launchctl setenv OLLAMA_KV_CACHE_TYPE "q8_0"
# Ollama'yı yeniden başlat. Bu ayar global: tüm modeller q8_0 cache kullanır.
Ne zaman kullan
  • Uzun bağlam (16K+) — attention'ın bellek ve süre maliyeti en çok burada hissedilir
  • KV cache'i quantize etmek istiyorsan — q8_0/q4_0 V cache için şart
  • VRAM'e sığmayan bir num_ctx'i sığdırmaya çalışırken
  • Desteklenen bir GPU'da — çoğu durumda auto zaten açar, elle bir şey yapmana gerek kalmaz
Ne zaman kullanma
  • Backend ya da model desteklemiyorsa — örneğin llama.cpp Grok mimarisinde FA'yı zorla kapatır
  • Bir sürümde FA ile hatalı ya da yavaş çıktı görüyorsan — -fa off / OLLAMA_FLASH_ATTENTION=0 ile karşılaştır
  • Kısa prompt'lu basit işler — kazanç küçük kalır
Sık yapılan hatalar

FA'yı kapatıp cache'i quantize etmek

llama.cpp'de -fa off -ctv q8_0 kombinasyonu 'quantized V cache requires flash_attn to be enabled' hatasıyla model yüklemeyi durdurur. Ollama'da OLLAMA_FLASH_ATTENTION=0 ile birlikte OLLAMA_KV_CACHE_TYPE=q8_0 kullanmak da aynı sorunu çağırır.

Global KV cache ayarı

OLLAMA_KV_CACHE_TYPE tüm modellere uygulanır. Ollama dokümanına göre GQA oranı yüksek modeller (örn. Qwen2) cache quantization'ından daha çok etkilenebilir. Kritik bir model kalite kaybediyorsa f16'ya dön.

'Flash Attention ağırlıkları küçültür' sanmak

FA model ağırlıklarına dokunmaz; attention hesabının bellek trafiğini azaltır. Ağırlıkları küçültmek quantization işi, cache'i küçültmek ise KV cache tipi ayarının işi.