Daily Tech Briefing
AI 科技速览
每天 5 分钟内学习 AI。获取最新的人工智能新闻,理解其重要性,并学习如何将其应用于您的工作。
Dev.to AI · 2026/7/31 00:50:49
PIVOT Explained — From Paper to Working Code in 10 Minutes
AI 中文解读
PIVOT技术给AI长文本处理带来一个巧妙突破:不用修改模型参数,只用一个分组扫描的小技巧,就能让处理速度提升4倍,延迟降低近40%。核心亮点在于,它解决了AI在处理超长文本时“假稀疏”的尴尬——以往号称高效的方法,实际还得逐个检查所有字词,效率根本没提升。
通俗来说,AI在处理长篇内容时,需要从大量文字中找出关键信息。传统做法每个问题都要扫描全部文本,工作量巨大。PIVOT发现,相邻的问题其实关注的内容高度重叠,于是它把这些问题打包成组,只派一个代表去扫描全文,再把结果共享给组内成员。这样一来,扫描次数大大减少,速度自然快了起来。
这项技术对普通用户意味着实实在在的体验提升。比如你用AI助手分析百万字的书籍或论文,等待反馈的时间可能从几分钟缩短到几十秒;智能客服在回答长对话时,也能更快理解上下文。由于PIVOT无需重新训练模型,任何现有的AI服务都能直接应用,未来我们可能随时享受到更流畅的聊天、更快速的文档处理和更智能的搜索体验。
<p>You enabled sparse attention. Your model still chokes at 128K tokens. The indexer is why — and PIVOT fixes it without touching your weights.</p>
<h2>
TL;DR
</h2>
<ul>
<li>Sparse attention's <strong>indexer</strong> scores all L tokens per query → still O(L²)</li>
<li>PIVOT groups nearby queries (which select ~90% overlapping top-k tokens), runs <strong>one</strong> proxy scan per group → O(L²/g)</li>
<li>Result: <strong>4× indexer speedup</strong>, <strong>1.6× end-to-end latency reduction</strong> on DeepSeek-V3.2 and GLM-5.1</li>
<li>Training-free: plug into existing DSA models at inference time</li>
<li>Two modes: <strong>PIVOT-Reuse</strong> (max speed) and <strong>PIVOT-Refine</strong> (matches dense indexer accuracy)</li>
</ul>
<h2>
The Problem
</h2>
<p>Dynamic Sparse Attention (DSA) should make long-context inference fast. Score all tokens → pick top-k → attend only to those k. Complexity drops from O(L²) to O(L·k).</p>
<p>Except <strong>scoring all tokens is itself O(L²)</strong>. The "indexer" does a full O(L) scan per query position. With L queries, you're back to O(L²). At 100K tokens, the indexer dominates latency. Sparse attention becomes a lie.</p>
<h2>
How It Works
</h2>
<p><strong>Observation 1</strong>: Adjacent queries share ~90% of their top-k token selections — they process nearly identical context.</p>
<p><strong>Observation 2</strong>: Indexer scores are long-tailed — a proxy query produces a reliable candidate set.</p>
<p><strong>PIVOT's algorithm:</strong><br>
</p>
<div class="highlight js-code-highlight">
<pre class="highlight python"><code><span class="n">group</span> <span class="o">=</span> <span class="p">[</span><span class="n">q_i</span><span class="p">,</span> <span class="n">q_</span><span class="p">{</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">},</span> <span class="p">...,</span> <span class="n">q_</span><span class="p">{</span><span class="n">i</span><span class="o">+</span><span class="n">g</span><span class="o">-</span><span class="mi">1</span><span class="p">}]</span>
<span class="n">proxy_q</span> <span class="o">=</span> <span class="nf">mean</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
<span class="c1"># ONE scan instead of g scans
</span><span class="n">scores</span> <span class="o">=</span> <span class="n">proxy_q</span> <span class="err">·</span> <span class="n">K</span><span class="p">[:</span><span class="n">i</span><span class="p">]</span> <span class="c1"># O(L)
</span><span class="n">C</span> <span class="o">=</span> <span class="n">top</span><span class="o">-</span><span class="nc">K</span><span class="p">(</span><span class="n">scores</span><span class="p">)</span> <span class="c1"># candidate set, K = 2 × top_k
</span>
<span class="c1"># per-query refine (PIVOT-Refine)
</span><span class="k">for</span> <span class="n">q</span> <span class="ow">in</span> <span class="n">group</span><span class="p">:</span>
<span class="n">refine_scores</span> <span class="o">=</span> <span class="n">q</span> <span class="err">·</span> <span class="n">K</span><span class="p">[</span><span class="n">C</span><span class="p">]</span> <span class="c1"># O(K), not O(L)
</span> <span class="n">final_indices</span><span class="p">[</span><span class="n">q</span><span class="p">]</span> <span class="o">=</span> <span class="n">top</span><span class="o">-</span><span class="nf">k</span><span class="p">(</span><span class="n">refine_scores</span><span class="p">)</span>
</code></pre>
</div>
<p>Indexer cost: O(L²) → <strong>O(L²/g)</strong>. With g=8 that's 8× fewer full scans.</p>
<h2>
Show Me The Code
</h2>
<div class="highlight js-code-highlight">
<pre class="highlight python"><code><span class="kn">import</span> <span class="n">torch</span>
<span class="kn">import</span> <span class="n">torch.nn.functional</span> <span c
分享
阅读原文 ↗