Dikkat mekanizmasını IO-bound belleğe göre yeniden düzenleyerek hafıza kullanımını azaltan ve büyük bağlam pencerelerini verimli işlemeyi mümkün kılan GPU kerneli optimizasyonu.

Flash Attention, Transformer modellerinin dikkat mekanizmasını GPU yüksek bant genişliği belleğine (HBM - High Bandwidth Memory) erişimleri en aza indirecek şekilde yeniden düzenleyen IO-bilinçli bir hesaplama yöntemidir. Standart dikkat algoritmasının O(n²) bellek karmaşıklığı yerine O(n) bellek kullanımı sağlar; bu fark özellikle uzun bağlam pencerelerinde dramatik bir verimlilik artışı anlamına gelir. Standart dikkat hesaplamasında Q, K, V (sorgu, anahtar, değer) matrislerinin tam NxN boyutundaki dikkat matrisi GPU HBM'e yazılır ve tekrar okunur. N token sayısı arttıkça bu matris için gereken bellek ve HBM erişim sayısı karesiyle büyür; bu hem yavaş hem bellek yoğun bir yaklaşımdır. Flash Attention'ın çözümü tiling (karo) tekniğidir. Giriş matrisleri küçük bloklara (tile) ayrılan bu yaklaşımda her blok GPU'nun hızlı SRAM ön belleğine yüklenir ve dikkat hesaplaması orada tamamlanır. SRAM HBM'den çok daha hızlı ve daha küçük; Flash Attention, HBM yazma/okuma sayısını agresif şekilde azaltarak hesaplamanın belleğe bağlı (memory-bound) darboğazını ortadan kaldırır. Yeniden hesaplama (recomputation) tekniği geri yayılım sırasındaki bellek ihtiyacını yönetir. İleri geçişte ara sonuçlar kaydedilmez; geri yayılım sırasında gerektiğinde yeniden hesaplanır. Bu, bellek tasarrufunu sağlarken ekstra hesaplama maliyeti getirir; ancak bu denge çok küçük bir maliyet olarak kalmaktadır. Tri Dao ve ekibi tarafından geliştirilmiş olan FlashAttention-1 2022'de yayımlanmış; FlashAttention-2 daha iyi iş bölümü ve paralelleştirme ile belirgin hızlanma sağlamıştır. FlashAttention-3, NVIDIA Hopper mimarisinin asenkron boru hatlarını ve FP8 desteğiyle daha da yüksek verimlilik sunmaktadır. PyTorch'un scaled_dot_product_attention API'si Flash Attention'ı varsayılan uygulama olarak entegre etmiştir; bu nedenle günümüzde çok sayıda Transformer uygulaması Flash Attention'dan dolayı, bunu fark etmeden yararlanmaktadır. **Sık Sorulan Sorular** **Flash Attention kullanmak için ne yapmam gerekir?** PyTorch >= 2.0'da torch.nn.functional.scaled_dot_product_attention kullanan herhangi bir model Flash Attention'dan otomatik olarak yararlanır. flash-attn paketini kurarak HuggingFace Transformers ve diğer çerçevedeki modellere Flash Attention 2/3 entegre edilebilir. **Flash Attention hangi GPU'larda çalışır?** FlashAttention-2 NVIDIA Ampere (A100) ve Hopper (H100) GPU'larında en iyi performansı gösterir; RTX serisi tüketici GPU'larında da çalışır. FlashAttention-3 Hopper mimarisine özelleştirilmiştir. **Flash Attention çıktıyı değiştirir mi?** Hayır. Flash Attention standart dikkat ile matematiksel olarak aynı sonucu üretir; fark yalnızca hesaplama verimliliğindedir. **Uzun bağlam neden Flash Attention olmadan bu kadar zorlayıcıdır?** 128K token için standart dikkat n²=16.4 milyar eleman boyutunda bir matris gerektirir; bu GPU belleğini tamamen aşabilir. Flash Attention bu sorunu tiling ile çözerek pratik uzun bağlam işlemesini mümkün kılar.

Flash Attention Nedir?

Flash Attention, Transformer dikkat mekanizmasını GPU yüksek bant genişliği belleğine (HBM) erişimleri en aza indirecek şekilde yeniden düzenleyen IO-bilinçli bir hesaplama yöntemidir. Standart dikkat O(n²) bellek kullanımına sahipken Flash Attention bunu O(n) düzeyine indirir. Bu fark uzun bağlam pencerelerinde dramatik: 128K token için standart dikkat 16 milyar eleman boyutunda bir matris gerektirir; Flash Attention tiling ile bu sorunu çözer.

Tiling ve SRAM Kullanımı

Standart dikkat tam NxN dikkat matrisini GPU HBM'e yazar ve okur. Flash Attention girdileri küçük bloklara ayırarak her blok için dikkat hesaplamasını GPU'nun hızlı SRAM ön belleğinde tamamlar. HBM erişim sayısı agresif şekilde azaltıldığı için hesaplama belleğe bağlı darboğazdan çıkar. Yeniden hesaplama tekniği geri yayılım için ara sonuçları saklamak yerine gerektiğinde yeniden üretir; bu ekstra hesaplama karşılığında büyük bellek tasarrufu sağlar.

Sürüm Gelişimi

Tri Dao ve ekibi tarafından 2022'de yayımlanan FlashAttention-1, ilk pratik IO-bilinçli dikkat uygulamasıdır. FlashAttention-2 daha iyi iş bölümü ve paralelleştirmeyle belirgin hızlanma sağlamıştır. FlashAttention-3, NVIDIA Hopper mimarisinin asenkron boru hatlarını ve FP8 desteğiyle maksimum verimlilik sunmaktadır. PyTorch scaled_dot_product_attention API'si Flash Attention'ı varsayılan olarak entegre etmiş; çoğu modern Transformer dolayısıyla fark etmeden bu optimizasyondan yararlanmaktadır.

Pratik Entegrasyon

PyTorch >= 2.0'da torch.nn.functional.scaled_dot_product_attention kullanan modeller Flash Attention'dan otomatik yararlanır. flash-attn paketinin kurulumundan sonra HuggingFace Transformers attn_implementation='flash_attention_2' parametresiyle Flash Attention'ı aktifleştirir. vLLM ve llama.cpp da Flash Attention entegrasyonuna sahiptir. Uzun bağlam işlemesi, yüksek veri hacimli çıkarım ve eğitim bütçe verimliliği için Flash Attention artık standart bir bileşendir.

Flash Attention Sürüm Karşılaştırması

Flash Attention 1 (2022)

IO-farkında dikkat algoritması; SRAM tiling ile HBM okuma/yazma 5-10x azaltıldı, transformer eğitim hızı dramatik iyileşti.

Flash Attention 2 (2023)

Paralelleştirme ve iş paylaşımı iyileştirmeleri; A100'de FP16'da 230 TFLOPS ulaştı, FA1'e göre ~2x daha hızlı.

Flash Attention 3 (2024)

H100 Tensor Core ve asenkron boru hattıyla donanım özelliklerini tam kullanım; fp8 desteği ve 740 TFLOPS'a yakın tepe verim.

FlexAttention (PyTorch)

PyTorch 2.x'te kullanıcı tanımlı dikkat maskesi API'si; Flash Attention altyapısını özelleştirilmiş dikkat örüntüleri için esnek biçimde kullanmayı sağlar.

help Sık Sorulan Sorular

  • check_circle Flash Attention kullanmak için ne yapmam gerekir? PyTorch >= 2.0'da scaled_dot_product_attention kullanan modeller otomatik yararlanır. flash-attn paketini kurarak HuggingFace Transformers modelleri de etkinleştirilebilir.
  • check_circle Flash Attention hangi GPU'larda çalışır? FlashAttention-2 NVIDIA Ampere ve Hopper GPU'larında en iyi performansı gösterir; RTX tüketici GPU'larında da çalışır. FlashAttention-3 Hopper mimarisine özelleştirilmiştir.
  • check_circle Flash Attention çıktıyı değiştirir mi? Hayır. Standart dikkat ile matematiksel olarak aynı sonucu üretir; fark yalnızca hesaplama verimliliğindedir.
  • check_circle Uzun bağlam neden Flash Attention olmadan zorlayıcıdır? 128K token için standart dikkat 16 milyar eleman boyutunda matris gerektirir ve GPU belleğini aşabilir. Flash Attention tiling ile bu sorunu çözerek uzun bağlam işlemesini pratik kılar.