Wie wird die nächste Generation der LLM-Architektur aussehen? Diese Frage sorgt immer wieder für Debatten – und der Zhihu-Beitragende & Entwickler Yuxuan bietet einen scharfen Vergleich zwischen DeepSeek Sparse Attention (DSA) und Native Sparse Attention (NSA) sowie einen praktischen Blick auf die Implementierung von DSA-Operatoren mit TileLang. 🚀 Warum DSA > NSA (bei Langzeit-Kontextaufgaben): Aus Experimenten, die DSA zu kleinen Modellen hinzufügen und mit NSA vergleichen, geht hervor, dass DSA konstant besser abschneidet – hauptsächlich aufgrund von zwei entscheidenden Designentscheidungen: 1️⃣ Attn-Score-Destillation → explizite Überwachung der Indexauswahl 2️⃣ Token-Level-Sparsity statt Block-Level → feiner abgestufte, genauere Abrufung 🔍 1) Attn-Score-Destillation Sparse Attention hängt von der Auswahl der richtigen Schlüssel-Wert-Paare ab. DSA überwacht direkt das Indexmodul mit echten Aufmerksamkeitswerten und stimmt das Training mit dem tatsächlichen Ziel ab: "Wähle die kritischen Tokens." NSA hingegen optimiert nur den LM-Verlust und bietet keine explizite Einschränkung der Indexgenauigkeit – was seine schwächere Leistung bei der Abrufung von Langdokumenten erklärt. 🔍 2) Token- vs. Block-Level-Sparsity Die Genauigkeit skaliert mit dem Rechenbudget: präzisere Indizierung → bessere Abrufung. Die Token-Level-Indizierung (DSA) führt natürlicherweise zu höherer Genauigkeit als die Block-Level-Indizierung (NSA). Aus dieser Perspektive ist der Leistungsengpass von NSA zu erwarten – eine interessante Frage: Würde block-size=8 NSA helfen, zu DSA aufzuholen? ⚙️ Die echte Herausforderung: DSA effizient trainieren Das DSA-Training umfasst Warmup → Sparse Finetune. Die Herausforderung: die Aufmerksamkeitswerte beider Zweige zu berechnen und zu speichern. Eine naive Implementierung erfordert O(n²) Speicher – was die Speicherersparnisse von FlashAttention negiert. Selbst das Vorfiltern (k=2048, h=512+64) erfordert immer noch große Puffer. 📎 Code: 🧩 Kernel-Fusion zur Rettung (Abb. 1) Um massive Zwischen-Attn-Scores zu vermeiden, verwendet DSA fusionierte Kerne. Ein wichtiger Trick besteht darin, Index-Score + Top-k in einem Kern zu kombinieren: • Halte einen 2K-Puffer • Berechne den Index-Score für jeden Block...