Jak będzie wyglądać architektura LLM nowej generacji? To pytanie wciąż wywołuje debaty — a współpracownik Zhihu i deweloper Yuxuan oferuje wyraźne porównanie między DeepSeek Sparse Attention (DSA) a Native Sparse Attention (NSA), a także praktyczny wgląd w implementację operatorów DSA z TileLang. 🚀 Dlaczego DSA > NSA (w zadaniach z długim kontekstem): Z eksperymentów dodających DSA do małych modeli i porównujących z NSA wynika, że DSA konsekwentnie wypada lepiej — głównie dzięki dwóm kluczowym wyborom projektowym: 1️⃣ Destylacja Attn-Score → wyraźne nadzorowanie wyboru indeksu 2️⃣ Rzadkość na poziomie tokenów zamiast na poziomie bloków → bardziej precyzyjne, dokładniejsze pobieranie 🔍 1) Destylacja Attn-Score Rzadka uwaga opiera się na wyborze odpowiednich par klucz-wartość. DSA bezpośrednio nadzoruje moduł indeksu za pomocą prawdziwych wyników uwagi, dostosowując trening do rzeczywistego celu: "wybierz krytyczne tokeny." NSA zamiast tego optymalizuje tylko stratę LM, nie zapewniając wyraźnego ograniczenia dokładności indeksu — co wyjaśnia jego słabsze wyniki w benchmarkach pobierania długich dokumentów. 🔍 2) Rzadkość na poziomie tokenów vs bloków Dokładność rośnie wraz z budżetem obliczeniowym: bardziej precyzyjne indeksowanie → lepsze pobieranie. Indeksowanie na poziomie tokenów (DSA) naturalnie daje wyższą wierność niż na poziomie bloków (NSA). Z tej perspektywy, wąskie gardło wydajności NSA jest oczekiwane — interesujące pytanie: Czy rozmiar bloku=8 pomoże NSA dogonić DSA? ⚙️ Prawdziwe wyzwanie: Efektywne trenowanie DSA Trening DSA obejmuje Rozgrzewkę → Rzadkie Dostosowanie. Wyzwanie: obliczanie i przechowywanie wyników uwagi obu gałęzi. Naivna implementacja wymaga O(n²) pamięci — co neguje oszczędności pamięci FlashAttention. Nawet wstępne filtrowanie (k=2048, h=512+64) wciąż wymaga dużych buforów. 📎 Kod: 🧩 Fuzja Kerneli na Ratunek (Rys. 1) Aby uniknąć przechowywania ogromnych pośrednich wyników Attn-Scores, DSA wykorzystuje zintegrowane kernele. Kluczowym trikiem jest połączenie Index-Score + Top-k w jednym kernelu: • Utrzymuj bufor 2K • Oblicz Index-Score dla każdego bloku...