Come sarà l'architettura LLM di nuova generazione? Questa domanda continua a suscitare dibattiti — e il contributore e sviluppatore di Zhihu Yuxuan offre un confronto acuto tra DeepSeek Sparse Attention (DSA) e Native Sparse Attention (NSA), oltre a uno sguardo pratico all'implementazione degli operatori DSA con TileLang. 🚀 Perché DSA > NSA (nei compiti a lungo contesto): Dagli esperimenti che aggiungono DSA a modelli piccoli e confrontano con NSA, DSA si comporta costantemente meglio — principalmente a causa di due scelte di design chiave: 1️⃣ Distillazione dell'Attn-Score → supervisione esplicita per la selezione degli indici 2️⃣ Sparsità a livello di token piuttosto che a livello di blocco → recupero più preciso e accurato 🔍 1) Distillazione dell'Attn-Score La sparse attention si basa sulla selezione delle giuste coppie chiave-valore. DSA supervisiona direttamente il modulo indice utilizzando i veri punteggi di attenzione, allineando l'addestramento con l'obiettivo reale: "scegliere i token critici." NSA invece ottimizza solo la perdita del LM, non fornendo alcun vincolo esplicito sull'accuratezza dell'indice — il che spiega le sue prestazioni più deboli nei benchmark di recupero di documenti lunghi. 🔍 2) Sparsità a livello di token vs a livello di blocco L'accuratezza scala con il budget computazionale: indicizzazione più precisa → recupero migliore. L'indicizzazione a livello di token (DSA) produce naturalmente una fedeltà superiore rispetto a quella a livello di blocco (NSA). Da questa prospettiva, il collo di bottiglia delle prestazioni di NSA è previsto — una domanda interessante: un blocco di dimensione=8 aiuterebbe NSA a recuperare DSA? ⚙️ La vera sfida: addestrare DSA in modo efficiente L'addestramento di DSA comporta Warmup → Sparse Finetune. La sfida: calcolare e memorizzare i punteggi di attenzione di entrambi i rami. Un'implementazione naïve richiede O(n²) di memoria — annullando i risparmi di memoria di FlashAttention. Anche il pre-filtraggio (k=2048, h=512+64) richiede comunque buffer di grandi dimensioni. 📎 Codice: 🧩 Fusione dei Kernel in aiuto (Fig 1) Per evitare di memorizzare enormi punteggi di Attn-Scores intermedi, DSA utilizza kernel fusi. Un trucco chiave è unire Index-Score + Top-k in un solo kernel: • Mantenere un buffer di 2K • Calcolare l'Index-Score per ogni blocco...