01Darboğaz hesap değil, bellek#
Dikkat her token çifti için bir puan hesaplar. N tokenlık bir bağlamda bu, N × N’lik bir puan tablosu demektir. Örneğin N = 4.096 için 4.096² = 16.777.216 puan; yarım duyarlıkla (her sayı 2 bayt) bu yaklaşık 32 MiB eder, üstelik her dikkat kafası ve her katman için. Standart uygulamada bu tablo, GPU’nun yüksek kapasiteli ama görece yavaş belleğine (HBM) yazılır, sonra softmax için okunur, sonra tekrar yazılır, sonra değerlerle çarpmak için yeniden okunur.
Dao ve arkadaşlarının tespiti: dikkat çoğunlukla bellek trafiği ile sınırlıdır. GPU’nun hesap birimleri, bellekten veri gelmesini bekler. FlashAttention, sonucu değiştirmeden HBM’ye yapılan okuma/yazma sayısını azaltan, “giriş–çıkış farkında” (IO-aware) bir dikkat algoritmasıdır; hesabı küçük parçalara (tiling) bölerek hızlı yonga-içi belleğe sığdırır. FlashAttention ↗
02Hile: softmax’i parça parça hesapla#
Zorluk, softmax’in tüm satırı görmesi gerekmesidir: paydada hepsinin toplamı var. FlashAttention’ın çözümü “çevrimiçi softmax”tır: satırı bloklar hâlinde işle; her blokta o ana kadarki en büyük değeri ve toplamı güncelle; yeni bir blok daha büyük bir değer getirirse eski toplamı bir çarpanla yeniden ölçekle. Sonuç, tüm satırı bir arada gören hesapla aynıdır.
Aşağıda 16 puanlık bir satır var. Standart softmax ile bloklu hesabı karşılaştır; blok boyutunu değiştir.
Bloklar hâlinde, aynı sonuç
Satırı kaç parçaya bölersen böl, sonuç aynı mı? Blok boyutunu değiştir, çalışan en büyük değer ve toplamın bloktan bloğa nasıl güncellendiğini izle.
| Blok | Skorlar | Çalışan en büyük | Çalışan toplam | Eski toplam çarpanı |
|---|---|---|---|---|
| 1 | 0,4; 1,2; −0,3; 0,8 | 1,2 | 2,343 | — |
| 2 | 2,1; 0,1; −1,0; 0,9 | 2,1 | 2,434 | 0,407 |
| 3 | 0,5; 3,4; 1,1; −0,6 | 3,4 | 1,837 | 0,273 |
| 4 | 0,2; 1,7; 0,0; 0,7 | 3,4 | 2,161 | 1,000 |
Yeni bir blokta daha büyük bir skor görülürse, o ana kadar biriken toplam e^(eski en büyük − yeni en büyük) ile küçültülüp yeni toplama eklenir. Böylece tüm satırı bellekte tutmadan, tam olarak aynı olasılıklar elde edilir.
Her blok boyutunda iki sonuç arasındaki fark en çok 10⁻¹⁶ mertebesinde: yani kayan nokta yuvarlama düzeyinde. Bloklu hesap bir yaklaşım değil, aynı sayıdır; FlashAttention’ı “yaklaşık dikkat” yöntemlerinden ayıran da budur. Demo yalnızca bu tek satırlık hileyi gösterir: GPU belleği ya da hız ölçümü içermez.
03Makale ne iddia ediyor, hangi koşulda?#
| Bildirilen sonuç | Dikkat edilecek nokta |
|---|---|
| BERT-large’da (uzunluk 512) MLPerf 1.1 eğitim rekoruna göre %15 uçtan uca hızlanma | Yazarların kendi donanımı ve yazılım yığınıyla; hız kazancı bu kurulumdur |
| GPT-2’de (uzunluk 1K) 3 kat, Long-Range Arena’da (1K–4K) 2,4 kat hızlanma | Hızlanma, uzunluk ve model yapılandırmasına göre değişir |
| GPT-2’de 0,7 daha iyi perplexity; uzun belge sınıflandırmada 6,4 puan artış | Bu kazanç, daha uzun bağlamın kullanılabilmesinden gelir; algoritmanın sonucu değiştirmesinden değil |
| Path-X (uzunluk 16K) ve Path-256 (64K) görevlerinde ilk kez şanstan iyi başarı | Bu görevler bağlam uzunluğuna aşırı duyarlı özel testlerdir |
Önemli bir ayrıntı: FlashAttention hesap miktarını (işlem sayısını) azaltmaz; dikkat hâlâ N²’dir. Azalan şey, belleğe erişim ve onun yer kaplaması: N × N’lik tablo artık bütünüyle saklanmaz.
Bir sonraki fikir, aynı dikkat maliyetine değil, üretimin ardışıklığına karşı: spekülatif çözümleme.
Bu yazıyı bitirdiğinde:
- FlashAttention’ın hesabı değil bellek trafiğini azalttığını anlatabilirsin.
- Bloklu softmax’in neden aynı sonucu verdiğini açıklayabilirsin.
Cümlelerden birini kendi sözlerinle anlatamıyorsan, ilgili bölüme dön ve demoyu yeniden dene.
Spekülatif çözümleme: küçük model önerir, büyük model onaylar
İleri · 7 dk okuma