Hur kommer nästa generations LLM-arkitektur att se ut? Denna fråga fortsätter att väcka debatter — och Zhihu-bidragsgivaren och utvecklaren Yuxuan erbjuder en skarp jämförelse mellan DeepSeek Sparse Attention (DSA) och Native Sparse Attention (NSA), samt en praktisk genomgång av implementering av DSA-operatörer med TileLang. 🚀 Varför DSA > NSA (i långtidsuppgifter): Från experiment där DSA lades till små modeller och jämförs med NSA, presterar DSA konsekvent bättre – främst tack vare två viktiga designval: 1️⃣ Attn-Score destillation → explicit övervakning för indexval 2️⃣ Token-nivå sparsitet istället för blocknivå→ finare, mer exakt återvinning 🔍 1) Attn-score-destillation Sparsam uppmärksamhet hänger på att välja rätt nyckel-värde-par. DSA övervakar indexmodulen direkt med hjälp av sanna uppmärksamhetspoäng och anpassar träningen till det faktiska målet: "välj de kritiska tokens." NSA optimerar istället endast LM-förlusten utan att ge någon explicit begränsning av indexnoggrannhet — vilket förklarar dess svagare prestanda på benchmarks för långdokumentshämtning. 🔍 2) Token- vs blocknivå-gleshet Noggrannheten skalar med beräkningsbudgeten: mer exakt indexering → bättre återvinning. Tokennivåindexering (DSA) ger naturligtvis högre trohet än blocknivåindexering (NSA). Ur detta perspektiv förväntas NSAs prestandaflaskhals — en intressant fråga: Skulle blockstorlek=8 hjälpa NSA att komma ikapp DSA? ⚙️ Den verkliga utmaningen: Effektiv träning av DSA DSA-träningen innefattar uppvärmning → sparse finetune. Utmaningen: att beräkna och lagra båda grenarnas uppmärksamhetspoäng. En naiv implementation kräver O(n²)-lagring — vilket motverkar FlashAttentions minnesbesparingar. Även förfiltrering (k=2048, h=512+64) kräver fortfarande stora buffertar. 📎 Kod: 🧩 Kärnfusion till undsättning (Figur 1) För att undvika att lagra massiva mellanliggande Attn-Scores använder DSA sammansmälta kärnor. Ett viktigt knep är att slå ihop Index-Score + Top-k i en kärna: • Underhåll en 2K-buffert • Beräkna indexpoäng för varje block...